1:- module(md_parse, [
    2    md_parse_codes/2,  % +Codes, -Blocks
    3    md_parse_stream/2, % +Stream, -Blocks
    4    md_parse_file/2,   % +File, -Blocks
    5    md_parse_string/2, % +String, -Blocks
    6    md_html_codes/2,   % +Codes, -HtmlString
    7    md_html_stream/2,  % +Stream, -HtmlString
    8    md_html_file/2,    % +File, -HtmlString
    9    md_html_string/2   % +String, -HtmlString
   10]).

Prolog Markdown parser

Top-level module for parsing Markdown. Contains some convenience predicated. */

   18:- use_module(library(http/html_write)).   19:- use_module(library(readutil)).   20
   21:- use_module(md_links).   22:- use_module(md_blocks).
 md_parse_string(+String, -Blocks) is det
Same as md_parse_codes/2 but takes a string instead.
   29md_parse_string(String, Blocks):-
   30    string_codes(String, Codes),
   31    md_parse_codes(Codes, Blocks).
 md_parse_codes(+Codes, -Blocks) is det
Parses Markdown into a structure suitable in use with html//1.
   38md_parse_codes(Codes, Blocks):-
   39    md_links(Codes, Tmp),
   40    phrase(md_blocks(Out), Tmp), !,
   41    Blocks = Out.
 md_parse_stream(+Stream, -Blocks) is det
Same as md_parse_codes/2 but reads input from stream.
   47md_parse_stream(Stream, Blocks):-
   48    read_stream_to_codes(Stream, Codes),
   49    md_parse_codes(Codes, Blocks).
 md_parse_file(+Name, -Blocks) is det
Same as md_parse_codes/2 but reads input from file.
   55md_parse_file(File, Blocks):-
   56    read_file_to_codes(File, Codes, []),
   57    md_parse_codes(Codes, Blocks).
 md_html_codes(+Codes, -Html) is det
Converts Markdown into HTML string.
   63md_html_codes(Codes, Html):-
   64    md_parse_codes(Codes, Blocks),
   65    phrase(html(Blocks), Tokens),
   66    with_output_to(string(Html), print_html(Tokens)).
 md_html_string(+String, -Html) is det
Same as md_html_codes/2 but takes input as string.
   73md_html_string(String, Html):-
   74    string_codes(String, Codes),
   75    md_html_codes(Codes, Html).
 md_html_stream(+Stream, -Html) is det
Same as md_html_codes/2 but reads input from stream.
   81md_html_stream(Stream, Html):-
   82    read_stream_to_codes(Stream, Codes),
   83    md_html_codes(Codes, Html).
 md_html_file(+Name, -Html) is det
Same as md_html_codes/2 but reads input from file.
   89md_html_file(File, Html):-
   90    read_file_to_codes(File, Codes, []),
   91    md_html_codes(Codes, Html)