Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/markdown_it/rules_inline/autolink.py: 96%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

52 statements  

1# Process autolinks '<protocol:...>' 

2import re 

3 

4from .state_inline import StateInline 

5 

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]*)$") 

10 

11 

12def autolink(state: StateInline, silent: bool) -> bool: 

13 pos = state.pos 

14 

15 if state.src[pos] != "<": 

16 return False 

17 

18 start = state.pos 

19 maximum = state.posMax 

20 

21 while True: 

22 pos += 1 

23 if pos >= maximum: 

24 return False 

25 

26 ch = state.src[pos] 

27 

28 if ch == "<": 

29 return False 

30 if ch == ">": 

31 break 

32 

33 url = state.src[start + 1 : pos] 

34 

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 

39 

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" 

45 

46 token = state.push("text", "", 0) 

47 token.content = state.md.normalizeLinkText(url) 

48 

49 token = state.push("link_close", "a", -1) 

50 token.markup = "autolink" 

51 token.info = "auto" 

52 

53 state.pos += len(url) + 2 

54 return True 

55 

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 

60 

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" 

66 

67 token = state.push("text", "", 0) 

68 token.content = state.md.normalizeLinkText(url) 

69 

70 token = state.push("link_close", "a", -1) 

71 token.markup = "autolink" 

72 token.info = "auto" 

73 

74 state.pos += len(url) + 2 

75 return True 

76 

77 return False