23 releases (8 breaking)

0.27.2 Oct 19, 2023
0.26.4 Oct 16, 2023
0.23.4 Jul 30, 2022
0.23.3 Sep 26, 2021
0.19.4 Dec 29, 2020

#1701 in Parser implementations

MIT/Apache

260KB
4.5K SLoC

Atext2html

Atext2html is a command line utility written with Nom to recognize hyperlinks and link reference definitions in Markdown, reStructuredText, Asciidoc, Wikitext and HTML formatted text input. Atext2html renders the source text verbatim to HTML while making hyperlinks clickable. By default the hyperlink's text appears the same as in the source text. When the flag --render-links is given, hyperlinks are represented only by their link text, which makes inline links more readable.

Cargo Documentation License

Atext2html illustrates the usage of the underlying library Parse-hyperlinks. The API of Parse-hyperlinks provides insights about the operating principle of this utility.

In addition to the above, Parse-hyperlinks-extras defines some extra parsers needed by the Tp-Note application.

Installation:

cargo install atext2html

Usage

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)

Usage examples

Markdown

  1. Create a file input.txt with text and hyperlinks:

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

    $ ./atext2html -o output.html input.txt
    
  3. Inspect 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>
    

    This is how it looks like in the web browser:

    $ 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. Create a file input.txt with text and hyperlinks:

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

    $ ./atext2html -o output.html input.txt
    
  3. Inspect 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>
    

    This is how it looks like in the web browser:

    $ 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. Create a file input.txt with text and hyperlinks:

    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. Run atext2html:

    $ ./atext2html -o output.html input.txt
    
  3. Inspect 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>
    

    This is how it looks like in the web-browser:

    $ 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. Create a file input.txt with text and hyperlinks:

    abc
    abc[https://destination31 text31]abc
    
  2. Run atext2html:

    $ ./atext2html -o output.html input.txt
    
  3. Inspect output.html:

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

    This is how it looks like in the web-browser:

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

HTML

  1. Create a file input.txt with text and hyperlinks:

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

    $ ./atext2html -o output.html input.txt
    
  3. Inspect 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>
    

    This is how it looks like in the web-browser:

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

Dependencies

~5MB
~90K SLoC