in src/commonMain/kotlin/org/intellij/markdown/flavours/gfm/StrikeThroughParser.kt [20:61]
override fun parse(tokens: TokensCache, rangesToGlue: List<IntRange>): SequentialParser.ParsingResult {
val result = SequentialParser.ParsingResultBuilder()
val delegateIndices = RangesListBuilder()
var lastOpenedPos: Int? = null
var iterator = tokens.RangesListIterator(rangesToGlue)
while (iterator.type != null) {
if (iterator.type != GFMTokenTypes.TILDE) {
delegateIndices.put(iterator.index)
iterator = iterator.advance()
continue
}
if (lastOpenedPos != null
&& isGoodType(iterator.rawLookup(-1))
&& iterator.rawLookup(1) == GFMTokenTypes.TILDE) {
iterator = iterator.advance()
result.withNode(SequentialParser.Node(lastOpenedPos..iterator.index + 1, GFMElementTypes.STRIKETHROUGH))
iterator = iterator.advance()
lastOpenedPos = null
continue
}
if (lastOpenedPos == null
&& iterator.rawLookup(1) == GFMTokenTypes.TILDE
&& isGoodType(iterator.rawLookup(2))) {
lastOpenedPos = iterator.index
iterator = iterator.advance().advance()
continue
}
delegateIndices.put(iterator.index)
iterator = iterator.advance()
}
if (lastOpenedPos != null) {
for (delta in 0..1) {
delegateIndices.put(lastOpenedPos + delta)
}
}
return result.withFurtherProcessing(delegateIndices.get())
}