| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import functools
- import re
- # Skip text characters for text token, place those to pending buffer
- # and increment current pos
- from .state_inline import StateInline
- # Rule to skip pure text
- # '{}$%@~+=:' reserved for extensions
- # !!!! Don't confuse with "Markdown ASCII Punctuation" chars
- # http://spec.commonmark.org/0.15/#ascii-punctuation-character
- _TerminatorChars = {
- "\n",
- "!",
- "#",
- "$",
- "%",
- "&",
- "*",
- "+",
- "-",
- ":",
- "<",
- "=",
- ">",
- "@",
- "[",
- "\\",
- "]",
- "^",
- "_",
- "`",
- "{",
- "}",
- "~",
- }
- @functools.cache
- def _terminator_char_regex() -> re.Pattern[str]:
- return re.compile("[" + re.escape("".join(_TerminatorChars)) + "]")
- def text(state: StateInline, silent: bool) -> bool:
- pos = state.pos
- posMax = state.posMax
- terminator_char = _terminator_char_regex().search(state.src, pos)
- pos = terminator_char.start() if terminator_char else posMax
- if pos == state.pos:
- return False
- if not silent:
- state.pending += state.src[state.pos : pos]
- state.pos = pos
- return True
|