1:- module(md_span_decorate, [
2 md_span_decorate//2 3]).
12:- use_module(library(dcg/basics)). 13:- use_module(md_trim).
27md_span_decorate(Span, Allow) -->
28 { memberchk(strong, Allow) },
29 star_strong(Span), !.
30
31md_span_decorate(Span, Allow) -->
32 { memberchk(strong, Allow) },
33 underscore_strong(Span), !.
34
35md_span_decorate(Span, Allow) -->
36 { memberchk(em, Allow) },
37 star_emphasis(Span), !.
38
39md_span_decorate(Span, Allow) -->
40 { memberchk(em, Allow) },
41 underscore_emphasis(Span), !.
42
43md_span_decorate(Span, Allow) -->
44 { memberchk(code, Allow) },
45 code(Span).
46
47md_span_decorate(Span, Allow) -->
48 { memberchk(del, Allow) },
49 strikethrough(Span).
50
52
53strikethrough(del(Codes)) -->
54 "~~", string(Codes), "~~".
55
57
58star_strong(strong(Codes)) -->
59 "**", string(Codes), "**".
60
62
63underscore_strong(strong(Codes)) -->
64 "__", string(Codes), "__".
65
68
69star_emphasis(em([Code|Codes])) -->
70 "*", nonblank(Code), string(Codes), "*".
71
74
75underscore_emphasis(em([Code|Codes])) -->
76 "_", nonblank(Code), string(Codes), "_".
77
79
80code(code(Trimmed)) -->
81 "``", string(Raw), "``",
82 { trim(Raw, Trimmed) }.
83
85
86code(code(Trimmed)) -->
87 "`", string(Raw), "`",
88 { trim(Raw, Trimmed) }
Parser for span-level styles
Predicates for recognizing span-level style formatting like strong, emphasis and code. */