in src/commonMain/kotlin/org/intellij/markdown/parser/markerblocks/providers/LinkReferenceDefinitionProvider.kt [88:137]
fun matchLinkDestination(text: CharSequence, start: Int): IntRange? {
if (start >= text.length)
return null
var offset = start
if (text[offset] == '<') {
offset++
while (offset < text.length) {
val c = text[offset]
if (c == '>')
return IntRange(start, offset)
if (c == '<' || c == '>' || isSpaceOrNewline(c))
return null
if (c == '\\' && offset + 1 < text.length && !isSpaceOrNewline(text[offset + 1]))
offset++
offset++
}
return null
}
else {
var hasParens = false
while (offset < text.length) {
val c = text[offset]
if (isSpaceOrNewline(c) || c.code <= 27)
break
if (c == '(') {
if (hasParens)
break
else
hasParens = true
}
else if (c == ')') {
if (!hasParens)
break
else
hasParens = false
}
else if (c == '\\' && offset + 1 < text.length && !isSpaceOrNewline(text[offset + 1]))
offset++
offset++
}
if (start == offset)
return null
else
return IntRange(start, offset - 1)
}
}