{"repo":"88250/lute","free":true,"listed":false,"github":"https://github.com/88250/lute","clone":"git clone https://github.com/88250/lute.git","description":"🎼 一款结构化的 Markdown 引擎，支持 Go 和 JavaScript。A structured Markdown engine that supports Go and JavaScript.","language":"Go","stars":1667,"topics":["markdown","vditor","gopherjs","protyle","siyuan"],"license":null,"category":"productivity","readme_excerpt":"一款结构化的 Markdown 引擎，支持 Go 和 JavaScript 千呼万唤始出来 犹抱琵琶半遮面 转轴拨弦三两声 未成曲调先有情 English 💡 简介 Lute 是一款结构化的 Markdown 引擎，完整实现了最新的 GFM/CommonMark 规范，对中文语境支持更好。 欢迎到 Lute 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源 ： 📽️ 背景 之前我一直在使用其他 Markdown 引擎，它们或多或少都有些“瑕疵”： 对标准规范的支持不一致 对“怪异”文本处理非常耗时，甚至挂死 对中文支持不够好 Lute 的目标是构建一个结构化的 Markdown 引擎，实现 GFM/CM 规范并对中文提供更好的支持。所谓的“结构化”指的是从输入的 MD 文本构建抽象语法树，通过操作树来进行 HTML 输出、原文格式化等。 实现规范是为了保证 Markdown 渲染不存在二义性，让同一份 Markdown 文本可以在实现规范的 Markdown 引擎处理后得到一样的结果，这一点非常重要。 实现规范的引擎并不多，我想试试看自己能不能写上一个，这也是 Lute 的动机之一。关于如何实现一个 Markdown 引擎，网上众说纷纭： 有的人说 Markdown 适合用正则解析，因为文法规则太简单 也有的人说 Markdown 可以用编译原理来处理，正则太难维护 我赞同后者，因为正则确实太难维护而且运行效率较低。最重要的原因是符合 GFM/CM 规范的 Markdown 引擎的核心解析算法不可能用正则写出来，因为规范定义的规则实在是太复杂了。 最后，还有一个很重要的动机就是 B3log 开源社区需要一款自己的 Markdown 引擎： Solo、Pipe、Sym 需要效果统一的 Markdown 渲染，并且性能非常重要 Vditor 需要一款结构化的引擎作为支撑以实现下一代的 Markdown 编辑器 ✨ 特性 实现最新版 GFM/CM 规范 零正则，非常快 内置代码块语法高亮 对中文语境支持更好 术语拼写修正 Markdown 格式化 Emoji 解析 HTML 转换 Markdown 自定义渲染函数 支持 JavaScript 端使用 🗃 案例 链滴 思源笔记 Vditor 编辑器 Sym 社区系统 Solo 博客系统 Pipe 博客系统 🇨🇳 中文语境优化 自动链接识别加强 在中西文间自动插入空格 ♍ 格式化 格式化功能可将“不整洁”的 Markdown 文本格式化为统一风格，在需要公共编辑的场景下，统一的排版风格能让大家更容易协作。 点此展开格式化示例。 Markdown 原文： markdown ATX 标题也有可能需要格式化的 ## 一个简短的段落。 Setext 说实话我不喜欢 Setext 标题 ---- 0. 有序列表可以从 0 开始 0. 应该自增序号的 1. 对齐对齐对齐 我们再来看看另一个有序列表。 1. 没空行的情况下序号要从 1 开始才能打断段落开始一个新列表 3. 虽然乱序不影响渲染 2. 但是随意写序号容易引起误解 试下贴段代码： 对了，缩进代码块建议换成围栏代码块： 缩进代码块太隐晦了 也没法指定编程语言，容易导致代码高亮失效 所以建议大家用 markdown 围栏代码块只要开头的 和结束的 数量匹配即可，这样可以实现在围栏代码块中显示围栏代码块： 下面匹配到就真的结束了。 markdown 要成为Markdown程序员并不容易，同理PPT架构师也是。 注意代码块中","default_branch":null,"files":null,"tree":[],"storefront":"/r/88250","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/88250/lute/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}