cmark 0.24.1

cmark 0.24.1

测试已测试
语种语言 CC
许可 NOASSERTION
发布上次发布2019 年 6 月

Chris Eidhof 维护。



cmark 0.24.1

  • John MacFarlane

cmark

Build Status Windows Build Status

cmarkCommonMark 的 C 语言参考实现,是 Markdown 语法的理性化版本,具有 规范。(有关 JavaScript 参考实现,请参阅 commonmark.js。)

它提供了一个共享库(libcmark)和用于解析 CommonMark 文档到抽象语法树(AST)、操作 AST 以及将文档渲染为 HTML、groff 格式 man、LaTeX、CommonMark 或 AST 的 XML 表示的函数。它还提供了一个命令行程序(cmark)用于解析和渲染 CommonMark 文档。

此库的优点:

  • 可移植。 库和程序是用标准 C99 编写的,没有外部依赖。它们已经在 MSVC、gcc、tcc 和 clang 上进行了测试。

  • 快速。 cmark 可以在眨眼间渲染《战争与和平》的 Markdown 版本(在十年前的笔记本电脑上为 127 毫秒,而眨眼为 100-400 毫秒)。在我们的 基准测试 中,cmark 比原始的 Markdown.pl 快 10,000 倍,并且与最快的 Markdown 处理器相当。

  • 准确。 库通过了所有 CommonMark 一致性测试。

  • 标准化。 您可以期望该库与任何其他符合标准的解析器一样解析 CommonMark。因此,例如,您可以在客户端使用 commonmark.js 预览将在服务器上使用 cmark 渲染的内容。

  • 健壮。 该库已用 american fuzzy lop 进行了广泛的模糊测试。测试用例包括许多其他 Markdown 解析器会导致崩溃的情况(例如,数十个嵌套的方括号文本或块引用)。

  • 灵活。 CommonMark 输入会解析为一个 AST,该 AST 在渲染之前可以程序化地操作。

  • 多种渲染器。 支持输出 HTML、groff 格式 man、LaTeX、CommonMark 和自定义 XML 格式。并且很容易编写新渲染器以支持其他格式。

  • 免费。 基于 BSD2 许可。

在Python、Lua、Ruby以及其他动态语言中使用libcmark非常简单:请查看wrappers/子目录中的一些简单示例。

此外,还有库为goHaskellrubyluaPerlR封装了libcmark

安装

构建C程序(cmark)和共享库(libcmark)需要cmake。如果修改scanners.re,那么您还需要re2c,它用于从scanners.re生成scanners.c。我们已经将预生成的scanners.c包含在存储库中,以减少构建依赖性。

如果您有GNU make,可以简单地运行makemake testmake install。这将在build目录中调用cmake以创建Makefile,然后使用该Makefile创建可执行文件和库。二进制文件可以在build/src中找到。默认安装前缀是/usr/local。要更改安装前缀,在首次运行make时传递INSTALL_PREFIX变量:make INSTALL_PREFIX=path

为了更便携的方法,您可以使用cmake手动。该cmake知道如何为许多构建系统创建构建环境。例如,在FreeBSD上:

mkdir build
cd build
cmake ..  # optionally: -DCMAKE_INSTALL_PREFIX=path
make      # executable will be created as build/src/cmark
make test
make install

或者,在OSX上创建Xcode项目文件:

mkdir build
cd build
cmake -G Xcode ..
open cmark.xcodeproj

GNU Makefile还为开发者提供了一些其他目标。

make bench

要运行基准测试:

make leakcheck

要使用valgrind测试内存泄漏:

make astyle

要使用astyle重新格式化源代码:

make fuzztest

要运行针对十个随机生成的长输入的“fuzz测试”:

AFL_PATH=/path/to/afl_directory make afl

要使用american fuzzy lop进行更系统的“fuzz测试”:

make archive

要创建发布tar包和zip存档:

安装(Windows)

nmake

如果您有mingw32编译器,可以跨编译Linux上的Windows二进制文件和dll:

make mingw

二进制文件将在build-mingw/windows/bin中。

使用

关于命令行程序和库的用法说明可以在man子目录下的手册页中找到。

安全

默认情况下,该库将传递原始HTML和潜在的危险链接(如 javascript:vbscript:data:file:)。

建议用户要么通过使用选项 CMARK_OPT_SAFE(或者在命令行程序中使用--safe)来禁用此潜在的不安全功能,要么将输出通过HTML净化器来保护免受跨站脚本攻击

贡献

有一个论坛用于讨论CommonMark,您应该用它来代替GitHub问题进行问题和建议性的讨论。仅使用GitHub问题跟踪器来解决简单、明确、可操作的 问题。

作者

John MacFarlane 编写了原始库和程序。与David Greenspan共同确定了块解析算法。Vicent Marti 对性能进行了优化,将C实现的速度提高了十倍。Kārlis Gaņģis 帮助改进了链接和强调的解析算法,消除了几个最差性能问题。Nick Wellnhofer 贡献了许多改进,包括C库的大部分API及其测试框架。