Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/markdown_it/rules_inline/autolink.py: 96%
52 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:15 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:15 +0000
1# Process autolinks '<protocol:...>'
2import re
4from .state_inline import StateInline
6EMAIL_RE = re.compile(
7 r"^([a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$" # noqa: E501
8)
9AUTOLINK_RE = re.compile(r"^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$")
12def autolink(state: StateInline, silent: bool) -> bool:
13 pos = state.pos
15 if state.src[pos] != "<":
16 return False
18 start = state.pos
19 maximum = state.posMax
21 while True:
22 pos += 1
23 if pos >= maximum:
24 return False
26 ch = state.src[pos]
28 if ch == "<":
29 return False
30 if ch == ">":
31 break
33 url = state.src[start + 1 : pos]
35 if AUTOLINK_RE.search(url) is not None:
36 fullUrl = state.md.normalizeLink(url)
37 if not state.md.validateLink(fullUrl):
38 return False
40 if not silent:
41 token = state.push("link_open", "a", 1)
42 token.attrs = {"href": fullUrl}
43 token.markup = "autolink"
44 token.info = "auto"
46 token = state.push("text", "", 0)
47 token.content = state.md.normalizeLinkText(url)
49 token = state.push("link_close", "a", -1)
50 token.markup = "autolink"
51 token.info = "auto"
53 state.pos += len(url) + 2
54 return True
56 if EMAIL_RE.search(url) is not None:
57 fullUrl = state.md.normalizeLink("mailto:" + url)
58 if not state.md.validateLink(fullUrl):
59 return False
61 if not silent:
62 token = state.push("link_open", "a", 1)
63 token.attrs = {"href": fullUrl}
64 token.markup = "autolink"
65 token.info = "auto"
67 token = state.push("text", "", 0)
68 token.content = state.md.normalizeLinkText(url)
70 token = state.push("link_close", "a", -1)
71 token.markup = "autolink"
72 token.info = "auto"
74 state.pos += len(url) + 2
75 return True
77 return False