1:- module(lsp_html_markdown, [ html_markdown/1 ]).

LSP HTML->Markdown parser

Module to convert HTML into Markdown (by doing some transformations & passing it on to lynx/html_text).

author
- James Cash */
   10:- use_module(library(lynx/html_text), [ html_text/1 ]).   11
   12:- include('_lsp_path_add.pl').   13
   14html_markdown(DOM0) :-
   15    phrase(html_markdownify(DOM1), DOM0),
   16    html_text(DOM1).
   17
   18html_markdownify([]) --> [].
   19html_markdownify([Elm1|Rest]) -->
   20    [ element(El, Attrs, Children) ], !,
   21    { markdownify_element(element(El, Attrs, Children), Elm1) },
   22    html_markdownify(Rest).
   23html_markdownify([Txt|Rest]) -->
   24    [Txt], { atom(Txt) }, !,
   25    html_markdownify(Rest).
   26
   27markdownify_element(element(strong, Attrs, Children), Element) =>
   28    phrase(html_markdownify(Children0), Children),
   29    append(['*'|Children0], ['*'], Children1),
   30    Element = element(span, Attrs, Children1).
   31markdownify_element(element(em, Attrs, Children), Element) =>
   32    phrase(html_markdownify(Children0), Children),
   33    append(['**'|Children0], ['**'], Children1),
   34    Element = element(span, Attrs, Children1).
   35markdownify_element(element(code, Attrs, Children), Element) =>
   36    phrase(html_markdownify(Children0), Children),
   37    append(['`'|Children0], ['`'], Children1),
   38    Element = element(span, Attrs, Children1).
   39markdownify_element(element(var, Attrs, Children), Element) =>
   40    phrase(html_markdownify(Children0), Children),
   41    append(['`'|Children0], ['`'], Children1),
   42    Element = element(span, Attrs, Children1).
   43markdownify_element(element(pre, Attrs, Children), Element) =>
   44    Element = element(div, [],
   45                      ['```prolog\n',
   46                       element(pre, Attrs, Children),
   47                       '\n```']).
   48markdownify_element(element(El, Attrs, Children), Element) =>
   49    phrase(html_markdownify(Children0), Children),
   50    Element = element(El, Attrs, Children0)