diff options
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/helpers/parse_link_label.mjs')
-rw-r--r-- | packages/markdown-it-14.1.0/lib/helpers/parse_link_label.mjs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/packages/markdown-it-14.1.0/lib/helpers/parse_link_label.mjs b/packages/markdown-it-14.1.0/lib/helpers/parse_link_label.mjs new file mode 100644 index 0000000..f1a53fa --- /dev/null +++ b/packages/markdown-it-14.1.0/lib/helpers/parse_link_label.mjs @@ -0,0 +1,49 @@ +// Parse link label +// +// this function assumes that first character ("[") already matches; +// returns the end of the label +// + +export default function parseLinkLabel (state, start, disableNested) { + let level, found, marker, prevPos + + const max = state.posMax + const oldPos = state.pos + + state.pos = start + 1 + level = 1 + + while (state.pos < max) { + marker = state.src.charCodeAt(state.pos) + if (marker === 0x5D /* ] */) { + level-- + if (level === 0) { + found = true + break + } + } + + prevPos = state.pos + state.md.inline.skipToken(state) + if (marker === 0x5B /* [ */) { + if (prevPos === state.pos - 1) { + // increase level if we find text `[`, which is not a part of any token + level++ + } else if (disableNested) { + state.pos = oldPos + return -1 + } + } + } + + let labelEnd = -1 + + if (found) { + labelEnd = state.pos + } + + // restore old state + state.pos = oldPos + + return labelEnd +} |