1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.metaschema.core.datatype.markup.flexmark;
28
29 import com.vladsch.flexmark.ast.AutoLink;
30 import com.vladsch.flexmark.ast.BlockQuote;
31 import com.vladsch.flexmark.ast.Code;
32 import com.vladsch.flexmark.ast.CodeBlock;
33 import com.vladsch.flexmark.ast.FencedCodeBlock;
34 import com.vladsch.flexmark.ast.HardLineBreak;
35 import com.vladsch.flexmark.ast.Heading;
36 import com.vladsch.flexmark.ast.HtmlBlock;
37 import com.vladsch.flexmark.ast.HtmlCommentBlock;
38 import com.vladsch.flexmark.ast.HtmlEntity;
39 import com.vladsch.flexmark.ast.HtmlInline;
40 import com.vladsch.flexmark.ast.Image;
41 import com.vladsch.flexmark.ast.IndentedCodeBlock;
42 import com.vladsch.flexmark.ast.Link;
43 import com.vladsch.flexmark.ast.ListBlock;
44 import com.vladsch.flexmark.ast.ListItem;
45 import com.vladsch.flexmark.ast.MailLink;
46 import com.vladsch.flexmark.ast.Paragraph;
47 import com.vladsch.flexmark.ast.Text;
48 import com.vladsch.flexmark.ast.TextBase;
49 import com.vladsch.flexmark.ast.ThematicBreak;
50 import com.vladsch.flexmark.ext.escaped.character.EscapedCharacter;
51 import com.vladsch.flexmark.ext.tables.TableBlock;
52 import com.vladsch.flexmark.ext.typographic.TypographicQuotes;
53 import com.vladsch.flexmark.ext.typographic.TypographicSmarts;
54 import com.vladsch.flexmark.util.ast.Node;
55
56 import gov.nist.secauto.metaschema.core.datatype.markup.flexmark.InsertAnchorExtension.InsertAnchorNode;
57 import gov.nist.secauto.metaschema.core.util.CollectionUtil;
58
59 import java.util.Map;
60
61 import javax.xml.namespace.QName;
62
63 import edu.umd.cs.findbugs.annotations.NonNull;
64 import edu.umd.cs.findbugs.annotations.Nullable;
65 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
66
67 @SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_THROWABLE",
68 justification = "There is a need to support varying exceptions from multiple stream writers")
69 public interface IMarkupWriter<T, E extends Throwable> {
70 @NonNull
71 QName asQName(@NonNull String localName);
72
73 default void writeElement(
74 @NonNull String localName,
75 @NonNull Node node,
76 @Nullable ChildHandler<T, E> childHandler) throws E {
77 writeElement(localName, node, CollectionUtil.emptyMap(), childHandler);
78 }
79
80 default void writeElement(
81 @NonNull String localName,
82 @NonNull Node node,
83 @NonNull Map<String, String> attributes,
84 @Nullable ChildHandler<T, E> childHandler) throws E {
85 QName qname = asQName(localName);
86 writeElement(qname, node, attributes, childHandler);
87 }
88
89 void writeElement(
90 @NonNull QName qname,
91 @NonNull Node node,
92 @NonNull Map<String, String> attributes,
93 @Nullable ChildHandler<T, E> childHandler) throws E;
94
95 default void writeEmptyElement(
96 @NonNull String localName,
97 @NonNull Map<String, String> attributes) throws E {
98 QName qname = asQName(localName);
99 writeEmptyElement(qname, attributes);
100 }
101
102 void writeEmptyElement(
103 @NonNull QName qname,
104 @NonNull Map<String, String> attributes) throws E;
105
106 default void writeElementStart(
107 @NonNull QName qname) throws E {
108 writeElementStart(qname, CollectionUtil.emptyMap());
109 }
110
111 void writeElementStart(
112 @NonNull QName qname,
113 @NonNull Map<String, String> attributes) throws E;
114
115 void writeElementEnd(@NonNull QName qname) throws E;
116
117 void writeText(@NonNull Text node) throws E;
118
119
120
121
122
123
124
125
126
127
128 void writeText(@NonNull TextBase node) throws E;
129
130 void writeText(@NonNull CharSequence text) throws E;
131
132 void writeHtmlEntity(@NonNull HtmlEntity node) throws E;
133
134 void writeHtmlEntity(@NonNull TypographicSmarts node) throws E;
135
136 void writeParagraph(
137 @NonNull Paragraph node,
138 @NonNull ChildHandler<T, E> childHandler) throws E;
139
140 void writeLink(
141 @NonNull Link node,
142 @NonNull ChildHandler<T, E> childHandler) throws E;
143
144 void writeLink(@NonNull MailLink node) throws E;
145
146 void writeLink(@NonNull AutoLink node) throws E;
147
148 void writeTypographicQuotes(
149 @NonNull TypographicQuotes node,
150 @NonNull ChildHandler<T, E> childHandler) throws E;
151
152 void writeInlineHtml(@NonNull HtmlInline node) throws E;
153
154 void writeBlockHtml(@NonNull HtmlBlock node) throws E;
155
156 void writeTable(
157 @NonNull TableBlock node,
158 @NonNull ChildHandler<T, E> cellChilddHandler) throws E;
159
160 void writeImage(@NonNull Image node) throws E;
161
162 void writeInsertAnchor(@NonNull InsertAnchorNode node) throws E;
163
164 void writeHeading(
165 @NonNull Heading node,
166 @NonNull ChildHandler<T, E> childHandler) throws E;
167
168 void writeCode(
169 @NonNull Code node,
170 @NonNull ChildHandler<T, E> childHandler) throws E;
171
172 void writeCodeBlock(
173 @NonNull IndentedCodeBlock node,
174 @NonNull ChildHandler<T, E> childHandler) throws E;
175
176 void writeCodeBlock(
177 @NonNull FencedCodeBlock node,
178 @NonNull ChildHandler<T, E> childHandler) throws E;
179
180 void writeCodeBlock(
181 @NonNull CodeBlock node,
182 @NonNull ChildHandler<T, E> childHandler) throws E;
183
184 void writeBlockQuote(
185 @NonNull BlockQuote node,
186 @NonNull ChildHandler<T, E> childHandler) throws E;
187
188 default void writeList(
189 @NonNull String localName,
190 @NonNull ListBlock node,
191 @NonNull ChildHandler<T, E> listItemHandler) throws E {
192 QName qname = asQName(localName);
193 writeList(qname, node, listItemHandler);
194 }
195
196 void writeList(
197 @NonNull QName qname,
198 @NonNull ListBlock node,
199 @NonNull ChildHandler<T, E> listItemHandler) throws E;
200
201 void writeListItem(
202 @NonNull ListItem node,
203 @NonNull ChildHandler<T, E> listItemHandler) throws E;
204
205 void writeBreak(@NonNull HardLineBreak node) throws E;
206
207 void writeBreak(@NonNull ThematicBreak node) throws E;
208
209 void writeComment(@NonNull HtmlCommentBlock node) throws E;
210
211
212
213
214
215
216
217
218
219 @FunctionalInterface
220 interface ChildHandler<T, E extends Throwable> {
221 void accept(@NonNull Node node, @NonNull IMarkupWriter<T, E> writer) throws E;
222 }
223
224 }