在 Kotlin 中使用 Markdown:库与工具概述
Markdown 是一种流行的标记语言,用于在文档、博客、聊天和教育平台中格式化文本。在 Kotlin 生态系统中,有多个强大的库可用于解析、生成和转换 Markdown。在本文中,我们将介绍主要工具、它们的功能,并提供实用的代码示例。
为什么需要在 Kotlin 中解析 Markdown?
在开发教育网站、代码编辑器、内容管理系统或笔记应用时,通常需要:
- 将 Markdown 文本转换为 HTML 以在网页上显示
- 创建支持 Markdown 的所见即所得编辑器
- 分析文档结构(标题、列表、链接)
- 以编程方式生成 Markdown 标记
在 Kotlin 中使用 Markdown 的主要库
1. Flexmark(推荐)
Flexmark 是一个高性能的 Markdown 解析库,用 Java 编写,与 Kotlin 完全兼容。它支持 CommonMark、GFM(GitHub 风格的 Markdown)以及众多扩展(表格、脚注、表情符号、数学公式)。
通过 Gradle 引入:
implementation("com.vladsch.flexmark:flexmark:0.64.8")implementation("com.vladsch.flexmark:flexmark-html2md-converter:0.64.8")Markdown 转 HTML 示例:
import com.vladsch.flexmark.html.HtmlRendererimport com.vladsch.flexmark.parser.Parserimport com.vladsch.flexmark.util.data.MutableDataSet
fun main() { val options = MutableDataSet() val parser = Parser.builder(options).build() val renderer = HtmlRenderer.builder(options).build()
val markdown = """ # 你好,Kotlin! 这是一个 **示例** 使用 *Markdown*。 - 项目 1 - 项目 2 """.trimIndent()
val document = parser.parse(markdown) val html = renderer.render(document) println(html) // 输出:<h1>你好,Kotlin!</h1> // <p>这是一个 <strong>示例</strong> 使用 <em>Markdown</em>。</p> // <ul><li>项目 1</li><li>项目 2</li></ul>}2. CommonMark-Java
CommonMark-Java 是 CommonMark 规范的参考实现。轻量、快速、简洁。如果您不需要 GFM 扩展,它非常合适。
implementation("org.commonmark:commonmark:0.21.0")import org.commonmark.parser.Parserimport org.commonmark.renderer.html.HtmlRenderer
fun main() { val parser = Parser.builder().build() val renderer = HtmlRenderer.builder().build()
val markdown = "**粗体文本** 和 *斜体*" val document = parser.parse(markdown) val html = renderer.render(document) println(html) // <p><strong>粗体文本</strong> 和 <em>斜体</em></p>}3. KMarkdown(适用于 Kotlin Multiplatform)
KMarkdown 是一个原生 Kotlin 库,支持 Kotlin Multiplatform(JVM、JS、Native)。非常适合跨平台项目。
// build.gradle.ktsimplementation("com.github.cretz.kmarkdown:kmarkdown:0.2.0")import com.cretz.kmarkdown.KMarkdown
fun main() { val md = KMarkdown() val html = md.toHtml("# 标题包含 `代码` 的普通文本") println(html) // <h1>标题</h1><p>包含 <code>代码</code> 的普通文本</p>}Flexmark 的高级功能
Flexmark 允许精细调整解析和渲染。让我们看几个有用的场景。
添加扩展(表格、删除线)
imp