1:- module(lsp_html_markdown, [ html_markdown/1 ]).
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)
LSP HTML->Markdown parser
Module to convert HTML into Markdown (by doing some transformations & passing it on to lynx/html_text).