Server IP : 85.214.239.14 / Your IP : 3.147.57.239 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/cwd/proc/3/root/lib/python3/dist-packages/markdown_it/rules_inline/ |
Upload File : |
# Process *this* and _that_ # from .state_inline import Delimiter, StateInline def tokenize(state: StateInline, silent: bool): """Insert each marker as a separate text token, and add it to delimiter list""" start = state.pos marker = state.srcCharCode[start] if silent: return False # /* _ */ /* * */ if marker != 0x5F and marker != 0x2A: return False scanned = state.scanDelims(state.pos, marker == 0x2A) for i in range(scanned.length): token = state.push("text", "", 0) token.content = chr(marker) state.delimiters.append( Delimiter( marker=marker, length=scanned.length, jump=i, token=len(state.tokens) - 1, end=-1, open=scanned.can_open, close=scanned.can_close, ) ) state.pos += scanned.length return True def _postProcess(state, delimiters): i = len(delimiters) - 1 while i >= 0: startDelim = delimiters[i] # /* _ */ /* * */ if startDelim.marker != 0x5F and startDelim.marker != 0x2A: i -= 1 continue # Process only opening markers if startDelim.end == -1: i -= 1 continue endDelim = delimiters[startDelim.end] # If the previous delimiter has the same marker and is adjacent to this one, # merge those into one strong delimiter. # # `<em><em>whatever</em></em>` -> `<strong>whatever</strong>` # isStrong = ( i > 0 and delimiters[i - 1].end == startDelim.end + 1 and delimiters[i - 1].token == startDelim.token - 1 and delimiters[startDelim.end + 1].token == endDelim.token + 1 and delimiters[i - 1].marker == startDelim.marker ) ch = chr(startDelim.marker) token = state.tokens[startDelim.token] token.type = "strong_open" if isStrong else "em_open" token.tag = "strong" if isStrong else "em" token.nesting = 1 token.markup = ch + ch if isStrong else ch token.content = "" token = state.tokens[endDelim.token] token.type = "strong_close" if isStrong else "em_close" token.tag = "strong" if isStrong else "em" token.nesting = -1 token.markup = ch + ch if isStrong else ch token.content = "" if isStrong: state.tokens[delimiters[i - 1].token].content = "" state.tokens[delimiters[startDelim.end + 1].token].content = "" i -= 1 i -= 1 def postProcess(state: StateInline): """Walk through delimiter list and replace text tokens with tags.""" _postProcess(state, state.delimiters) for token in state.tokens_meta: if token and "delimiters" in token: _postProcess(state, token["delimiters"])