# lute **Repository Path**: CPLiu/lute ## Basic Information - **Project Name**: lute - **Description**: 🎼 一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。A structured Markdown engine that supports Go and JavaScript. - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://ld246.com/tag/lute - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 18 - **Created**: 2024-01-01 - **Last Updated**: 2024-01-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
一款结构化的 Markdown 引擎,支持 Go 和 JavaScript
千呼万唤始出来 犹抱琵琶半遮面
转轴拨弦三两声 未成曲调先有情
` 标签 最后,我们试下对 GFM 的格式化支持: |col1|col2 | col3 | --- |---------------|-- col1 without left pipe | this is col2 | col3 without right pipe ||need align cell| **以上就是为什么我们需要Markdown Format,而且是带中西文自动空格的格式化。** ```````` 格式化后: ````````markdown # ATX 标题也有可能需要格式化的 一个简短的段落。 ## Setext 说实话我不喜欢 Setext 标题 0. 有序列表可以从 0 开始 1. 应该自增序号的 2. 对齐对齐对齐 我们再来看看另一个有序列表。 1. 没空行的情况下序号要从 1 开始才能打断段落开始一个新列表 2. 虽然乱序不影响渲染 3. 但是随意写序号容易引起误解 试下贴段代码: ```go package main import "fmt" func main() { fmt.Println("Hello, 世界") } ``` 对了,缩进代码块建议换成围栏代码块: ``` 缩进代码块太隐晦了 也没法指定编程语言,容易导致代码高亮失效 所以建议大家用 ``` 围栏代码块 ``` 试下围栏代码块匹配场景: ````markdown 围栏代码块只要开头的 ` 和结束的 ` 数量匹配即可,这样可以实现在围栏代码块中显示围栏代码块: ``` 这里只有 3 个 `,所以不会匹配markdown代码块结束 ``` 下面匹配到就真的结束了。 ```` 以上块级内容都挤在一坨了,插入合理的空行也很有必要。 但是过多的空行分段也不好啊,用来分段的话一个空行就够了。 接下来让我们试试稍微复杂点的场景,比如列表项包含多个段落的情况: 1. 列表项中的第一段 这里是第二个段落,贴段代码: ```markdown 要成为Markdown程序员并不容易,同理PPT架构师也是。 注意代码块中的中西文间并没有插入空格。 ``` 这里是最后一段了。 2. 整个有序列表是“松散”的:列表项内容要用 `
` 标签 最后,我们试下对 GFM 的格式化支持: | col1 | col2 | col3 | | ---------------------- | --------------- | ----------------------- | | col1 without left pipe | this is col2 | col3 without right pipe | | | need align cell | | **以上就是为什么我们需要 Markdown Format,而且是带中西文自动空格的格式化。** ````````
Lute - A structured Markdown engine.
} ``` 关于代码块语法高亮: * 默认使用外部样式表,主题为 github.css,可从 chroma-styles 目录下拷贝该样式文件到项目中引入 * 可通过 `lutenEngine.SetCodeSyntaxHighlightXXX()` 来指定高亮相关参数,比如是否启用内联样式、行号以及主题 ### JavaScript 简单示例可参考 JavaScript 目录下的 demo,结合前端编辑器的完整用法请参考 [Vditor 中的示例](https://github.com/Vanessa219/vditor/tree/master/demo)。  一些细节: 1. lute.js 没有内置语法高亮特性 2. lute.js 编译后大小为 ~3.5MB,GZip 压缩后大小 ~500KB ## 📜 文档 * [《提问的智慧》精读注解版](https://ld246.com/article/1536377163156) * [CommonMark 规范要点解读](https://ld246.com/article/1566893557720) * [Lute 实现后记](https://ld246.com/article/1567062979327) * [Markdown 解析原理详解和 Markdown AST 描述](https://ld246.com/article/1587637426085) ## 🏘️ 社区 * [讨论区](https://ld246.com/tag/lute) * [报告问题](https://github.com/88250/lute/issues/new/choose) ## 📄 授权 Lute 使用 [木兰宽松许可证, 第2版](http://license.coscl.org.cn/MulanPSL2) 开源协议。 ## 🙏 鸣谢 Lute 的诞生离不开以下开源项目,在此对这些项目的贡献者们致敬! * [commonmark.js](https://github.com/commonmark/commonmark.js):该项目是 CommonMark 官方参考实现的 JavaScript 版,Lute 参考了其解析器实现部分 * [goldmark](https://github.com/yuin/goldmark):另一款用 golang 写的 Markdown 引擎,Lute 参考了其树遍历实现部分 * [golang-commonmark](https://gitlab.com/golang-commonmark/markdown):另一款用 golang 写的 Markdown 引擎,Lute 参考了其 URL 编码以及 HTML 转义算法 * [Chroma](https://github.com/alecthomas/chroma):用 golang 写的语法高亮引擎 * [中文文案排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines):统一中文文案、排版的相关用法,降低团队成员之间的沟通成本,增强网站气质 * [GopherJS](https://github.com/gopherjs/gopherjs):将 Go 代码编译成 JavaScript 代码