fun matchLinkDestination()

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)
            }

        }