View Javadoc
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       *   &lt;p style="color: red; margin-left: 20px"&gt;
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 }