override fun createASTNodeOnClosingEvent()

in src/commonMain/kotlin/org/intellij/markdown/parser/TopLevelBuilder.kt [13:48]


    override fun createASTNodeOnClosingEvent(event: TreeBuilder.MyEvent, currentNodeChildren: List<TreeBuilder.MyASTNodeWrapper>, isTopmostNode: Boolean): TreeBuilder.MyASTNodeWrapper {
        val newNode: ASTNode

        val type = event.info.`type`
        val startOffset = event.info.range.first
        val endOffset = event.info.range.last

        if (type is MarkdownElementType && type.isToken) {
            val nodes = nodeBuilder.createLeafNodes(type, startOffset, endOffset)
            return TreeBuilder.MyASTNodeWrapper(nodes.first(), startOffset, endOffset)
        }

        val childrenWithWhitespaces = ArrayList<ASTNode>(currentNodeChildren.size)

//        if (currentNodeChildren.isNotEmpty()) {
            addRawTokens(childrenWithWhitespaces,
                    startOffset,
                    currentNodeChildren.firstOrNull()?.startTokenIndex ?: endOffset)

            for (i in 1..currentNodeChildren.size - 1) {
                val prev = currentNodeChildren.get(i - 1)
                val next = currentNodeChildren.get(i)

                childrenWithWhitespaces.add(prev.astNode)

                addRawTokens(childrenWithWhitespaces, prev.endTokenIndex, next.startTokenIndex)
            }
            if (!currentNodeChildren.isEmpty()) {
                childrenWithWhitespaces.add(currentNodeChildren.last().astNode)
                addRawTokens(childrenWithWhitespaces, currentNodeChildren.last().endTokenIndex, endOffset)
            }
//        }

        newNode = nodeBuilder.createCompositeNode(type, childrenWithWhitespaces)
        return TreeBuilder.MyASTNodeWrapper(newNode, startOffset, endOffset)
    }