# Parse backticks import re from .state_inline import StateInline regex = re.compile("^ (.+) $") def backtick(state: StateInline, silent: bool) -> bool: pos = state.pos if state.src[pos] != "`": return False start = pos pos += 1 maximum = state.posMax # scan marker length while pos < maximum and (state.src[pos] == "`"): pos += 1 marker = state.src[start:pos] openerLength = len(marker) if state.backticksScanned and state.backticks.get(openerLength, 0) <= start: if not silent: state.pending += marker state.pos += openerLength return True matchStart = matchEnd = pos # Nothing found in the cache, scan until the end of the line (or until marker is found) while True: try: matchStart = state.src.index("`", matchEnd) except ValueError: break matchEnd = matchStart + 1 # scan marker length while matchEnd < maximum and (state.src[matchEnd] == "`"): matchEnd += 1 closerLength = matchEnd - matchStart if closerLength == openerLength: # Found matching closer length. if not silent: token = state.push("code_inline", "code", 0) token.markup = marker token.content = state.src[pos:matchStart].replace("\n", " ") if ( token.content.startswith(" ") and token.content.endswith(" ") and len(token.content.strip()) > 0 ): token.content = token.content[1:-1] state.pos = matchEnd return True # Some different length found, put it in cache as upper limit of where closer can be found state.backticks[closerLength] = matchStart # Scanned through the end, didn't find anything state.backticksScanned = True if not silent: state.pending += marker state.pos += openerLength return True