cmark-gfm

cmark-gfm 是 C 参考实现的扩展版本,该实现基于 CommonMark,一种具有规范的 Markdown 语法的合理化版本。此存储库将 GitHub Flavored Markdown 扩展添加到 上游实现,如 规范 中所定义。

cmark 中的上游更改将会被拉取到此 cmark-gfm 项目存储库中,随着上游项目的演变而更新。 原始 cmark 存储库可以在这里找到:https://github.com/commonmark/cmark

README 的其余部分从上游来源按原样保留。请注意,此分支产生的库和二进制文件都带有 -gfm 后缀,以便将它们与上游区分开来。

许可证

原始 cmark 代码是在 BSD2 许可证下发布的。此相同的许可证适用于此 cmark-gfm 存储库中包含的 Swift 代码。


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

此库的优点

在 python、lua、ruby 和其他动态语言中使用 libcmark 非常容易:有关一些简单的示例,请参见 wrappers/ 子目录。

还有一些库为 GoHaskellRubyLuaPerlPythonRTclScalaNode.js 封装了 libcmark

安装

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

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

对于更便携的方法,您可以手动使用 cmakecmake 知道如何为许多构建系统创建构建环境。 例如,在 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 newbench

要使用 valgrind 运行内存泄漏测试

make leakcheck

要使用 clang-format 重新格式化源代码

make format

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

make fuzztest

要使用 american fuzzy lop 进行更系统的模糊测试

AFL_PATH=/path/to/afl_directory make afl

还支持使用 libFuzzer 进行模糊测试,但是由于 libFuzzer 仍在积极开发中,因此可能无法与您系统安装的 clang 版本一起使用。 假设 LLVM 已在 $HOME/src/llvm/build 中构建,则可以使用以下命令运行 fuzzer

CC="$HOME/src/llvm/build/bin/clang" LIB_FUZZER_PATH="$HOME/src/llvm/lib/Fuzzer/libFuzzer.a" make libFuzzer

要生成发布 tarball 和 zip 存档

make archive

安装(Windows)

要使用 MSVC 和 NMAKE 进行编译

nmake

如果您有 mingw32 编译器,则可以在 linux 上交叉编译 Windows 二进制文件和 dll

make mingw

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

用法

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

安全性

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

要允许这些链接,请使用命令行程序中的选项 CMARK_OPT_UNSAFE(或 --unsafe)。 如果这样做,我们建议您使用专门针对您需求的 HTML 清理器来防止 XSS 攻击

贡献

有一个 论坛用于讨论 CommonMark;对于问题和可能开放式的讨论,您应该使用它而不是 github issues。 仅将 github issue tracker 用于简单、清晰、可操作的问题。

作者

John MacFarlane 编写了原始库和程序。 块解析算法是与 David Greenspan 共同完成的。 Vicent Marti 优化了 C 实现以提高性能,使其速度提高了十倍。 Kārlis Gaņģis 帮助设计了一种更好的链接和强调解析算法,消除了几个最坏情况下的性能问题。 Nick Wellnhofer 贡献了许多改进,包括 C 库的大部分 API 及其测试工具。