in src/commonMain/kotlin/org/intellij/markdown/parser/markerblocks/impl/CodeFenceMarkerBlock.kt [35:70]
override fun doProcessToken(pos: LookaheadText.Position,
currentConstraints: MarkdownConstraints): MarkerBlock.ProcessingResult {
if (pos.offset < realInterestingOffset) {
return MarkerBlock.ProcessingResult.CANCEL
}
// Eat everything if we're on code line
if (pos.offsetInCurrentLine != -1) {
return MarkerBlock.ProcessingResult.CANCEL
}
assert(pos.offsetInCurrentLine == -1)
val nextLineConstraints = constraints.applyToNextLineAndAddModifiers(pos)
if (!nextLineConstraints.extendsPrev(constraints)) {
return MarkerBlock.ProcessingResult.DEFAULT
}
val nextLineOffset = pos.nextLineOrEofOffset
realInterestingOffset = nextLineOffset
val currentLine = nextLineConstraints.eatItselfFromString(pos.currentLine)
if (endsThisFence(currentLine)) {
productionHolder.addProduction(listOf(SequentialParser.Node(pos.offset + 1..pos.nextLineOrEofOffset,
MarkdownTokenTypes.CODE_FENCE_END)))
scheduleProcessingResult(nextLineOffset, MarkerBlock.ProcessingResult.DEFAULT)
} else {
val contentRange = min(pos.offset + 1 + constraints.getCharsEaten(pos.currentLine), nextLineOffset)..nextLineOffset
if (contentRange.first < contentRange.last) {
productionHolder.addProduction(listOf(SequentialParser.Node(
contentRange, MarkdownTokenTypes.CODE_FENCE_CONTENT)))
}
}
return MarkerBlock.ProcessingResult.CANCEL
}