38 个版本

0.27.2 2023年10月19日
0.26.4 2023年10月16日
0.23.4 2022年7月30日
0.23.3 2021年9月26日
0.11.0 2020年11月30日

解析器实现 中排名 #134

Download history 12876/week @ 2024-04-08 1269/week @ 2024-04-15 13437/week @ 2024-04-22 9944/week @ 2024-04-29 7116/week @ 2024-05-06 2952/week @ 2024-05-13 2542/week @ 2024-05-20 3971/week @ 2024-05-27 2132/week @ 2024-06-03 2410/week @ 2024-06-10 3662/week @ 2024-06-17 2406/week @ 2024-06-24 3441/week @ 2024-07-01 4560/week @ 2024-07-08 3971/week @ 2024-07-15 3071/week @ 2024-07-22

每月下载量 15,064
14 仓库中(直接使用 11 个)

MIT/Apache 许可

250KB
4.5K SLoC

解析超链接

Parse-hyperlinks,一个使用 Nom 编写的解析库,用于识别 Markdown、reStructuredText、Asciidoc 和 HTML 格式文本输入中的超链接和链接引用定义。

Cargo Documentation License

该库实现了 CommonMark 规范 0.30reStructuredText 标记规范(修订 8571,日期 2020-10-28)、Asciidoctor 用户手册,第 26 章(日期 2020-12-03)和 HTML 5.2:第 4.5 节 的规范。

为了说明库的使用和 APIParse-hyperlinks 附带了一个简单的命令行应用程序:Atext2html

  1. 所有输入均为 UTF-8 编码。

  2. 输入文本格式符合上述标记语言规范之一。由于 Parse-Hyperlinks 忽略了大部分标记,它完全依赖于各自标记语言的超链接规范。

通用 HTML 要求

  1. HTML 文档中绝对 URL 的字符 &<>" 必须进行 HTML 转义编码:这些字符被替换为其实体名称,例如 &amp;&lt;&gt;&quote

  2. UTF-8 编码的 HTML 文档中的相对 URL(本地链接)不需要进行 HTML 转义编码。建议不要这样做。

  3. 相对 URL(本地链接)不得以方案开头,例如 html:

  4. 除了HTML转义编码外,URL还可以进行百分编码,例如%20%26。当这两种编码在HTML文档中同时出现时,首先应用HTML转义解码,然后是百分编码。例如,编码后的字符串Ü ber%26amp;Über &amp被解码为Ü ber&amp;Über &。通常情况下,UTF-8 HTML文档中的URL可以不进行百分编码,这是推荐的。

以下部分解释了Parse-Hyperlinks如何满足上述通用HTML要求。它引用了上述列表中的项目。

  1. 只有renderer模块中的函数,在HTML文档中对绝对URL进行HTML转义编码:字符&<>"被替换为它们的HTML转义实体名称,例如:&amp;&lt;&gt;&quote。所有其他解析器和迭代器不对绝对URL应用HTML转义编码。

  2. Parse-Hyperlinks中的任何函数、解析器或迭代器都不对相对URL应用转义编码。

  3. 此属性不由Parse-Hyperlinks强制执行。合规性取决于解析器的输入。

  4. Parse-Hyperlinks中的百分编码

    • 在Parse-Hyperlinks中不执行任何百分编码

    • 百分解码:在某些情况下,当标记语言规范要求输入URL进行百分编码时,相关的消耗解析器会自动解码百分编码。在消耗时隐式执行URL的百分解码。

      • 当通过md_text2dest()解析Markdown自动链接时,
      • 当通过adoc_label2dest()adoc_text2dest解析Asciidoc URL时,
      • 当通过wikitext_text2dest()解析WikiText URL时,
    • 渲染自动链接标记

      1. 相同的Markdown输入可能根据渲染器产生不同的HTML。例如:pulldown-cmark将Markdown自动链接<http://getreu.net/Ü%20&>渲染为<a href="http://getreu.net/%C3%9C%20&amp;">http://getreu.net/Ü%20&amp;</a>

        • 观察1:渲染包含百分和HTML转义代码。
        • 观察2:链接目标(http://getreu.net/%C3%9C%20&amp;)和链接文本(http://getreu.net/Ü%20&amp;)略有不同,这在基于HTML渲染检测自动链接时必须考虑。
      2. Parse-Hyperlinks Markdown渲染器对于相同的输入<http://getreu.net/Ü%20&>给出了略微不同的结果:<a href="http://getreu.net/Ü%20&amp;">http://getreu.net/Ü &amp;</a>。解释:首先解析器md_text2dest()(百分号)将URL解码为http://getreu.net/Ü &,模块中的渲染函数renderer(HTML转义)将结果编码为http://getreu.net/Ü%20&amp;

依赖项

~1.3–2MB
~41K SLoC