#parser #markup #markdown #hyperlink #restructuredtext

app atext2html

A Nom parser library for hyperlinks with markup

5 releases

0.20.0 Apr 7, 2021
0.19.6 Feb 16, 2021
0.19.5 Jan 2, 2021
0.19.4 Dec 29, 2020
0.19.3 Dec 28, 2020

#142 in Parser implementations

27 downloads per month

MIT/Apache

225KB
4K SLoC

Atext2html

Atext2html is a command line utility written with Nom to recognize hyperlinks and link reference definitions in Markdown, reStructuredText, Asciidoc 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 underlaying library Parse-hyperlinks. The API of Parse-hyperlinks provides insights about the operating principle of this utility.

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
    

HTML

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

    $ ./atext2html -o output.html input.txt
    
  2. Run atext2html:

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

~4MB
~75K SLoC