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  
20  package org.apache.myfaces.tobago.renderkit.html;
21  
22  import java.util.Arrays;
23  import java.util.HashSet;
24  import java.util.Set;
25  
26  public enum HtmlElements {
27  
28    A("a", Qualifier.INLINE),
29    ABBR("abbr", Qualifier.INLINE),
30    ADDRESS("address"),
31    AREA("area", Qualifier.VOID),
32    ARTICLE("article"),
33    ASIDE("aside"),
34    AUDIO("audio"),
35    B("b", Qualifier.INLINE),
36    BASE("base", Qualifier.VOID),
37    BDI("bdi"),
38    BDO("bdo"),
39    BLOCKQUOTE("blockquote"),
40    BODY("body"),
41    BR("br", Qualifier.VOID),
42    BUTTON("button", Qualifier.INLINE),
43    CANVAS("canvas"),
44    CAPTION("caption"),
45    CITE("cite", Qualifier.INLINE),
46    CODE("code", Qualifier.INLINE),
47    COL("col", Qualifier.VOID),
48    COLGROUP("colgroup"),
49    /** @deprecated */
50    @Deprecated
51    COMMAND("command", Qualifier.VOID),
52    DATALIST("datalist"),
53    DD("dd"),
54    DEL("del"),
55    DETAILS("details"),
56    DFN("dfn"),
57    DIV("div"),
58    DL("dl"),
59    DT("dt"),
60    EM("em", Qualifier.INLINE),
61    EMBED("embed", Qualifier.VOID),
62    FIELDSET("fieldset"),
63    FIGCAPTION("figcaption"),
64    FIGURE("figure"),
65    FOOTER("footer"),
66    FORM("form"),
67    H1("h1"),
68    H2("h2"),
69    H3("h3"),
70    H4("h4"),
71    H5("h5"),
72    H6("h6"),
73    HEAD("head"),
74    HEADER("header"),
75    HGROUP("hgroup"),
76    HR("hr", Qualifier.VOID),
77    HTML("html"),
78    I("i", Qualifier.INLINE),
79    IFRAME("iframe"),
80    IMG("img", Qualifier.VOID, Qualifier.INLINE),
81    INPUT("input", Qualifier.VOID, Qualifier.INLINE),
82    INS("ins"),
83    KBD("kbd"),
84    KEYGEN("keygen", Qualifier.VOID),
85    LABEL("label", Qualifier.INLINE),
86    LEGEND("legend"),
87    LI("li"),
88    LINK("link", Qualifier.VOID),
89    MAP("map"),
90    MARK("mark"),
91    MENU("menu"),
92    META("meta", Qualifier.VOID),
93    METER("meter"),
94    NAV("nav"),
95    NOSCRIPT("noscript"),
96    OBJECT("object"),
97    OL("ol"),
98    OPTGROUP("optgroup"),
99    OPTION("option"),
100   P("p"),
101   PARAM("param", Qualifier.VOID),
102   PRE("pre", Qualifier.INLINE),
103   PROGRESS("progress"),
104   Q("q"),
105   RP("rp"),
106   RT("rt"),
107   RUBY("ruby"),
108   S("s"),
109   SAMP("samp"),
110   SCRIPT("script", Qualifier.INLINE),
111   SECTION("section"),
112   SELECT("select", Qualifier.INLINE),
113   SMALL("small"),
114   SOURCE("source", Qualifier.VOID),
115   SPAN("span", Qualifier.INLINE),
116   STRONG("strong"),
117   STYLE("style"),
118   SUB("sub", Qualifier.INLINE),
119   SUMMARY("summary"),
120   SUP("sup", Qualifier.INLINE),
121   TABLE("table"),
122   TBODY("tbody"),
123   TD("td"),
124   TEXTAREA("textarea", Qualifier.INLINE),
125   TFOOT("tfoot"),
126   TH("th"),
127   THEAD("thead"),
128   TIME("time"),
129   TITLE("title"),
130   TR("tr"),
131   TRACK("track", Qualifier.VOID),
132   U("u", Qualifier.INLINE),
133   UL("ul"),
134   VAR("var"),
135   VIDEO("video"),
136   WBR("wbr", Qualifier.VOID),
137 
138   TOBAGO_BADGE("tobago-badge"),
139   TOBAGO_BAR("tobago-bar"),
140   TOBAGO_BEHAVIOR("tobago-behavior"),
141   TOBAGO_BUTTONS("tobago-buttons"),
142   TOBAGO_BOX("tobago-box"),
143   TOBAGO_DATE("tobago-date"),
144   TOBAGO_DROPDOWN("tobago-dropdown"),
145   TOBAGO_FILE("tobago-file"),
146   TOBAGO_FOCUS("tobago-focus"),
147   TOBAGO_FOOTER("tobago-footer"),
148   TOBAGO_LABEL("tobago-label"),
149   TOBAGO_HEADER("tobago-header"),
150   TOBAGO_IN("tobago-in"),
151   TOBAGO_LINKS("tobago-links"),
152   TOBAGO_MESSAGES("tobago-messages"),
153   TOBAGO_PAGE("tobago-page"),
154   TOBAGO_PANEL("tobago-panel"),
155   TOBAGO_POPOVER("tobago-popover"),
156   TOBAGO_POPUP("tobago-popup"),
157   TOBAGO_RANGE("tobago-range"),
158   TOBAGO_SECTION("tobago-section"),
159   TOBAGO_SELECT_BOOLEAN_CHECKBOX("tobago-select-boolean-checkbox"),
160   TOBAGO_SELECT_BOOLEAN_TOGGLE("tobago-select-boolean-toggle"),
161   TOBAGO_SELECT_MANY_CHECKBOX("tobago-select-many-checkbox"),
162   TOBAGO_SELECT_MANY_LISTBOX("tobago-select-many-listbox"),
163   TOBAGO_SELECT_MANY_SHUTTLE("tobago-select-many-shuttle"),
164   TOBAGO_SELECT_ONE_CHOICE("tobago-select-one-choice"),
165   TOBAGO_SELECT_ONE_LISTBOX("tobago-select-one-listbox"),
166   TOBAGO_SELECT_ONE_RADIO("tobago-select-one-radio"),
167   TOBAGO_SEPARATOR("tobago-separator"),
168   TOBAGO_SHEET("tobago-sheet"),
169   TOBAGO_SPLIT_LAYOUT("tobago-split-layout"),
170   TOBAGO_STARS("tobago-stars"),
171   TOBAGO_SUGGEST("tobago-suggest"),
172   TOBAGO_TAB("tobago-tab"),
173   TOBAGO_TAB_CONTENT("tobago-tab-content"),
174   TOBAGO_TAB_GROUP("tobago-tab-group"),
175   TOBAGO_TEXTAREA("tobago-textarea"),
176   TOBAGO_TREE("tobago-tree"),
177   TOBAGO_TREE_LISTBOX("tobago-tree-listbox"),
178   TOBAGO_TREE_NODE("tobago-tree-node"),
179   TOBAGO_TREE_SELECT("tobago-tree-select");
180 
181   private final String value;
182   private final boolean voidElement;
183   private final boolean inlineElement;
184 
185   private static final Set<String> VOIDS = new HashSet<>();
186   private static final Set<String> INLINES = new HashSet<>();
187 
188   HtmlElements(final String value, final Qualifier... qualifiers) {
189     this.value = value;
190     this.voidElement = Arrays.asList(qualifiers).contains(Qualifier.VOID);
191     this.inlineElement = Arrays.asList(qualifiers).contains(Qualifier.INLINE);
192   }
193 
194   static {
195     for (final HtmlElements htmlElement : values()) {
196       if (htmlElement.isVoid()) {
197         VOIDS.add(htmlElement.getValue());
198       }
199       if (htmlElement.isInline()) {
200         INLINES.add(htmlElement.getValue());
201       }
202     }
203   }
204 
205   public String getValue() {
206     return value;
207   }
208 
209   /**
210    * A void HTML elements is an element whose content model never allows it to have contents under any circumstances.
211    * See <a href="http://www.w3.org/TR/html-markup/syntax.html#void-element">
212    * http://www.w3.org/TR/html-markup/syntax.html#void-element</a>
213    */
214   public boolean isVoid() {
215     return voidElement;
216   }
217 
218   public boolean isInline() {
219     return inlineElement;
220   }
221 
222   public static boolean isVoid(final String name) {
223     return VOIDS.contains(name);
224   }
225 
226   public static boolean isInline(final String name) {
227     return INLINES.contains(name);
228   }
229 
230   private enum Qualifier {VOID, INLINE}
231 }