23 个版本 (8 个重大更改)

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.19.4 2020年12月29日

#1433解析实现

MIT/Apache

260KB
4.5K SLoC

Atext2html

Atext2html 是一个用 Nom 编写的命令行工具,用于识别 Markdown、reStructuredText、Asciidoc、Wikitext 和 HTML 格式文本输入中的超链接和链接引用定义。 Atext2html 将源文本原样渲染为 HTML,同时使超链接可点击。默认情况下,超链接的文本与源文本中的文本相同。当提供 --render-links 标志时,超链接仅以链接文本表示,这使得内联链接更容易阅读。

Cargo Documentation License

Atext2html 说明了底层库 Parse-hyperlinks 的使用。 Parse-hyperlinks 的 API 提供了关于此实用程序操作原理的见解。

除此之外,Parse-hyperlinks-extras 定义了一些 Tp-Note 应用程序需要的额外解析器。

安装

cargo install atext2html

用法

Render source text with markup hyperlinks.

USAGE:
    atext2html [FLAGS] [OPTIONS] [FILE]...

FLAGS:
    -h, --help            Prints help information
    -l, --only-links      print only links (one per line)
    -r, --render-links    render hyperlinks
    -V, --version         print version and exit

OPTIONS:
    -o, --output <output>    print not to stdout but in file

ARGS:
    <FILE>...    paths to files to render (or `-` for stdin)

用法示例

Markdown

  1. 创建一个包含文本和超链接的文件 input.txt

    abc[text10](destination10 "title10")abc
    abc[text11][label11]abc
    abc[text12](destination2 "title12")
    [text13]: destination3 "title13"
    [label11]: destination1 "title11"
    abc[text13]abc
    
  2. 运行 atext2html

    $ ./atext2html -o output.html input.txt
    
  3. 检查 output.html

    <pre>abc<a href="destination10" title="title10">[text10](destination10 "title10")</a>abc
    abc<a href="destination1" title="title11">[text11][label11]</a>abc
    abc<a href="destination2" title="title12">[text12](destination2 "title12")</a>
    <a href="destination3" title="title13">[text13]: destination3 "title13"</a>
    <a href="destination1" title="title11">[label11]: destination1 "title11"</a>
    abc<a href="destination3" title="title13">[text13]</a>abc</pre>
    

    这是在网页浏览器中的样子

    $ firefox output.html
    
    abc[text10](destination10 "title10")abc
    abc[text11][label11]abc
    abc[text12](destination2 "title12")
    [text13]: destination3 "title13"
    [label11]: destination1 "title11"
    abc[text13]abc
    

reStructuredText

  1. 创建一个包含文本和超链接的文件 input.txt

    abc `text21 <label21_>`_abc
    abc text22_ abc
    abc text23__ abc
    abc text_label24_ abc
    abc text25__ abc
    .. _label21: destination21
    .. _text22: destination22
    .. __: destination23
    __ destination25
    
  2. 运行 atext2html

    $ ./atext2html -o output.html input.txt
    
  3. 检查 output.html

    <pre>abc <a href="destination21" title="">`text21 &lt;label21_&gt;`_</a>abc
    abc <a href="destination22" title="">text22_</a> abc
    abc <a href="destination23" title="">text23__</a> abc
    abc text_label24_ abc
    abc <a href="destination25" title="">text25__</a> abc
    <a href="destination21" title="">   .. _label21: destination21</a>
    <a href="destination22" title="">   .. _text22: destination22</a>
    <a href="destination23" title="">   .. __: destination23</a>
    <a href="destination25" title="">   __ destination25</a></pre>
    

    这是在网页浏览器中的样子

    $ firefox output.html
    
    abc `text21 <label21_>`_abc
    abc text22_ abc
    abc text23__ abc
    abc text_label24_ abc
    abc text25__ abc
       .. _label21: destination21
       .. _text22: destination22
       .. __: destination23
       __ destination25
    

Asciidoc

  1. 创建一个包含文本和超链接的文件 input.txt

    abc
    abc https://destination30[text30]abc
    abc link:https://destination31[text31]abc
    abc{label32}[text32]abc
    abc{label33}abc
    :label32: https://destination32
    :label33: https://destination33
    
  2. 运行 atext2html

    $ ./atext2html -o output.html input.txt
    
  3. 检查 output.html

    <pre>abc
    abc <a href="https://destination30" title="">https://destination30[text30]</a>abc
    abc <a href="https://destination31" title="">link:https://destination31[text31]</a>abc
    abc<a href="https://destination32" title="">{label32}[text32]</a>abc
    abc<a href="https://destination33" title="">{label33}</a>abc
    <a href="https://destination32" title="">:label32: https://destination32</a>
    <a href="https://destination33" title="">:label33: https://destination33</a></pre>
    

    这是在网页浏览器中的样子

    $ firefox output.html
    
    abc
    abc https://destination30[text30]abc
    abc link:https://destination31[text31]abc
    abc{label32}[text32]abc
    abc{label33}abc
    :label32: https://destination32
    :label33: https://destination33
    

Wikitext

  1. 创建一个包含文本和超链接的文件 input.txt

    abc
    abc[https://destination31 text31]abc
    
  2. 运行 atext2html

    $ ./atext2html -o output.html input.txt
    
  3. 检查 output.html

    <pre>abc
    abc<a href="https://destination31" title="">[https://destination31 text31]</a>abc
    

    这是在网页浏览器中的样子

    $ firefox output.html
    
    abc
    abc[https://destination31 text31]abc
    

HTML

  1. 创建一个包含文本和超链接的文件 input.txt

    abc<a href="dest1" title="title1">text1</a>abc
    abc<a href="dest2" title="title2">text2</a>abc
    
  2. 运行 atext2html

    $ ./atext2html -o output.html input.txt
    
  3. 检查 output.html

    <pre>abc<a href="dest1" title="title1">&lt;a href="dest1" title="title1"&gt;text1&lt;/a&gt;</a>abc
    abc<a href="dest2" title="title2">&lt;a href="dest2" title="title2"&gt;text2&lt;/a&gt;</a>abc</pre>
    

    这是在网页浏览器中的样子

    $ firefox output.html
    
    abc<a href="dest1" title="title1">text1</a>abc
    abc<a href="dest2" title="title2">text2</a>abc
    

依赖项

~2.6–3.5MB
~58K SLoC