1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.doxia.sink;
20
21 import javax.swing.text.MutableAttributeSet;
22
23 import java.util.Map;
24 import java.util.Set;
25
26 /**
27 * A set of attributes for a sink event.
28 * <p>
29 * All sink methods that produce some presentation-level output should have at least
30 * one form that allows to pass in a Set of SinkEventAttributes. For instance in
31 * </p>
32 * <pre>void text(String text, SinkEventAttributes attributes);</pre>
33 * <p>
34 * the <code>attributes</code> parameter can be used to specify some text styling
35 * options, or other optional parameters.
36 * </p>
37 * <p>
38 * What kind of attributes are supported depends on the event and the sink
39 * implementation. The sink API just specifies a list of suggested attribute
40 * names, that sinks are expected to recognize, and parsers are expected to use
41 * preferably when emitting events.
42 * </p>
43 * <p>
44 * It is recommended that for simple attributes, both keys and values should be
45 * lower-case Strings, but this is not mandatory. One example of an exception is
46 * the {@link #STYLE} attribute, whose value may itself be an AttributeSet again.
47 * </p>
48 * <p>
49 * The <b>base attributes</b> that are supported by almost all events are
50 * {@link #CLASS}, {@link #ID}, {@link #LANG}, {@link #STYLE} and {@link #TITLE}.
51 * </p>
52 *
53 * @author ltheussl
54 * @since 1.1
55 */
56 @SuppressWarnings("checkstyle:interfaceistype")
57 public interface SinkEventAttributes extends MutableAttributeSet {
58 // base
59
60 /**
61 * The class of the event element.
62 */
63 String CLASS = "class";
64
65 /**
66 * A unique id for the event element.
67 */
68 String ID = "id";
69
70 /**
71 * The language code for the event element.
72 */
73 String LANG = "lang";
74
75 /**
76 * An inline style definition.
77 *
78 * <p>
79 * Generally supported values are "italic", "bold", "monospaced" and AttributeSets.
80 * </p>
81 * <p>
82 * If the value of this Attribute is itself an AttributeSet, it is interpreted as a
83 * sequence of CSS properties. For instance, the HTML paragraph opening
84 * </p>
85 * <pre>
86 * <p style="color: red; margin-left: 20px">
87 * </pre>
88 * <p>
89 * can be produced by an HTML Sink via the event
90 * <code>{@link Sink#paragraph(SinkEventAttributes)}</code>, where the value of the
91 * SinkEventAttribute is an AttributeSet with two Attributes ("<code>color</code>" and
92 * "<code>margin-left</code>" with values "<code>red</code>" and "<code>20px</code>",
93 * respectively).
94 * </p>
95 */
96 String STYLE = "style";
97
98 /**
99 * A text to display in a tool tip.
100 */
101 String TITLE = "title";
102
103 // head
104
105 /**
106 * A space separated list of URL's that contains meta data information about the document.
107 */
108 String PROFILE = "profile";
109
110 /**
111 * An electronic mail address.
112 */
113 String EMAIL = "email";
114
115 // img
116
117 /**
118 * Specifies the alignment of the event element within its parent element.
119 *
120 * <p>
121 * Generally supported values are "left", "right", "center", "justify".
122 * </p>
123 */
124 String ALIGN = "align";
125
126 /**
127 * Defines a short description of the event element.
128 */
129 String ALT = "alt";
130
131 /**
132 * Defines a border around an event element.
133 */
134 String BORDER = "border";
135
136 /**
137 * Defines the height of an event element.
138 */
139 String HEIGHT = "height";
140
141 /**
142 * Defines white space on the left and right side of an event element.
143 */
144 String HSPACE = "hspace";
145
146 /**
147 * Defines an image as a server-side image map. Only used by the figureGraphics Sink event.
148 */
149 String ISMAP = "ismap";
150
151 /**
152 * The URL of an external resource, eg an image.
153 */
154 String SRC = "src";
155
156 /**
157 * Defines an image as a client-side image map.
158 */
159 String USEMAP = "usemap";
160
161 /**
162 * Defines white space on the top and bottom of the event element.
163 */
164 String VSPACE = "vspace";
165
166 /**
167 * Sets the width of an event element.
168 */
169 String WIDTH = "width";
170
171 // hr
172
173 /**
174 * Used to indicate that an element comes with a shadow.
175 */
176 String NOSHADE = "noshade";
177
178 /**
179 * Specifies the size, or thickness, or height of an event element.
180 */
181 String SIZE = "size";
182
183 // anchor
184
185 /**
186 * Specifies the name of an anchor.
187 */
188 String NAME = "name";
189
190 // link
191
192 /**
193 * Specifies the character encoding of text associated with an event element.
194 */
195 String CHARSET = "charset";
196
197 /**
198 * May be used in conjunction with {@link #SHAPE}.
199 *
200 * <p>
201 * Valid values are the same as for the corresponding HTML attributes.
202 * </p>
203 */
204 String COORDS = "coords";
205
206 /**
207 * The target URL of an event element, eg a link.
208 */
209 String HREF = "href";
210
211 /**
212 * Specifies the base language of the target URL.
213 *
214 * <p>
215 * Used in conjunction with {@link #HREF}.
216 * </p>
217 */
218 String HREFLANG = "hreflang";
219
220 /**
221 * For references to external resourcs, specifies the relationship between
222 * the current document and the target URL.
223 *
224 * <p>
225 * Valid values are the same as for the corresponding HTML attribute.
226 * </p>
227 */
228 String REL = "rel";
229
230 /**
231 * For references to external resourcs, specifies the relationship between
232 * the target URL and the current document.
233 *
234 * <p>
235 * Valid values are the same as for the corresponding HTML attribute.
236 * </p>
237 */
238 String REV = "rev";
239
240 /**
241 * Defines the type of region to be defined for a mapping.
242 *
243 * <p>
244 * Used with the {@link #COORDS} attribute.
245 * </p>
246 */
247 String SHAPE = "shape";
248
249 /**
250 * Where to open the target URL.
251 *
252 * <p>
253 * Valid values are the same as for the corresponding HTML attribute.
254 * </p>
255 */
256 String TARGET = "target";
257
258 /**
259 * Specifies the MIME (Multipurpose Internet Mail Extensions) type of an
260 * external resource URL, eg a link.
261 */
262 String TYPE = "type";
263
264 // table
265
266 /**
267 * Specifies the background color of an event element.
268 */
269 String BGCOLOR = "bgcolor";
270
271 /**
272 * Specifies the space between cell walls and contents.
273 */
274 String CELLPADDING = "cellpadding";
275
276 /**
277 * Specifies the space between cells.
278 */
279 String CELLSPACING = "cellspacing";
280
281 /**
282 * Specifies which sides of a border surrounding an element should be visible.
283 *
284 * <p>
285 * Valid values are the same as for the corresponding HTML attribute.
286 * </p>
287 */
288 String FRAME = "frame";
289
290 /**
291 * Specifies horizontal/vertical divider lines between certain elements, eg table cells.
292 */
293 String RULES = "rules";
294
295 /**
296 * Specifies a summary of an event attribute for speech-synthesizing/non-visual target output.
297 */
298 String SUMMARY = "summary";
299
300 // table cell
301
302 /**
303 * Specifies an abbreviated version of the content in an element.
304 */
305 String ABBRV = "abbrv";
306
307 /**
308 * Defines a name for a cell.
309 */
310 String AXIS = "axis";
311
312 /**
313 * Indicates the number of columns a cell should span. Used in tables.
314 */
315 String COLSPAN = "colspan";
316
317 /**
318 * A space-separated list of cell IDs that supply header information for the cell.
319 */
320 String HEADERS = "headers";
321
322 /**
323 * Whether to disable or enable automatic text wrapping for an element.
324 */
325 String NOWRAP = "nowrap";
326
327 /**
328 * Indicates the number of rows a cell should span. Used in tables.
329 */
330 String ROWSPAN = "rowspan";
331
332 /**
333 * A general scope parameter. In Particular, for table cells this
334 * specifies if the cell provides header information for the rest of the
335 * row that contains it ("row"), or for the rest of the column ("col"),
336 * or for the rest of the row group that contains it ("rowgroup"),
337 * or for the rest of the column group that contains it ("colgroup").
338 */
339 String SCOPE = "scope";
340
341 /**
342 * Specifies the vertical alignment of an element.
343 *
344 * <p>
345 * Generally accepted values are "top", "baseline", "middle", "bottom", "sup", "sub".
346 * </p>
347 */
348 String VALIGN = "valign";
349
350 // text
351
352 /**
353 * Specifies a decoration for an element.
354 *
355 * <p>
356 * Generally accepted values are "underline", "overline", "line-through", "source".
357 * </p>
358 */
359 String DECORATION = "decoration";
360
361 /**
362 * Specifies the semantics of an element.
363 *
364 * <p>
365 * Generally accepted values are "emphasis", "strong",
366 * "small", "line-through", "citation", "quote", "definition", "abbreviation",
367 * "italic", "bold", "monospaced", "code, "variable", "sample", "keyboard",
368 * "superscript", "subscript", "annotation", "highlight", "ruby", "rubyBase",
369 * "rubyText", "rubyTextContainer", "rubyParentheses", "bidirectionalIsolation",
370 * "bidirectionalOverride", "phrase", "insert", "delete".
371 * </p>
372 */
373 String SEMANTICS = "semantics";
374
375 /**
376 * Specifies the semantics of an element.
377 *
378 * <p>
379 * Generally accepted values are "article", "section",
380 * "navigation", "sidebar".
381 * </p>
382 */
383 String SECTIONS = "sections";
384
385 /**
386 * Specifies a value for the data element.
387 */
388 String VALUE = "value";
389
390 /**
391 * Specifies a machine readable date/time for the time element.
392 */
393 String DATETIME = "datetime";
394
395 /**
396 * Returns a {@link Set} view of the attributes in form of {@link Map.Entry} items.
397 * The set is backed by the underlying map, so changes to the map are
398 * reflected in the set, and vice-versa. If the map is modified
399 * while an iteration over the set is in progress (except through
400 * the iterator's own {@code remove} operation, or through the
401 * {@code setValue} operation on a map entry returned by the
402 * iterator) the results of the iteration are undefined. The set
403 * supports element removal, which removes the corresponding
404 * mapping from the map, via the {@code Iterator.remove},
405 * {@code Set.remove}, {@code removeAll}, {@code retainAll} and
406 * {@code clear} operations. It does not support the
407 * {@code add} or {@code addAll} operations.
408 *
409 * @return a set view of the attributes
410 * @since 2.1.0
411 */
412 Set<Map.Entry<String, Object>> entrySet();
413 }