mmarkdown/mmark
GitHub: mmarkdown/mmark
Mmark 是一个用 Go 编写的 Markdown 处理器,专为生成 IETF 标准文档(RFC 7991 XML、HTML5)而设计,也适用于编写书籍和技术文档。
Stars: 513 | Forks: 48
## title: "关于"
date: 2018-07-22T14:05:51+01:00
aliases: [/about/]
Mmark 是一个用 Go 编写的强大的 Markdown 处理器,专为编写 IETF 文档而设计。然而,它
*也* 适合编写完整的书籍和其他技术文档,例如
[Learning Go 一书](https://miek.nl/go)([mmark 源码](https://github.com/miekg/learninggo),以及
[I-D 文本输出](https://miek.nl/go/learninggo-2.txt))。
另请参阅[此仓库](https://github.com/danyork/writing-internet-drafts-in-markdown),了解如何
使用 Markdown 编写 RFC。
它提供了一种高级的 Markdown 方言,可处理文件以生成 XML
[RFC 7991](https://tools.ietf.org/html/rfc7991) 格式的 internet-draft。Mmark 可以生成 xml2rfc(前述
RFC 7991)、HTML5 输出和 manual pages。
Mmark 格式的 RFC 示例可以[在 Github
仓库中找到](https://github.com/mmarkdown/mmark/tree/master/rfc)。
Mmark 使用了 [gomarkdown](https://github.com/gomarkdown/markdown),它是
[blackfriday](https://github.com/russross/blackfriday/) 的一个分支。有关更多文档,请参阅其
[README.md](https://github.com/gomarkdown/markdown/blob/master/README.md)。
## 语法
Mmark 的语法以及相较于纯 Markdown 的新增功能在
[syntax.md](https://mmark.miek.nl/syntax) 中有详细说明。
Mmark 向
[gomarkdown/markdown](https://github.com/gomarkdown/markdown/blob/master/README.md) 添加了以下语法元素:
* (扩展的)[标题块](https://mmark.miek.nl/post/syntax/#title-block)。
* [特殊章节](https://mmark.miek.nl/post/syntax/#special-sections)。
* [包含其他文件](https://mmark.miek.nl/post/syntax/#including-files),可以选择指定行范围、正则
表达式和/或为每行添加字符串前缀。默认情况下,只允许包含同一级别或
更低级别的文件(参见 `-unsafe` 标志)。
* [文档分区](https://mmark.miek.nl/post/syntax/#document-divisions)。
* 代码、表格和引语的[标题](https://mmark.miek.nl/post/syntax/#captions)
* [旁注](https://mmark.miek.nl/post/syntax/#asides)。
* [图形与子图形](https://mmark.miek.nl/post/syntax/#figures-and-subfigures) - 将(子)图形打包
成更大的图形。
* [块级属性](https://mmark.miek.nl/post/syntax/#block-level-attributes),允许为元素指定属性、类和
ID。
* [索引](https://mmark.miek.nl/post/syntax/#indices),用于标记要在文档索引中引用的项目(和/或子项目)。
* [引文](https://mmark.miek.nl/post/syntax/#citations)以及添加 [XML References](https://mmark.miek.nl/post/syntax/#xml-references)
* [文档内交叉引用](https://mmark.miek.nl/post/syntax/#cross-references),引用文档中章节的
简写形式。
* [上标和下标](https://mmark.miek.nl/post/syntax/#super-and-subscript)。
* 代码和文本中的[标注](https://mmark.miek.nl/post/syntax/#callouts)。
* [BCP14](https://mmark.miek.nl/post/syntax/#bcp14) (RFC 2119) 关键字检测。
## 用法
您可以[下载二进制文件](https://github.com/mmarkdown/mmark/releases),或者选择自行
构建 mmark。您需要一个可用的 [Go 环境](https://golang.org),然后检出代码并执行:
```
% go get && go build
% ./mmark -version
2.0.0
```
要输出 XML2RFC v3 xml,只需提供一个 Markdown 文件并执行:
```
% ./mmark rfc/3514.md
```
以文本形式生成草稿(v3 输出)
```
% ./mmark rfc/3514.md > x.xml
% xml2rfc --v3 --text x.xml
```
输出 HTML5 是通过 `-html` 开关完成的。
在 Windows/Mac 下编辑并使用 Windows 样式的文件,在解析前将被转换为 Unix 样式的换行符。
来自 `mmark` 的任何输出都将使用 Unix 换行符。
请注意,没有*错误*的 Markdown 文档,因此 `mmark` 只会对不
正确的内容发出警告。这可能会导致生成的 XML 无效。来自 `mmark` 的任何警告都会发送到标准错误流,要查看
并检查这些警告,您可以丢弃标准输出,只留下标准错误:`./mmark
rfc/3515.md > /dev/null`。
### Docker
每次发布时都会自动构建一个容器镜像,并可在 GitHub Container Registry 中获取。
该镜像的使用方式如下例所示:
```
docker run --rm `# automatically remove container upon termination` \
-v "$(pwd):/data" `# bind current working directory to /data` \
ghcr.io/mmarkdown/mmark:latest `# container name` \
example.md > example.xml # example.md input filename, pipe output to example.xml
# 单行
docker run --rm -v $(pwd):/data ghcr.io/mmarkdown/mmark:latest example.md > example.xml
```
## RFC 示例
rfc/ 目录包含几个可以通过 v3 工具链构建的 RFC 示例。
要构建文本文件,只需运行:
```
cd rfc
make txt
```
官方 RFC 位于 rfc/orig 中(这样您就可以将 mmark 的文本输出与之进行比较)。
## 另请参阅
[Kramdown-rfc2629](https://github.com/cabo/kramdown-rfc2629) 是另一个用于处理 Markdown 并
输出 XML2RFC XML 的工具。
请参阅 Syntax.md,了解有关如何使用 Markdown 语法创建 IETF 文档的入门指南。
标签:EVTX分析, 日志审计, 请求拦截