11from __future__ import annotations
22
33from collections .abc import Callable
4+ from contextlib import suppress
45import re
56from urllib .parse import quote , unquote , urlparse , urlunparse # noqa: F401
67
@@ -21,18 +22,17 @@ def normalizeLink(url: str) -> str:
2122 """
2223 parsed = mdurl .parse (url , slashes_denote_host = True )
2324
24- if parsed .hostname :
25- # Encode hostnames in urls like:
26- # `http://host/`, `https://host/`, `mailto:user@host`, `//host/`
27- #
28- # We don't encode unknown schemas, because it's likely that we encode
29- # something we shouldn't (e.g. `skype:name` treated as `skype:host`)
30- #
31- if not parsed .protocol or parsed .protocol in RECODE_HOSTNAME_FOR :
32- try :
33- parsed = parsed ._replace (hostname = _punycode .to_ascii (parsed .hostname ))
34- except Exception :
35- pass
25+ # Encode hostnames in urls like:
26+ # `http://host/`, `https://host/`, `mailto:user@host`, `//host/`
27+ #
28+ # We don't encode unknown schemas, because it's likely that we encode
29+ # something we shouldn't (e.g. `skype:name` treated as `skype:host`)
30+ #
31+ if parsed .hostname and (
32+ not parsed .protocol or parsed .protocol in RECODE_HOSTNAME_FOR
33+ ):
34+ with suppress (Exception ):
35+ parsed = parsed ._replace (hostname = _punycode .to_ascii (parsed .hostname ))
3636
3737 return mdurl .encode (mdurl .format (parsed ))
3838
@@ -47,18 +47,17 @@ def normalizeLinkText(url: str) -> str:
4747 """
4848 parsed = mdurl .parse (url , slashes_denote_host = True )
4949
50- if parsed .hostname :
51- # Encode hostnames in urls like:
52- # `http://host/`, `https://host/`, `mailto:user@host`, `//host/`
53- #
54- # We don't encode unknown schemas, because it's likely that we encode
55- # something we shouldn't (e.g. `skype:name` treated as `skype:host`)
56- #
57- if not parsed .protocol or parsed .protocol in RECODE_HOSTNAME_FOR :
58- try :
59- parsed = parsed ._replace (hostname = _punycode .to_unicode (parsed .hostname ))
60- except Exception :
61- pass
50+ # Encode hostnames in urls like:
51+ # `http://host/`, `https://host/`, `mailto:user@host`, `//host/`
52+ #
53+ # We don't encode unknown schemas, because it's likely that we encode
54+ # something we shouldn't (e.g. `skype:name` treated as `skype:host`)
55+ #
56+ if parsed .hostname and (
57+ not parsed .protocol or parsed .protocol in RECODE_HOSTNAME_FOR
58+ ):
59+ with suppress (Exception ):
60+ parsed = parsed ._replace (hostname = _punycode .to_unicode (parsed .hostname ))
6261
6362 # add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720
6463 return mdurl .decode (mdurl .format (parsed ), mdurl .DECODE_DEFAULT_CHARS + "%" )
0 commit comments