| from typing import TYPE_CHECKING, Match | |
| from ..util import escape_url | |
| if TYPE_CHECKING: | |
| from ..core import InlineState | |
| from ..inline_parser import InlineParser | |
| from ..markdown import Markdown | |
| __all__ = ["url"] | |
| URL_LINK_PATTERN = r"""https?:\/\/[^\s<]+[^<.,:;"')\]\s]""" | |
| def parse_url_link(inline: "InlineParser", m: Match[str], state: "InlineState") -> int: | |
| text = m.group(0) | |
| pos = m.end() | |
| if state.in_link: | |
| inline.process_text(text, state) | |
| return pos | |
| state.append_token( | |
| { | |
| "type": "link", | |
| "children": [{"type": "text", "raw": text}], | |
| "attrs": {"url": escape_url(text)}, | |
| } | |
| ) | |
| return pos | |
| def url(md: "Markdown") -> None: | |
| md.inline.register("url_link", URL_LINK_PATTERN, parse_url_link) | |