You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1013 B
48 lines
1013 B
// Parse link label |
|
// |
|
// this function assumes that first character ("[") already matches; |
|
// returns the end of the label |
|
// |
|
'use strict'; |
|
|
|
module.exports = function parseLinkLabel(state, start, disableNested) { |
|
var level, found, marker, prevPos, |
|
labelEnd = -1, |
|
max = state.posMax, |
|
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; |
|
} |
|
} |
|
} |
|
|
|
if (found) { |
|
labelEnd = state.pos; |
|
} |
|
|
|
// restore old state |
|
state.pos = oldPos; |
|
|
|
return labelEnd; |
|
};
|
|
|