in lib/src/inline_parser.dart [131:179]
void _linkOrImage() {
var index = _delimiterStack
.lastIndexWhere((d) => d.char == $lbracket || d.char == $exclamation);
if (index == -1) {
// Never found a possible open bracket. This is just a literal "]".
addNode(Text(']'));
advanceBy(1);
start = pos;
return;
}
var delimiter = _delimiterStack[index] as SimpleDelimiter;
if (!delimiter.isActive) {
_delimiterStack.removeAt(index);
addNode(Text(']'));
advanceBy(1);
start = pos;
return;
}
var syntax = delimiter.syntax;
if (syntax is LinkSyntax) {
var nodeIndex = _tree.lastIndexWhere((n) => n == delimiter.node);
var linkNode = syntax.close(this, delimiter, null, getChildren: () {
_processEmphasis(index);
// All of the nodes which lie past [index] are children of this
// link/image.
var children = _tree.sublist(nodeIndex + 1, _tree.length);
_tree.removeRange(nodeIndex + 1, _tree.length);
return children;
});
if (linkNode != null) {
_delimiterStack.removeAt(index);
if (delimiter.char == $lbracket) {
for (var d in _delimiterStack.sublist(0, index)) {
if (d.char == $lbracket) d.isActive = false;
}
}
_tree[nodeIndex] = linkNode;
advanceBy(1);
start = pos;
} else {
_delimiterStack.removeAt(index);
pos = start;
advanceBy(1);
}
} else {
throw StateError('Non-link syntax delimiter found with character '
'"${delimiter.char}"');
}
}