in src/org/jetbrains/r/rmarkdown/RMarkdownPsiUtil.kt [56:88]
fun findFenceRoots(node: ASTNode, fenceRange: TextRange): List<ASTNode>? {
if (node.textRange == fenceRange) {
return listOf(node)
}
var child: ASTNode? = node.firstChildNode
while (child != null) {
when {
child.textRange.contains(fenceRange) -> return findFenceRoots(child, fenceRange)
fenceRange.startOffset == child.textRange.startOffset || (isSpace(child) && child.textRange.contains(fenceRange.startOffset)) -> {
val result = ArrayList<ASTNode>()
while (child != null) {
if (!isSpace(child)) {
result.add(child)
}
if (fenceRange.endOffset == child.textRange.endOffset || (isSpace(child) && child.textRange.contains(fenceRange.endOffset))) {
return if (result.isNotEmpty()) result else null
}
if (child.textRange.contains(fenceRange.endOffset)) {
return null
}
child = child.treeNext
}
return null
}
child.textRange.contains(fenceRange.startOffset) -> return null
else -> child = child.treeNext
}
}
return null
}