43 lines
1 KiB
Python
43 lines
1 KiB
Python
"""
|
|
Parse link label
|
|
|
|
this function assumes that first character ("[") already matches
|
|
returns the end of the label
|
|
|
|
"""
|
|
from markdown_it.rules_inline import StateInline
|
|
|
|
|
|
def parseLinkLabel(state: StateInline, start: int, disableNested: bool = False) -> int:
|
|
labelEnd = -1
|
|
oldPos = state.pos
|
|
found = False
|
|
|
|
state.pos = start + 1
|
|
level = 1
|
|
|
|
while state.pos < state.posMax:
|
|
marker = state.src[state.pos]
|
|
if marker == "]":
|
|
level -= 1
|
|
if level == 0:
|
|
found = True
|
|
break
|
|
|
|
prevPos = state.pos
|
|
state.md.inline.skipToken(state)
|
|
if marker == "[":
|
|
if prevPos == state.pos - 1:
|
|
# increase level if we find text `[`,
|
|
# which is not a part of any token
|
|
level += 1
|
|
elif disableNested:
|
|
state.pos = oldPos
|
|
return -1
|
|
if found:
|
|
labelEnd = state.pos
|
|
|
|
# restore old state
|
|
state.pos = oldPos
|
|
|
|
return labelEnd
|