public fun build()

in prompt/prompt-structure/src/commonMain/kotlin/ai/koog/prompt/structure/markdown/MarkdownParser.kt [67:115]


    public fun build(): suspend (String) -> Unit {
        return { markdown ->
            // Split the markdown by lines
            val lines = markdown.split("\n")

            var inCodeBlock = false
            var codeBlockContent = StringBuilder()

            for (line in lines) {
                val trimmedLine = line.trim()

                // Process the line based on its type and current state
                when {
                    // Handle code block markers
                    isBeginningOfCodeBlock(trimmedLine) -> {
                        inCodeBlock = handleCodeBlockMarker(
                            inCodeBlock,
                            codeBlockContent
                        )
                    }

                    // Handle content inside code blocks
                    inCodeBlock -> {
                        codeBlockContent.append(line).append("\n")
                    }

                    // Handle headers
                    trimmedLine.startsWith("#") -> {
                        processHeader(trimmedLine)
                    }

                    // Handle bullet points
                    trimmedLine.startsWith("-") -> {
                        processBulletPoint(trimmedLine)
                    }
                }

                // Always process line matching for non-code-block lines
                if (!inCodeBlock && !isBeginningOfCodeBlock(trimmedLine) && trimmedLine.isNotEmpty()) {
                    processLineMatching(trimmedLine)
                }
            }

            // Handle unclosed code block at the end of the document
            if (inCodeBlock && codeBlockContent.isNotEmpty()) {
                codeBlockHandler?.invoke(codeBlockContent.toString())
            }
        }
    }