001    /*
002     * Copyright (c) 2008-2011 Mozilla Foundation
003     *
004     * Permission is hereby granted, free of charge, to any person obtaining a 
005     * copy of this software and associated documentation files (the "Software"), 
006     * to deal in the Software without restriction, including without limitation 
007     * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
008     * and/or sell copies of the Software, and to permit persons to whom the 
009     * Software is furnished to do so, subject to the following conditions:
010     *
011     * The above copyright notice and this permission notice shall be included in 
012     * all copies or substantial portions of the Software.
013     *
014     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
015     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
016     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
017     * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
018     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
019     * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
020     * DEALINGS IN THE SOFTWARE.
021     */
022    
023    package nu.validator.htmlparser.impl;
024    
025    import java.util.Arrays;
026    
027    import nu.validator.htmlparser.annotation.Inline;
028    import nu.validator.htmlparser.annotation.Local;
029    import nu.validator.htmlparser.annotation.NoLength;
030    import nu.validator.htmlparser.annotation.Virtual;
031    import nu.validator.htmlparser.common.Interner;
032    
033    public final class ElementName
034    // uncomment when regenerating self
035    //        implements Comparable<ElementName> 
036    {
037    
038        /**
039         * The mask for extracting the dispatch group.
040         */
041        public static final int GROUP_MASK = 127;
042    
043        /**
044         * Indicates that the element is not a pre-interned element. Forbidden 
045         * on preinterned elements.
046         */
047        public static final int CUSTOM = (1 << 30);
048    
049        /**
050         * Indicates that the element is in the "special" category. This bit
051         * should not be pre-set on MathML or SVG specials--only on HTML specials.
052         */
053        public static final int SPECIAL = (1 << 29);
054    
055        /**
056         * The element is foster-parenting. This bit should be pre-set on elements
057         * that are foster-parenting as HTML.
058         */
059        public static final int FOSTER_PARENTING = (1 << 28);
060    
061        /**
062         * The element is scoping. This bit should be pre-set on elements
063         * that are scoping as HTML.
064         */
065        public static final int SCOPING = (1 << 27);
066    
067        /**
068         * The element is scoping as SVG.
069         */
070        public static final int SCOPING_AS_SVG = (1 << 26);
071    
072        /**
073         * The element is scoping as MathML.
074         */
075        public static final int SCOPING_AS_MATHML = (1 << 25);
076    
077        /**
078         * The element is an HTML integration point.
079         */
080        public static final int HTML_INTEGRATION_POINT = (1 << 24);
081    
082        /**
083         * The element has an optional end tag.
084         */
085        public static final int OPTIONAL_END_TAG = (1 << 23);
086    
087        public static final ElementName NULL_ELEMENT_NAME = new ElementName(null);
088    
089        public final @Local String name;
090    
091        public final @Local String camelCaseName;
092    
093        /**
094         * The lowest 7 bits are the dispatch group. The high bits are flags.
095         */
096        public final int flags;
097    
098        @Inline public int getFlags() {
099            return flags;
100        }
101        
102        public int getGroup() {
103            return flags & GROUP_MASK;
104        }
105        
106        // [NOCPP[
107        
108        public boolean isCustom() {
109            return (flags & CUSTOM) != 0;
110        }
111        
112        // ]NOCPP]
113    
114        static ElementName elementNameByBuffer(@NoLength char[] buf, int offset, int length, Interner interner) {
115            int hash = ElementName.bufToHash(buf, length);
116            int index = Arrays.binarySearch(ElementName.ELEMENT_HASHES, hash);
117            if (index < 0) {
118                return new ElementName(Portability.newLocalNameFromBuffer(buf, offset, length, interner));
119            } else {
120                ElementName elementName = ElementName.ELEMENT_NAMES[index];
121                @Local String name = elementName.name;
122                if (!Portability.localEqualsBuffer(name, buf, offset, length)) {
123                    return new ElementName(Portability.newLocalNameFromBuffer(buf,
124                            offset, length, interner));
125                }
126                return elementName;
127            }
128        }
129    
130        /**
131         * This method has to return a unique integer for each well-known
132         * lower-cased element name.
133         * 
134         * @param buf
135         * @param len
136         * @return
137         */
138        private static int bufToHash(@NoLength char[] buf, int len) {
139            int hash = len;
140            hash <<= 5;
141            hash += buf[0] - 0x60;
142            int j = len;
143            for (int i = 0; i < 4 && j > 0; i++) {
144                j--;
145                hash <<= 5;
146                hash += buf[j] - 0x60;
147            }
148            return hash;
149        }
150    
151        private ElementName(@Local String name, @Local String camelCaseName,
152                int flags) {
153            this.name = name;
154            this.camelCaseName = camelCaseName;
155            this.flags = flags;
156        }
157    
158        protected ElementName(@Local String name) {
159            this.name = name;
160            this.camelCaseName = name;
161            this.flags = TreeBuilder.OTHER | CUSTOM;
162        }
163        
164        @Virtual void release() {
165            // No-op in Java. 
166            // Implement as delete this in subclass.
167            // Be sure to release the local name
168        }
169        
170        @SuppressWarnings("unused") private void destructor() {
171        }
172    
173        @Virtual public ElementName cloneElementName(Interner interner) {
174            return this;
175        }
176        
177        // START CODE ONLY USED FOR GENERATING CODE uncomment and run to regenerate
178    
179    //    /**
180    //     * @see java.lang.Object#toString()
181    //     */
182    //    @Override public String toString() {
183    //        return "(\"" + name + "\", \"" + camelCaseName + "\", " + decomposedFlags() + ")";
184    //    }
185    //
186    //    private String decomposedFlags() {
187    //        StringBuilder buf = new StringBuilder("TreeBuilder.");
188    //        buf.append(treeBuilderGroupToName());
189    //        if ((flags & SPECIAL) != 0) {
190    //            buf.append(" | SPECIAL");
191    //        }
192    //        if ((flags & FOSTER_PARENTING) != 0) {
193    //            buf.append(" | FOSTER_PARENTING");
194    //        }
195    //        if ((flags & SCOPING) != 0) {
196    //            buf.append(" | SCOPING");
197    //        }        
198    //        if ((flags & SCOPING_AS_MATHML) != 0) {
199    //            buf.append(" | SCOPING_AS_MATHML");
200    //        }
201    //        if ((flags & SCOPING_AS_SVG) != 0) {
202    //            buf.append(" | SCOPING_AS_SVG");
203    //        }
204    //        if ((flags & OPTIONAL_END_TAG) != 0) {
205    //            buf.append(" | OPTIONAL_END_TAG");
206    //        }
207    //        return buf.toString();
208    //    }
209    //    
210    //    private String constName() {
211    //        char[] buf = new char[name.length()];
212    //        for (int i = 0; i < name.length(); i++) {
213    //            char c = name.charAt(i);
214    //            if (c == '-') {
215    //                buf[i] = '_';
216    //            } else if (c >= '0' && c <= '9') {
217    //                buf[i] = c;
218    //            } else {
219    //                buf[i] = (char) (c - 0x20);
220    //            }
221    //        }
222    //        return new String(buf);
223    //    }
224    //
225    //    private int hash() {
226    //        return bufToHash(name.toCharArray(), name.length());
227    //    }
228    //
229    //    public int compareTo(ElementName other) {
230    //        int thisHash = this.hash();
231    //        int otherHash = other.hash();
232    //        if (thisHash < otherHash) {
233    //            return -1;
234    //        } else if (thisHash == otherHash) {
235    //            return 0;
236    //        } else {
237    //            return 1;
238    //        }
239    //    }
240    //
241    //    private String treeBuilderGroupToName() {
242    //        switch (getGroup()) {
243    //            case TreeBuilder.OTHER:
244    //                return "OTHER";
245    //            case TreeBuilder.A:
246    //                return "A";
247    //            case TreeBuilder.BASE:
248    //                return "BASE";
249    //            case TreeBuilder.BODY:
250    //                return "BODY";
251    //            case TreeBuilder.BR:
252    //                return "BR";
253    //            case TreeBuilder.BUTTON:
254    //                return "BUTTON";
255    //            case TreeBuilder.CAPTION:
256    //                return "CAPTION";
257    //            case TreeBuilder.COL:
258    //                return "COL";
259    //            case TreeBuilder.COLGROUP:
260    //                return "COLGROUP";
261    //            case TreeBuilder.FONT:
262    //                return "FONT";
263    //            case TreeBuilder.FORM:
264    //                return "FORM";
265    //            case TreeBuilder.FRAME:
266    //                return "FRAME";
267    //            case TreeBuilder.FRAMESET:
268    //                return "FRAMESET";
269    //            case TreeBuilder.IMAGE:
270    //                return "IMAGE";
271    //            case TreeBuilder.INPUT:
272    //                return "INPUT";
273    //            case TreeBuilder.ISINDEX:
274    //                return "ISINDEX";
275    //            case TreeBuilder.LI:
276    //                return "LI";
277    //            case TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND:
278    //                return "LINK_OR_BASEFONT_OR_BGSOUND";
279    //            case TreeBuilder.MATH:
280    //                return "MATH";
281    //            case TreeBuilder.META:
282    //                return "META";
283    //            case TreeBuilder.SVG:
284    //                return "SVG";
285    //            case TreeBuilder.HEAD:
286    //                return "HEAD";
287    //            case TreeBuilder.HR:
288    //                return "HR";
289    //            case TreeBuilder.HTML:
290    //                return "HTML";
291    //            case TreeBuilder.KEYGEN:
292    //                return "KEYGEN";
293    //            case TreeBuilder.NOBR:
294    //                return "NOBR";
295    //            case TreeBuilder.NOFRAMES:
296    //                return "NOFRAMES";
297    //            case TreeBuilder.NOSCRIPT:
298    //                return "NOSCRIPT";
299    //            case TreeBuilder.OPTGROUP:
300    //                return "OPTGROUP";
301    //            case TreeBuilder.OPTION:
302    //                return "OPTION";
303    //            case TreeBuilder.P:
304    //                return "P";
305    //            case TreeBuilder.PLAINTEXT:
306    //                return "PLAINTEXT";
307    //            case TreeBuilder.SCRIPT:
308    //                return "SCRIPT";
309    //            case TreeBuilder.SELECT:
310    //                return "SELECT";
311    //            case TreeBuilder.STYLE:
312    //                return "STYLE";
313    //            case TreeBuilder.TABLE:
314    //                return "TABLE";
315    //            case TreeBuilder.TEXTAREA:
316    //                return "TEXTAREA";
317    //            case TreeBuilder.TITLE:
318    //                return "TITLE";
319    //            case TreeBuilder.TR:
320    //                return "TR";
321    //            case TreeBuilder.XMP:
322    //                return "XMP";
323    //            case TreeBuilder.TBODY_OR_THEAD_OR_TFOOT:
324    //                return "TBODY_OR_THEAD_OR_TFOOT";
325    //            case TreeBuilder.TD_OR_TH:
326    //                return "TD_OR_TH";
327    //            case TreeBuilder.DD_OR_DT:
328    //                return "DD_OR_DT";
329    //            case TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6:
330    //                return "H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6";
331    //            case TreeBuilder.OBJECT:
332    //                return "OBJECT";
333    //            case TreeBuilder.OUTPUT_OR_LABEL:
334    //                return "OUTPUT_OR_LABEL";
335    //            case TreeBuilder.MARQUEE_OR_APPLET:
336    //                return "MARQUEE_OR_APPLET";
337    //            case TreeBuilder.PRE_OR_LISTING:
338    //                return "PRE_OR_LISTING";
339    //            case TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U:
340    //                return "B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U";
341    //            case TreeBuilder.UL_OR_OL_OR_DL:
342    //                return "UL_OR_OL_OR_DL";
343    //            case TreeBuilder.IFRAME:
344    //                return "IFRAME";
345    //            case TreeBuilder.NOEMBED:
346    //                return "NOEMBED";
347    //            case TreeBuilder.EMBED_OR_IMG:
348    //                return "EMBED_OR_IMG";
349    //            case TreeBuilder.AREA_OR_WBR:
350    //                return "AREA_OR_WBR";
351    //            case TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
352    //                return "DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU";
353    //            case TreeBuilder.FIELDSET:
354    //                return "FIELDSET";
355    //            case TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY:
356    //                return "ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY";
357    //            case TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR:
358    //                return "RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR";
359    //            case TreeBuilder.RT_OR_RP:
360    //                return "RT_OR_RP";
361    //            case TreeBuilder.COMMAND:
362    //                return "COMMAND";
363    //            case TreeBuilder.PARAM_OR_SOURCE_OR_TRACK:
364    //                return "PARAM_OR_SOURCE_OR_TRACK";
365    //            case TreeBuilder.MGLYPH_OR_MALIGNMARK:
366    //                return "MGLYPH_OR_MALIGNMARK";
367    //            case TreeBuilder.MI_MO_MN_MS_MTEXT:
368    //                return "MI_MO_MN_MS_MTEXT";
369    //            case TreeBuilder.ANNOTATION_XML:
370    //                return "ANNOTATION_XML";
371    //            case TreeBuilder.FOREIGNOBJECT_OR_DESC:
372    //                return "FOREIGNOBJECT_OR_DESC";
373    //        }
374    //        return null;
375    //    }
376    //
377    //    /**
378    //     * Regenerate self
379    //     * 
380    //     * @param args
381    //     */
382    //    public static void main(String[] args) {
383    //        Arrays.sort(ELEMENT_NAMES);
384    //        for (int i = 1; i < ELEMENT_NAMES.length; i++) {
385    //            if (ELEMENT_NAMES[i].hash() == ELEMENT_NAMES[i - 1].hash()) {
386    //                System.err.println("Hash collision: " + ELEMENT_NAMES[i].name
387    //                        + ", " + ELEMENT_NAMES[i - 1].name);
388    //                return;
389    //            }
390    //        }
391    //        for (int i = 0; i < ELEMENT_NAMES.length; i++) {
392    //            ElementName el = ELEMENT_NAMES[i];
393    //            System.out.println("public static final ElementName "
394    //                    + el.constName() + " = new ElementName" + el.toString()
395    //                    + ";");
396    //        }
397    //        System.out.println("private final static @NoLength ElementName[] ELEMENT_NAMES = {");
398    //        for (int i = 0; i < ELEMENT_NAMES.length; i++) {
399    //            ElementName el = ELEMENT_NAMES[i];
400    //            System.out.println(el.constName() + ",");
401    //        }
402    //        System.out.println("};");
403    //        System.out.println("private final static int[] ELEMENT_HASHES = {");
404    //        for (int i = 0; i < ELEMENT_NAMES.length; i++) {
405    //            ElementName el = ELEMENT_NAMES[i];
406    //            System.out.println(Integer.toString(el.hash()) + ",");
407    //        }
408    //        System.out.println("};");
409    //    }
410    
411        // START GENERATED CODE
412        public static final ElementName A = new ElementName("a", "a", TreeBuilder.A);
413        public static final ElementName B = new ElementName("b", "b", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
414        public static final ElementName G = new ElementName("g", "g", TreeBuilder.OTHER);
415        public static final ElementName I = new ElementName("i", "i", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
416        public static final ElementName P = new ElementName("p", "p", TreeBuilder.P | SPECIAL | OPTIONAL_END_TAG);
417        public static final ElementName Q = new ElementName("q", "q", TreeBuilder.OTHER);
418        public static final ElementName S = new ElementName("s", "s", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
419        public static final ElementName U = new ElementName("u", "u", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
420        public static final ElementName BR = new ElementName("br", "br", TreeBuilder.BR | SPECIAL);
421        public static final ElementName CI = new ElementName("ci", "ci", TreeBuilder.OTHER);
422        public static final ElementName CN = new ElementName("cn", "cn", TreeBuilder.OTHER);
423        public static final ElementName DD = new ElementName("dd", "dd", TreeBuilder.DD_OR_DT | SPECIAL | OPTIONAL_END_TAG);
424        public static final ElementName DL = new ElementName("dl", "dl", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
425        public static final ElementName DT = new ElementName("dt", "dt", TreeBuilder.DD_OR_DT | SPECIAL | OPTIONAL_END_TAG);
426        public static final ElementName EM = new ElementName("em", "em", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
427        public static final ElementName EQ = new ElementName("eq", "eq", TreeBuilder.OTHER);
428        public static final ElementName FN = new ElementName("fn", "fn", TreeBuilder.OTHER);
429        public static final ElementName H1 = new ElementName("h1", "h1", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
430        public static final ElementName H2 = new ElementName("h2", "h2", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
431        public static final ElementName H3 = new ElementName("h3", "h3", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
432        public static final ElementName H4 = new ElementName("h4", "h4", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
433        public static final ElementName H5 = new ElementName("h5", "h5", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
434        public static final ElementName H6 = new ElementName("h6", "h6", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
435        public static final ElementName GT = new ElementName("gt", "gt", TreeBuilder.OTHER);
436        public static final ElementName HR = new ElementName("hr", "hr", TreeBuilder.HR | SPECIAL);
437        public static final ElementName IN = new ElementName("in", "in", TreeBuilder.OTHER);
438        public static final ElementName LI = new ElementName("li", "li", TreeBuilder.LI | SPECIAL | OPTIONAL_END_TAG);
439        public static final ElementName LN = new ElementName("ln", "ln", TreeBuilder.OTHER);
440        public static final ElementName LT = new ElementName("lt", "lt", TreeBuilder.OTHER);
441        public static final ElementName MI = new ElementName("mi", "mi", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
442        public static final ElementName MN = new ElementName("mn", "mn", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
443        public static final ElementName MO = new ElementName("mo", "mo", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
444        public static final ElementName MS = new ElementName("ms", "ms", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
445        public static final ElementName OL = new ElementName("ol", "ol", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
446        public static final ElementName OR = new ElementName("or", "or", TreeBuilder.OTHER);
447        public static final ElementName PI = new ElementName("pi", "pi", TreeBuilder.OTHER);
448        public static final ElementName RP = new ElementName("rp", "rp", TreeBuilder.RT_OR_RP | OPTIONAL_END_TAG);
449        public static final ElementName RT = new ElementName("rt", "rt", TreeBuilder.RT_OR_RP | OPTIONAL_END_TAG);
450        public static final ElementName TD = new ElementName("td", "td", TreeBuilder.TD_OR_TH | SPECIAL | SCOPING | OPTIONAL_END_TAG);
451        public static final ElementName TH = new ElementName("th", "th", TreeBuilder.TD_OR_TH | SPECIAL | SCOPING | OPTIONAL_END_TAG);
452        public static final ElementName TR = new ElementName("tr", "tr", TreeBuilder.TR | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
453        public static final ElementName TT = new ElementName("tt", "tt", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
454        public static final ElementName UL = new ElementName("ul", "ul", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
455        public static final ElementName AND = new ElementName("and", "and", TreeBuilder.OTHER);
456        public static final ElementName ARG = new ElementName("arg", "arg", TreeBuilder.OTHER);
457        public static final ElementName ABS = new ElementName("abs", "abs", TreeBuilder.OTHER);
458        public static final ElementName BIG = new ElementName("big", "big", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
459        public static final ElementName BDO = new ElementName("bdo", "bdo", TreeBuilder.OTHER);
460        public static final ElementName CSC = new ElementName("csc", "csc", TreeBuilder.OTHER);
461        public static final ElementName COL = new ElementName("col", "col", TreeBuilder.COL | SPECIAL);
462        public static final ElementName COS = new ElementName("cos", "cos", TreeBuilder.OTHER);
463        public static final ElementName COT = new ElementName("cot", "cot", TreeBuilder.OTHER);
464        public static final ElementName DEL = new ElementName("del", "del", TreeBuilder.OTHER);
465        public static final ElementName DFN = new ElementName("dfn", "dfn", TreeBuilder.OTHER);
466        public static final ElementName DIR = new ElementName("dir", "dir", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
467        public static final ElementName DIV = new ElementName("div", "div", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
468        public static final ElementName EXP = new ElementName("exp", "exp", TreeBuilder.OTHER);
469        public static final ElementName GCD = new ElementName("gcd", "gcd", TreeBuilder.OTHER);
470        public static final ElementName GEQ = new ElementName("geq", "geq", TreeBuilder.OTHER);
471        public static final ElementName IMG = new ElementName("img", "img", TreeBuilder.EMBED_OR_IMG | SPECIAL);
472        public static final ElementName INS = new ElementName("ins", "ins", TreeBuilder.OTHER);
473        public static final ElementName INT = new ElementName("int", "int", TreeBuilder.OTHER);
474        public static final ElementName KBD = new ElementName("kbd", "kbd", TreeBuilder.OTHER);
475        public static final ElementName LOG = new ElementName("log", "log", TreeBuilder.OTHER);
476        public static final ElementName LCM = new ElementName("lcm", "lcm", TreeBuilder.OTHER);
477        public static final ElementName LEQ = new ElementName("leq", "leq", TreeBuilder.OTHER);
478        public static final ElementName MTD = new ElementName("mtd", "mtd", TreeBuilder.OTHER);
479        public static final ElementName MIN = new ElementName("min", "min", TreeBuilder.OTHER);
480        public static final ElementName MAP = new ElementName("map", "map", TreeBuilder.OTHER);
481        public static final ElementName MTR = new ElementName("mtr", "mtr", TreeBuilder.OTHER);
482        public static final ElementName MAX = new ElementName("max", "max", TreeBuilder.OTHER);
483        public static final ElementName NEQ = new ElementName("neq", "neq", TreeBuilder.OTHER);
484        public static final ElementName NOT = new ElementName("not", "not", TreeBuilder.OTHER);
485        public static final ElementName NAV = new ElementName("nav", "nav", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
486        public static final ElementName PRE = new ElementName("pre", "pre", TreeBuilder.PRE_OR_LISTING | SPECIAL);
487        public static final ElementName REM = new ElementName("rem", "rem", TreeBuilder.OTHER);
488        public static final ElementName SUB = new ElementName("sub", "sub", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
489        public static final ElementName SEC = new ElementName("sec", "sec", TreeBuilder.OTHER);
490        public static final ElementName SVG = new ElementName("svg", "svg", TreeBuilder.SVG);
491        public static final ElementName SUM = new ElementName("sum", "sum", TreeBuilder.OTHER);
492        public static final ElementName SIN = new ElementName("sin", "sin", TreeBuilder.OTHER);
493        public static final ElementName SEP = new ElementName("sep", "sep", TreeBuilder.OTHER);
494        public static final ElementName SUP = new ElementName("sup", "sup", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
495        public static final ElementName SET = new ElementName("set", "set", TreeBuilder.OTHER);
496        public static final ElementName TAN = new ElementName("tan", "tan", TreeBuilder.OTHER);
497        public static final ElementName USE = new ElementName("use", "use", TreeBuilder.OTHER);
498        public static final ElementName VAR = new ElementName("var", "var", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
499        public static final ElementName WBR = new ElementName("wbr", "wbr", TreeBuilder.AREA_OR_WBR | SPECIAL);
500        public static final ElementName XMP = new ElementName("xmp", "xmp", TreeBuilder.XMP);
501        public static final ElementName XOR = new ElementName("xor", "xor", TreeBuilder.OTHER);
502        public static final ElementName AREA = new ElementName("area", "area", TreeBuilder.AREA_OR_WBR | SPECIAL);
503        public static final ElementName ABBR = new ElementName("abbr", "abbr", TreeBuilder.OTHER);
504        public static final ElementName BASE = new ElementName("base", "base", TreeBuilder.BASE | SPECIAL);
505        public static final ElementName BVAR = new ElementName("bvar", "bvar", TreeBuilder.OTHER);
506        public static final ElementName BODY = new ElementName("body", "body", TreeBuilder.BODY | SPECIAL | OPTIONAL_END_TAG);
507        public static final ElementName CARD = new ElementName("card", "card", TreeBuilder.OTHER);
508        public static final ElementName CODE = new ElementName("code", "code", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
509        public static final ElementName CITE = new ElementName("cite", "cite", TreeBuilder.OTHER);
510        public static final ElementName CSCH = new ElementName("csch", "csch", TreeBuilder.OTHER);
511        public static final ElementName COSH = new ElementName("cosh", "cosh", TreeBuilder.OTHER);
512        public static final ElementName COTH = new ElementName("coth", "coth", TreeBuilder.OTHER);
513        public static final ElementName CURL = new ElementName("curl", "curl", TreeBuilder.OTHER);
514        public static final ElementName DESC = new ElementName("desc", "desc", TreeBuilder.FOREIGNOBJECT_OR_DESC | SCOPING_AS_SVG);
515        public static final ElementName DIFF = new ElementName("diff", "diff", TreeBuilder.OTHER);
516        public static final ElementName DEFS = new ElementName("defs", "defs", TreeBuilder.OTHER);
517        public static final ElementName FORM = new ElementName("form", "form", TreeBuilder.FORM | SPECIAL);
518        public static final ElementName FONT = new ElementName("font", "font", TreeBuilder.FONT);
519        public static final ElementName GRAD = new ElementName("grad", "grad", TreeBuilder.OTHER);
520        public static final ElementName HEAD = new ElementName("head", "head", TreeBuilder.HEAD | SPECIAL | OPTIONAL_END_TAG);
521        public static final ElementName HTML = new ElementName("html", "html", TreeBuilder.HTML | SPECIAL | SCOPING | OPTIONAL_END_TAG);
522        public static final ElementName LINE = new ElementName("line", "line", TreeBuilder.OTHER);
523        public static final ElementName LINK = new ElementName("link", "link", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
524        public static final ElementName LIST = new ElementName("list", "list", TreeBuilder.OTHER);
525        public static final ElementName META = new ElementName("meta", "meta", TreeBuilder.META | SPECIAL);
526        public static final ElementName MSUB = new ElementName("msub", "msub", TreeBuilder.OTHER);
527        public static final ElementName MODE = new ElementName("mode", "mode", TreeBuilder.OTHER);
528        public static final ElementName MATH = new ElementName("math", "math", TreeBuilder.MATH);
529        public static final ElementName MARK = new ElementName("mark", "mark", TreeBuilder.OTHER);
530        public static final ElementName MASK = new ElementName("mask", "mask", TreeBuilder.OTHER);
531        public static final ElementName MEAN = new ElementName("mean", "mean", TreeBuilder.OTHER);
532        public static final ElementName MSUP = new ElementName("msup", "msup", TreeBuilder.OTHER);
533        public static final ElementName MENU = new ElementName("menu", "menu", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
534        public static final ElementName MROW = new ElementName("mrow", "mrow", TreeBuilder.OTHER);
535        public static final ElementName NONE = new ElementName("none", "none", TreeBuilder.OTHER);
536        public static final ElementName NOBR = new ElementName("nobr", "nobr", TreeBuilder.NOBR);
537        public static final ElementName NEST = new ElementName("nest", "nest", TreeBuilder.OTHER);
538        public static final ElementName PATH = new ElementName("path", "path", TreeBuilder.OTHER);
539        public static final ElementName PLUS = new ElementName("plus", "plus", TreeBuilder.OTHER);
540        public static final ElementName RULE = new ElementName("rule", "rule", TreeBuilder.OTHER);
541        public static final ElementName REAL = new ElementName("real", "real", TreeBuilder.OTHER);
542        public static final ElementName RELN = new ElementName("reln", "reln", TreeBuilder.OTHER);
543        public static final ElementName RECT = new ElementName("rect", "rect", TreeBuilder.OTHER);
544        public static final ElementName ROOT = new ElementName("root", "root", TreeBuilder.OTHER);
545        public static final ElementName RUBY = new ElementName("ruby", "ruby", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
546        public static final ElementName SECH = new ElementName("sech", "sech", TreeBuilder.OTHER);
547        public static final ElementName SINH = new ElementName("sinh", "sinh", TreeBuilder.OTHER);
548        public static final ElementName SPAN = new ElementName("span", "span", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
549        public static final ElementName SAMP = new ElementName("samp", "samp", TreeBuilder.OTHER);
550        public static final ElementName STOP = new ElementName("stop", "stop", TreeBuilder.OTHER);
551        public static final ElementName SDEV = new ElementName("sdev", "sdev", TreeBuilder.OTHER);
552        public static final ElementName TIME = new ElementName("time", "time", TreeBuilder.OTHER);
553        public static final ElementName TRUE = new ElementName("true", "true", TreeBuilder.OTHER);
554        public static final ElementName TREF = new ElementName("tref", "tref", TreeBuilder.OTHER);
555        public static final ElementName TANH = new ElementName("tanh", "tanh", TreeBuilder.OTHER);
556        public static final ElementName TEXT = new ElementName("text", "text", TreeBuilder.OTHER);
557        public static final ElementName VIEW = new ElementName("view", "view", TreeBuilder.OTHER);
558        public static final ElementName ASIDE = new ElementName("aside", "aside", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
559        public static final ElementName AUDIO = new ElementName("audio", "audio", TreeBuilder.OTHER);
560        public static final ElementName APPLY = new ElementName("apply", "apply", TreeBuilder.OTHER);
561        public static final ElementName EMBED = new ElementName("embed", "embed", TreeBuilder.EMBED_OR_IMG | SPECIAL);
562        public static final ElementName FRAME = new ElementName("frame", "frame", TreeBuilder.FRAME | SPECIAL);
563        public static final ElementName FALSE = new ElementName("false", "false", TreeBuilder.OTHER);
564        public static final ElementName FLOOR = new ElementName("floor", "floor", TreeBuilder.OTHER);
565        public static final ElementName GLYPH = new ElementName("glyph", "glyph", TreeBuilder.OTHER);
566        public static final ElementName HKERN = new ElementName("hkern", "hkern", TreeBuilder.OTHER);
567        public static final ElementName IMAGE = new ElementName("image", "image", TreeBuilder.IMAGE | SPECIAL);
568        public static final ElementName IDENT = new ElementName("ident", "ident", TreeBuilder.OTHER);
569        public static final ElementName INPUT = new ElementName("input", "input", TreeBuilder.INPUT | SPECIAL);
570        public static final ElementName LABEL = new ElementName("label", "label", TreeBuilder.OUTPUT_OR_LABEL);
571        public static final ElementName LIMIT = new ElementName("limit", "limit", TreeBuilder.OTHER);
572        public static final ElementName MFRAC = new ElementName("mfrac", "mfrac", TreeBuilder.OTHER);
573        public static final ElementName MPATH = new ElementName("mpath", "mpath", TreeBuilder.OTHER);
574        public static final ElementName METER = new ElementName("meter", "meter", TreeBuilder.OTHER);
575        public static final ElementName MOVER = new ElementName("mover", "mover", TreeBuilder.OTHER);
576        public static final ElementName MINUS = new ElementName("minus", "minus", TreeBuilder.OTHER);
577        public static final ElementName MROOT = new ElementName("mroot", "mroot", TreeBuilder.OTHER);
578        public static final ElementName MSQRT = new ElementName("msqrt", "msqrt", TreeBuilder.OTHER);
579        public static final ElementName MTEXT = new ElementName("mtext", "mtext", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
580        public static final ElementName NOTIN = new ElementName("notin", "notin", TreeBuilder.OTHER);
581        public static final ElementName PIECE = new ElementName("piece", "piece", TreeBuilder.OTHER);
582        public static final ElementName PARAM = new ElementName("param", "param", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK | SPECIAL);
583        public static final ElementName POWER = new ElementName("power", "power", TreeBuilder.OTHER);
584        public static final ElementName REALS = new ElementName("reals", "reals", TreeBuilder.OTHER);
585        public static final ElementName STYLE = new ElementName("style", "style", TreeBuilder.STYLE | SPECIAL);
586        public static final ElementName SMALL = new ElementName("small", "small", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
587        public static final ElementName THEAD = new ElementName("thead", "thead", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
588        public static final ElementName TABLE = new ElementName("table", "table", TreeBuilder.TABLE | SPECIAL | FOSTER_PARENTING | SCOPING);
589        public static final ElementName TITLE = new ElementName("title", "title", TreeBuilder.TITLE | SPECIAL | SCOPING_AS_SVG);
590        public static final ElementName TRACK = new ElementName("track", "track", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK);
591        public static final ElementName TSPAN = new ElementName("tspan", "tspan", TreeBuilder.OTHER);
592        public static final ElementName TIMES = new ElementName("times", "times", TreeBuilder.OTHER);
593        public static final ElementName TFOOT = new ElementName("tfoot", "tfoot", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
594        public static final ElementName TBODY = new ElementName("tbody", "tbody", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
595        public static final ElementName UNION = new ElementName("union", "union", TreeBuilder.OTHER);
596        public static final ElementName VKERN = new ElementName("vkern", "vkern", TreeBuilder.OTHER);
597        public static final ElementName VIDEO = new ElementName("video", "video", TreeBuilder.OTHER);
598        public static final ElementName ARCSEC = new ElementName("arcsec", "arcsec", TreeBuilder.OTHER);
599        public static final ElementName ARCCSC = new ElementName("arccsc", "arccsc", TreeBuilder.OTHER);
600        public static final ElementName ARCTAN = new ElementName("arctan", "arctan", TreeBuilder.OTHER);
601        public static final ElementName ARCSIN = new ElementName("arcsin", "arcsin", TreeBuilder.OTHER);
602        public static final ElementName ARCCOS = new ElementName("arccos", "arccos", TreeBuilder.OTHER);
603        public static final ElementName APPLET = new ElementName("applet", "applet", TreeBuilder.MARQUEE_OR_APPLET | SPECIAL | SCOPING);
604        public static final ElementName ARCCOT = new ElementName("arccot", "arccot", TreeBuilder.OTHER);
605        public static final ElementName APPROX = new ElementName("approx", "approx", TreeBuilder.OTHER);
606        public static final ElementName BUTTON = new ElementName("button", "button", TreeBuilder.BUTTON | SPECIAL);
607        public static final ElementName CIRCLE = new ElementName("circle", "circle", TreeBuilder.OTHER);
608        public static final ElementName CENTER = new ElementName("center", "center", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
609        public static final ElementName CURSOR = new ElementName("cursor", "cursor", TreeBuilder.OTHER);
610        public static final ElementName CANVAS = new ElementName("canvas", "canvas", TreeBuilder.OTHER);
611        public static final ElementName DIVIDE = new ElementName("divide", "divide", TreeBuilder.OTHER);
612        public static final ElementName DEGREE = new ElementName("degree", "degree", TreeBuilder.OTHER);
613        public static final ElementName DOMAIN = new ElementName("domain", "domain", TreeBuilder.OTHER);
614        public static final ElementName EXISTS = new ElementName("exists", "exists", TreeBuilder.OTHER);
615        public static final ElementName FETILE = new ElementName("fetile", "feTile", TreeBuilder.OTHER);
616        public static final ElementName FIGURE = new ElementName("figure", "figure", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
617        public static final ElementName FORALL = new ElementName("forall", "forall", TreeBuilder.OTHER);
618        public static final ElementName FILTER = new ElementName("filter", "filter", TreeBuilder.OTHER);
619        public static final ElementName FOOTER = new ElementName("footer", "footer", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
620        public static final ElementName HGROUP = new ElementName("hgroup", "hgroup", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
621        public static final ElementName HEADER = new ElementName("header", "header", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
622        public static final ElementName IFRAME = new ElementName("iframe", "iframe", TreeBuilder.IFRAME | SPECIAL);
623        public static final ElementName KEYGEN = new ElementName("keygen", "keygen", TreeBuilder.KEYGEN | SPECIAL);
624        public static final ElementName LAMBDA = new ElementName("lambda", "lambda", TreeBuilder.OTHER);
625        public static final ElementName LEGEND = new ElementName("legend", "legend", TreeBuilder.OTHER);
626        public static final ElementName MSPACE = new ElementName("mspace", "mspace", TreeBuilder.OTHER);
627        public static final ElementName MTABLE = new ElementName("mtable", "mtable", TreeBuilder.OTHER);
628        public static final ElementName MSTYLE = new ElementName("mstyle", "mstyle", TreeBuilder.OTHER);
629        public static final ElementName MGLYPH = new ElementName("mglyph", "mglyph", TreeBuilder.MGLYPH_OR_MALIGNMARK);
630        public static final ElementName MEDIAN = new ElementName("median", "median", TreeBuilder.OTHER);
631        public static final ElementName MUNDER = new ElementName("munder", "munder", TreeBuilder.OTHER);
632        public static final ElementName MARKER = new ElementName("marker", "marker", TreeBuilder.OTHER);
633        public static final ElementName MERROR = new ElementName("merror", "merror", TreeBuilder.OTHER);
634        public static final ElementName MOMENT = new ElementName("moment", "moment", TreeBuilder.OTHER);
635        public static final ElementName MATRIX = new ElementName("matrix", "matrix", TreeBuilder.OTHER);
636        public static final ElementName OPTION = new ElementName("option", "option", TreeBuilder.OPTION | OPTIONAL_END_TAG);
637        public static final ElementName OBJECT = new ElementName("object", "object", TreeBuilder.OBJECT | SPECIAL | SCOPING);
638        public static final ElementName OUTPUT = new ElementName("output", "output", TreeBuilder.OUTPUT_OR_LABEL);
639        public static final ElementName PRIMES = new ElementName("primes", "primes", TreeBuilder.OTHER);
640        public static final ElementName SOURCE = new ElementName("source", "source", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK);
641        public static final ElementName STRIKE = new ElementName("strike", "strike", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
642        public static final ElementName STRONG = new ElementName("strong", "strong", TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
643        public static final ElementName SWITCH = new ElementName("switch", "switch", TreeBuilder.OTHER);
644        public static final ElementName SYMBOL = new ElementName("symbol", "symbol", TreeBuilder.OTHER);
645        public static final ElementName SELECT = new ElementName("select", "select", TreeBuilder.SELECT | SPECIAL);
646        public static final ElementName SUBSET = new ElementName("subset", "subset", TreeBuilder.OTHER);
647        public static final ElementName SCRIPT = new ElementName("script", "script", TreeBuilder.SCRIPT | SPECIAL);
648        public static final ElementName TBREAK = new ElementName("tbreak", "tbreak", TreeBuilder.OTHER);
649        public static final ElementName VECTOR = new ElementName("vector", "vector", TreeBuilder.OTHER);
650        public static final ElementName ARTICLE = new ElementName("article", "article", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
651        public static final ElementName ANIMATE = new ElementName("animate", "animate", TreeBuilder.OTHER);
652        public static final ElementName ARCSECH = new ElementName("arcsech", "arcsech", TreeBuilder.OTHER);
653        public static final ElementName ARCCSCH = new ElementName("arccsch", "arccsch", TreeBuilder.OTHER);
654        public static final ElementName ARCTANH = new ElementName("arctanh", "arctanh", TreeBuilder.OTHER);
655        public static final ElementName ARCSINH = new ElementName("arcsinh", "arcsinh", TreeBuilder.OTHER);
656        public static final ElementName ARCCOSH = new ElementName("arccosh", "arccosh", TreeBuilder.OTHER);
657        public static final ElementName ARCCOTH = new ElementName("arccoth", "arccoth", TreeBuilder.OTHER);
658        public static final ElementName ACRONYM = new ElementName("acronym", "acronym", TreeBuilder.OTHER);
659        public static final ElementName ADDRESS = new ElementName("address", "address", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
660        public static final ElementName BGSOUND = new ElementName("bgsound", "bgsound", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
661        public static final ElementName COMMAND = new ElementName("command", "command", TreeBuilder.COMMAND | SPECIAL);
662        public static final ElementName COMPOSE = new ElementName("compose", "compose", TreeBuilder.OTHER);
663        public static final ElementName CEILING = new ElementName("ceiling", "ceiling", TreeBuilder.OTHER);
664        public static final ElementName CSYMBOL = new ElementName("csymbol", "csymbol", TreeBuilder.OTHER);
665        public static final ElementName CAPTION = new ElementName("caption", "caption", TreeBuilder.CAPTION | SPECIAL | SCOPING);
666        public static final ElementName DISCARD = new ElementName("discard", "discard", TreeBuilder.OTHER);
667        public static final ElementName DECLARE = new ElementName("declare", "declare", TreeBuilder.OTHER);
668        public static final ElementName DETAILS = new ElementName("details", "details", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
669        public static final ElementName ELLIPSE = new ElementName("ellipse", "ellipse", TreeBuilder.OTHER);
670        public static final ElementName FEFUNCA = new ElementName("fefunca", "feFuncA", TreeBuilder.OTHER);
671        public static final ElementName FEFUNCB = new ElementName("fefuncb", "feFuncB", TreeBuilder.OTHER);
672        public static final ElementName FEBLEND = new ElementName("feblend", "feBlend", TreeBuilder.OTHER);
673        public static final ElementName FEFLOOD = new ElementName("feflood", "feFlood", TreeBuilder.OTHER);
674        public static final ElementName FEIMAGE = new ElementName("feimage", "feImage", TreeBuilder.OTHER);
675        public static final ElementName FEMERGE = new ElementName("femerge", "feMerge", TreeBuilder.OTHER);
676        public static final ElementName FEFUNCG = new ElementName("fefuncg", "feFuncG", TreeBuilder.OTHER);
677        public static final ElementName FEFUNCR = new ElementName("fefuncr", "feFuncR", TreeBuilder.OTHER);
678        public static final ElementName HANDLER = new ElementName("handler", "handler", TreeBuilder.OTHER);
679        public static final ElementName INVERSE = new ElementName("inverse", "inverse", TreeBuilder.OTHER);
680        public static final ElementName IMPLIES = new ElementName("implies", "implies", TreeBuilder.OTHER);
681        public static final ElementName ISINDEX = new ElementName("isindex", "isindex", TreeBuilder.ISINDEX | SPECIAL);
682        public static final ElementName LOGBASE = new ElementName("logbase", "logbase", TreeBuilder.OTHER);
683        public static final ElementName LISTING = new ElementName("listing", "listing", TreeBuilder.PRE_OR_LISTING | SPECIAL);
684        public static final ElementName MFENCED = new ElementName("mfenced", "mfenced", TreeBuilder.OTHER);
685        public static final ElementName MPADDED = new ElementName("mpadded", "mpadded", TreeBuilder.OTHER);
686        public static final ElementName MARQUEE = new ElementName("marquee", "marquee", TreeBuilder.MARQUEE_OR_APPLET | SPECIAL | SCOPING);
687        public static final ElementName MACTION = new ElementName("maction", "maction", TreeBuilder.OTHER);
688        public static final ElementName MSUBSUP = new ElementName("msubsup", "msubsup", TreeBuilder.OTHER);
689        public static final ElementName NOEMBED = new ElementName("noembed", "noembed", TreeBuilder.NOEMBED | SPECIAL);
690        public static final ElementName POLYGON = new ElementName("polygon", "polygon", TreeBuilder.OTHER);
691        public static final ElementName PATTERN = new ElementName("pattern", "pattern", TreeBuilder.OTHER);
692        public static final ElementName PRODUCT = new ElementName("product", "product", TreeBuilder.OTHER);
693        public static final ElementName SETDIFF = new ElementName("setdiff", "setdiff", TreeBuilder.OTHER);
694        public static final ElementName SECTION = new ElementName("section", "section", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
695        public static final ElementName SUMMARY = new ElementName("summary", "summary", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
696        public static final ElementName TENDSTO = new ElementName("tendsto", "tendsto", TreeBuilder.OTHER);
697        public static final ElementName UPLIMIT = new ElementName("uplimit", "uplimit", TreeBuilder.OTHER);
698        public static final ElementName ALTGLYPH = new ElementName("altglyph", "altGlyph", TreeBuilder.OTHER);
699        public static final ElementName BASEFONT = new ElementName("basefont", "basefont", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
700        public static final ElementName CLIPPATH = new ElementName("clippath", "clipPath", TreeBuilder.OTHER);
701        public static final ElementName CODOMAIN = new ElementName("codomain", "codomain", TreeBuilder.OTHER);
702        public static final ElementName COLGROUP = new ElementName("colgroup", "colgroup", TreeBuilder.COLGROUP | SPECIAL | OPTIONAL_END_TAG);
703        public static final ElementName EMPTYSET = new ElementName("emptyset", "emptyset", TreeBuilder.OTHER);
704        public static final ElementName FACTOROF = new ElementName("factorof", "factorof", TreeBuilder.OTHER);
705        public static final ElementName FIELDSET = new ElementName("fieldset", "fieldset", TreeBuilder.FIELDSET | SPECIAL);
706        public static final ElementName FRAMESET = new ElementName("frameset", "frameset", TreeBuilder.FRAMESET | SPECIAL);
707        public static final ElementName FEOFFSET = new ElementName("feoffset", "feOffset", TreeBuilder.OTHER);
708        public static final ElementName GLYPHREF = new ElementName("glyphref", "glyphRef", TreeBuilder.OTHER);
709        public static final ElementName INTERVAL = new ElementName("interval", "interval", TreeBuilder.OTHER);
710        public static final ElementName INTEGERS = new ElementName("integers", "integers", TreeBuilder.OTHER);
711        public static final ElementName INFINITY = new ElementName("infinity", "infinity", TreeBuilder.OTHER);
712        public static final ElementName LISTENER = new ElementName("listener", "listener", TreeBuilder.OTHER);
713        public static final ElementName LOWLIMIT = new ElementName("lowlimit", "lowlimit", TreeBuilder.OTHER);
714        public static final ElementName METADATA = new ElementName("metadata", "metadata", TreeBuilder.OTHER);
715        public static final ElementName MENCLOSE = new ElementName("menclose", "menclose", TreeBuilder.OTHER);
716        public static final ElementName MPHANTOM = new ElementName("mphantom", "mphantom", TreeBuilder.OTHER);
717        public static final ElementName NOFRAMES = new ElementName("noframes", "noframes", TreeBuilder.NOFRAMES | SPECIAL);
718        public static final ElementName NOSCRIPT = new ElementName("noscript", "noscript", TreeBuilder.NOSCRIPT | SPECIAL);
719        public static final ElementName OPTGROUP = new ElementName("optgroup", "optgroup", TreeBuilder.OPTGROUP | SPECIAL | OPTIONAL_END_TAG);
720        public static final ElementName POLYLINE = new ElementName("polyline", "polyline", TreeBuilder.OTHER);
721        public static final ElementName PREFETCH = new ElementName("prefetch", "prefetch", TreeBuilder.OTHER);
722        public static final ElementName PROGRESS = new ElementName("progress", "progress", TreeBuilder.OTHER);
723        public static final ElementName PRSUBSET = new ElementName("prsubset", "prsubset", TreeBuilder.OTHER);
724        public static final ElementName QUOTIENT = new ElementName("quotient", "quotient", TreeBuilder.OTHER);
725        public static final ElementName SELECTOR = new ElementName("selector", "selector", TreeBuilder.OTHER);
726        public static final ElementName TEXTAREA = new ElementName("textarea", "textarea", TreeBuilder.TEXTAREA | SPECIAL);
727        public static final ElementName TEXTPATH = new ElementName("textpath", "textPath", TreeBuilder.OTHER);
728        public static final ElementName VARIANCE = new ElementName("variance", "variance", TreeBuilder.OTHER);
729        public static final ElementName ANIMATION = new ElementName("animation", "animation", TreeBuilder.OTHER);
730        public static final ElementName CONJUGATE = new ElementName("conjugate", "conjugate", TreeBuilder.OTHER);
731        public static final ElementName CONDITION = new ElementName("condition", "condition", TreeBuilder.OTHER);
732        public static final ElementName COMPLEXES = new ElementName("complexes", "complexes", TreeBuilder.OTHER);
733        public static final ElementName FONT_FACE = new ElementName("font-face", "font-face", TreeBuilder.OTHER);
734        public static final ElementName FACTORIAL = new ElementName("factorial", "factorial", TreeBuilder.OTHER);
735        public static final ElementName INTERSECT = new ElementName("intersect", "intersect", TreeBuilder.OTHER);
736        public static final ElementName IMAGINARY = new ElementName("imaginary", "imaginary", TreeBuilder.OTHER);
737        public static final ElementName LAPLACIAN = new ElementName("laplacian", "laplacian", TreeBuilder.OTHER);
738        public static final ElementName MATRIXROW = new ElementName("matrixrow", "matrixrow", TreeBuilder.OTHER);
739        public static final ElementName NOTSUBSET = new ElementName("notsubset", "notsubset", TreeBuilder.OTHER);
740        public static final ElementName OTHERWISE = new ElementName("otherwise", "otherwise", TreeBuilder.OTHER);
741        public static final ElementName PIECEWISE = new ElementName("piecewise", "piecewise", TreeBuilder.OTHER);
742        public static final ElementName PLAINTEXT = new ElementName("plaintext", "plaintext", TreeBuilder.PLAINTEXT | SPECIAL);
743        public static final ElementName RATIONALS = new ElementName("rationals", "rationals", TreeBuilder.OTHER);
744        public static final ElementName SEMANTICS = new ElementName("semantics", "semantics", TreeBuilder.OTHER);
745        public static final ElementName TRANSPOSE = new ElementName("transpose", "transpose", TreeBuilder.OTHER);
746        public static final ElementName ANNOTATION = new ElementName("annotation", "annotation", TreeBuilder.OTHER);
747        public static final ElementName BLOCKQUOTE = new ElementName("blockquote", "blockquote", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
748        public static final ElementName DIVERGENCE = new ElementName("divergence", "divergence", TreeBuilder.OTHER);
749        public static final ElementName EULERGAMMA = new ElementName("eulergamma", "eulergamma", TreeBuilder.OTHER);
750        public static final ElementName EQUIVALENT = new ElementName("equivalent", "equivalent", TreeBuilder.OTHER);
751        public static final ElementName FIGCAPTION = new ElementName("figcaption", "figcaption", TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
752        public static final ElementName IMAGINARYI = new ElementName("imaginaryi", "imaginaryi", TreeBuilder.OTHER);
753        public static final ElementName MALIGNMARK = new ElementName("malignmark", "malignmark", TreeBuilder.MGLYPH_OR_MALIGNMARK);
754        public static final ElementName MUNDEROVER = new ElementName("munderover", "munderover", TreeBuilder.OTHER);
755        public static final ElementName MLABELEDTR = new ElementName("mlabeledtr", "mlabeledtr", TreeBuilder.OTHER);
756        public static final ElementName NOTANUMBER = new ElementName("notanumber", "notanumber", TreeBuilder.OTHER);
757        public static final ElementName SOLIDCOLOR = new ElementName("solidcolor", "solidcolor", TreeBuilder.OTHER);
758        public static final ElementName ALTGLYPHDEF = new ElementName("altglyphdef", "altGlyphDef", TreeBuilder.OTHER);
759        public static final ElementName DETERMINANT = new ElementName("determinant", "determinant", TreeBuilder.OTHER);
760        public static final ElementName FEMERGENODE = new ElementName("femergenode", "feMergeNode", TreeBuilder.OTHER);
761        public static final ElementName FECOMPOSITE = new ElementName("fecomposite", "feComposite", TreeBuilder.OTHER);
762        public static final ElementName FESPOTLIGHT = new ElementName("fespotlight", "feSpotLight", TreeBuilder.OTHER);
763        public static final ElementName MALIGNGROUP = new ElementName("maligngroup", "maligngroup", TreeBuilder.OTHER);
764        public static final ElementName MPRESCRIPTS = new ElementName("mprescripts", "mprescripts", TreeBuilder.OTHER);
765        public static final ElementName MOMENTABOUT = new ElementName("momentabout", "momentabout", TreeBuilder.OTHER);
766        public static final ElementName NOTPRSUBSET = new ElementName("notprsubset", "notprsubset", TreeBuilder.OTHER);
767        public static final ElementName PARTIALDIFF = new ElementName("partialdiff", "partialdiff", TreeBuilder.OTHER);
768        public static final ElementName ALTGLYPHITEM = new ElementName("altglyphitem", "altGlyphItem", TreeBuilder.OTHER);
769        public static final ElementName ANIMATECOLOR = new ElementName("animatecolor", "animateColor", TreeBuilder.OTHER);
770        public static final ElementName DATATEMPLATE = new ElementName("datatemplate", "datatemplate", TreeBuilder.OTHER);
771        public static final ElementName EXPONENTIALE = new ElementName("exponentiale", "exponentiale", TreeBuilder.OTHER);
772        public static final ElementName FETURBULENCE = new ElementName("feturbulence", "feTurbulence", TreeBuilder.OTHER);
773        public static final ElementName FEPOINTLIGHT = new ElementName("fepointlight", "fePointLight", TreeBuilder.OTHER);
774        public static final ElementName FEMORPHOLOGY = new ElementName("femorphology", "feMorphology", TreeBuilder.OTHER);
775        public static final ElementName OUTERPRODUCT = new ElementName("outerproduct", "outerproduct", TreeBuilder.OTHER);
776        public static final ElementName ANIMATEMOTION = new ElementName("animatemotion", "animateMotion", TreeBuilder.OTHER);
777        public static final ElementName COLOR_PROFILE = new ElementName("color-profile", "color-profile", TreeBuilder.OTHER);
778        public static final ElementName FONT_FACE_SRC = new ElementName("font-face-src", "font-face-src", TreeBuilder.OTHER);
779        public static final ElementName FONT_FACE_URI = new ElementName("font-face-uri", "font-face-uri", TreeBuilder.OTHER);
780        public static final ElementName FOREIGNOBJECT = new ElementName("foreignobject", "foreignObject", TreeBuilder.FOREIGNOBJECT_OR_DESC | SCOPING_AS_SVG);
781        public static final ElementName FECOLORMATRIX = new ElementName("fecolormatrix", "feColorMatrix", TreeBuilder.OTHER);
782        public static final ElementName MISSING_GLYPH = new ElementName("missing-glyph", "missing-glyph", TreeBuilder.OTHER);
783        public static final ElementName MMULTISCRIPTS = new ElementName("mmultiscripts", "mmultiscripts", TreeBuilder.OTHER);
784        public static final ElementName SCALARPRODUCT = new ElementName("scalarproduct", "scalarproduct", TreeBuilder.OTHER);
785        public static final ElementName VECTORPRODUCT = new ElementName("vectorproduct", "vectorproduct", TreeBuilder.OTHER);
786        public static final ElementName ANNOTATION_XML = new ElementName("annotation-xml", "annotation-xml", TreeBuilder.ANNOTATION_XML | SCOPING_AS_MATHML);
787        public static final ElementName DEFINITION_SRC = new ElementName("definition-src", "definition-src", TreeBuilder.OTHER);
788        public static final ElementName FONT_FACE_NAME = new ElementName("font-face-name", "font-face-name", TreeBuilder.OTHER);
789        public static final ElementName FEGAUSSIANBLUR = new ElementName("fegaussianblur", "feGaussianBlur", TreeBuilder.OTHER);
790        public static final ElementName FEDISTANTLIGHT = new ElementName("fedistantlight", "feDistantLight", TreeBuilder.OTHER);
791        public static final ElementName LINEARGRADIENT = new ElementName("lineargradient", "linearGradient", TreeBuilder.OTHER);
792        public static final ElementName NATURALNUMBERS = new ElementName("naturalnumbers", "naturalnumbers", TreeBuilder.OTHER);
793        public static final ElementName RADIALGRADIENT = new ElementName("radialgradient", "radialGradient", TreeBuilder.OTHER);
794        public static final ElementName ANIMATETRANSFORM = new ElementName("animatetransform", "animateTransform", TreeBuilder.OTHER);
795        public static final ElementName CARTESIANPRODUCT = new ElementName("cartesianproduct", "cartesianproduct", TreeBuilder.OTHER);
796        public static final ElementName FONT_FACE_FORMAT = new ElementName("font-face-format", "font-face-format", TreeBuilder.OTHER);
797        public static final ElementName FECONVOLVEMATRIX = new ElementName("feconvolvematrix", "feConvolveMatrix", TreeBuilder.OTHER);
798        public static final ElementName FEDIFFUSELIGHTING = new ElementName("fediffuselighting", "feDiffuseLighting", TreeBuilder.OTHER);
799        public static final ElementName FEDISPLACEMENTMAP = new ElementName("fedisplacementmap", "feDisplacementMap", TreeBuilder.OTHER);
800        public static final ElementName FESPECULARLIGHTING = new ElementName("fespecularlighting", "feSpecularLighting", TreeBuilder.OTHER);
801        public static final ElementName DOMAINOFAPPLICATION = new ElementName("domainofapplication", "domainofapplication", TreeBuilder.OTHER);
802        public static final ElementName FECOMPONENTTRANSFER = new ElementName("fecomponenttransfer", "feComponentTransfer", TreeBuilder.OTHER);
803        private final static @NoLength ElementName[] ELEMENT_NAMES = {
804        A,
805        B,
806        G,
807        I,
808        P,
809        Q,
810        S,
811        U,
812        BR,
813        CI,
814        CN,
815        DD,
816        DL,
817        DT,
818        EM,
819        EQ,
820        FN,
821        H1,
822        H2,
823        H3,
824        H4,
825        H5,
826        H6,
827        GT,
828        HR,
829        IN,
830        LI,
831        LN,
832        LT,
833        MI,
834        MN,
835        MO,
836        MS,
837        OL,
838        OR,
839        PI,
840        RP,
841        RT,
842        TD,
843        TH,
844        TR,
845        TT,
846        UL,
847        AND,
848        ARG,
849        ABS,
850        BIG,
851        BDO,
852        CSC,
853        COL,
854        COS,
855        COT,
856        DEL,
857        DFN,
858        DIR,
859        DIV,
860        EXP,
861        GCD,
862        GEQ,
863        IMG,
864        INS,
865        INT,
866        KBD,
867        LOG,
868        LCM,
869        LEQ,
870        MTD,
871        MIN,
872        MAP,
873        MTR,
874        MAX,
875        NEQ,
876        NOT,
877        NAV,
878        PRE,
879        REM,
880        SUB,
881        SEC,
882        SVG,
883        SUM,
884        SIN,
885        SEP,
886        SUP,
887        SET,
888        TAN,
889        USE,
890        VAR,
891        WBR,
892        XMP,
893        XOR,
894        AREA,
895        ABBR,
896        BASE,
897        BVAR,
898        BODY,
899        CARD,
900        CODE,
901        CITE,
902        CSCH,
903        COSH,
904        COTH,
905        CURL,
906        DESC,
907        DIFF,
908        DEFS,
909        FORM,
910        FONT,
911        GRAD,
912        HEAD,
913        HTML,
914        LINE,
915        LINK,
916        LIST,
917        META,
918        MSUB,
919        MODE,
920        MATH,
921        MARK,
922        MASK,
923        MEAN,
924        MSUP,
925        MENU,
926        MROW,
927        NONE,
928        NOBR,
929        NEST,
930        PATH,
931        PLUS,
932        RULE,
933        REAL,
934        RELN,
935        RECT,
936        ROOT,
937        RUBY,
938        SECH,
939        SINH,
940        SPAN,
941        SAMP,
942        STOP,
943        SDEV,
944        TIME,
945        TRUE,
946        TREF,
947        TANH,
948        TEXT,
949        VIEW,
950        ASIDE,
951        AUDIO,
952        APPLY,
953        EMBED,
954        FRAME,
955        FALSE,
956        FLOOR,
957        GLYPH,
958        HKERN,
959        IMAGE,
960        IDENT,
961        INPUT,
962        LABEL,
963        LIMIT,
964        MFRAC,
965        MPATH,
966        METER,
967        MOVER,
968        MINUS,
969        MROOT,
970        MSQRT,
971        MTEXT,
972        NOTIN,
973        PIECE,
974        PARAM,
975        POWER,
976        REALS,
977        STYLE,
978        SMALL,
979        THEAD,
980        TABLE,
981        TITLE,
982        TRACK,
983        TSPAN,
984        TIMES,
985        TFOOT,
986        TBODY,
987        UNION,
988        VKERN,
989        VIDEO,
990        ARCSEC,
991        ARCCSC,
992        ARCTAN,
993        ARCSIN,
994        ARCCOS,
995        APPLET,
996        ARCCOT,
997        APPROX,
998        BUTTON,
999        CIRCLE,
1000        CENTER,
1001        CURSOR,
1002        CANVAS,
1003        DIVIDE,
1004        DEGREE,
1005        DOMAIN,
1006        EXISTS,
1007        FETILE,
1008        FIGURE,
1009        FORALL,
1010        FILTER,
1011        FOOTER,
1012        HGROUP,
1013        HEADER,
1014        IFRAME,
1015        KEYGEN,
1016        LAMBDA,
1017        LEGEND,
1018        MSPACE,
1019        MTABLE,
1020        MSTYLE,
1021        MGLYPH,
1022        MEDIAN,
1023        MUNDER,
1024        MARKER,
1025        MERROR,
1026        MOMENT,
1027        MATRIX,
1028        OPTION,
1029        OBJECT,
1030        OUTPUT,
1031        PRIMES,
1032        SOURCE,
1033        STRIKE,
1034        STRONG,
1035        SWITCH,
1036        SYMBOL,
1037        SELECT,
1038        SUBSET,
1039        SCRIPT,
1040        TBREAK,
1041        VECTOR,
1042        ARTICLE,
1043        ANIMATE,
1044        ARCSECH,
1045        ARCCSCH,
1046        ARCTANH,
1047        ARCSINH,
1048        ARCCOSH,
1049        ARCCOTH,
1050        ACRONYM,
1051        ADDRESS,
1052        BGSOUND,
1053        COMMAND,
1054        COMPOSE,
1055        CEILING,
1056        CSYMBOL,
1057        CAPTION,
1058        DISCARD,
1059        DECLARE,
1060        DETAILS,
1061        ELLIPSE,
1062        FEFUNCA,
1063        FEFUNCB,
1064        FEBLEND,
1065        FEFLOOD,
1066        FEIMAGE,
1067        FEMERGE,
1068        FEFUNCG,
1069        FEFUNCR,
1070        HANDLER,
1071        INVERSE,
1072        IMPLIES,
1073        ISINDEX,
1074        LOGBASE,
1075        LISTING,
1076        MFENCED,
1077        MPADDED,
1078        MARQUEE,
1079        MACTION,
1080        MSUBSUP,
1081        NOEMBED,
1082        POLYGON,
1083        PATTERN,
1084        PRODUCT,
1085        SETDIFF,
1086        SECTION,
1087        SUMMARY,
1088        TENDSTO,
1089        UPLIMIT,
1090        ALTGLYPH,
1091        BASEFONT,
1092        CLIPPATH,
1093        CODOMAIN,
1094        COLGROUP,
1095        EMPTYSET,
1096        FACTOROF,
1097        FIELDSET,
1098        FRAMESET,
1099        FEOFFSET,
1100        GLYPHREF,
1101        INTERVAL,
1102        INTEGERS,
1103        INFINITY,
1104        LISTENER,
1105        LOWLIMIT,
1106        METADATA,
1107        MENCLOSE,
1108        MPHANTOM,
1109        NOFRAMES,
1110        NOSCRIPT,
1111        OPTGROUP,
1112        POLYLINE,
1113        PREFETCH,
1114        PROGRESS,
1115        PRSUBSET,
1116        QUOTIENT,
1117        SELECTOR,
1118        TEXTAREA,
1119        TEXTPATH,
1120        VARIANCE,
1121        ANIMATION,
1122        CONJUGATE,
1123        CONDITION,
1124        COMPLEXES,
1125        FONT_FACE,
1126        FACTORIAL,
1127        INTERSECT,
1128        IMAGINARY,
1129        LAPLACIAN,
1130        MATRIXROW,
1131        NOTSUBSET,
1132        OTHERWISE,
1133        PIECEWISE,
1134        PLAINTEXT,
1135        RATIONALS,
1136        SEMANTICS,
1137        TRANSPOSE,
1138        ANNOTATION,
1139        BLOCKQUOTE,
1140        DIVERGENCE,
1141        EULERGAMMA,
1142        EQUIVALENT,
1143        FIGCAPTION,
1144        IMAGINARYI,
1145        MALIGNMARK,
1146        MUNDEROVER,
1147        MLABELEDTR,
1148        NOTANUMBER,
1149        SOLIDCOLOR,
1150        ALTGLYPHDEF,
1151        DETERMINANT,
1152        FEMERGENODE,
1153        FECOMPOSITE,
1154        FESPOTLIGHT,
1155        MALIGNGROUP,
1156        MPRESCRIPTS,
1157        MOMENTABOUT,
1158        NOTPRSUBSET,
1159        PARTIALDIFF,
1160        ALTGLYPHITEM,
1161        ANIMATECOLOR,
1162        DATATEMPLATE,
1163        EXPONENTIALE,
1164        FETURBULENCE,
1165        FEPOINTLIGHT,
1166        FEMORPHOLOGY,
1167        OUTERPRODUCT,
1168        ANIMATEMOTION,
1169        COLOR_PROFILE,
1170        FONT_FACE_SRC,
1171        FONT_FACE_URI,
1172        FOREIGNOBJECT,
1173        FECOLORMATRIX,
1174        MISSING_GLYPH,
1175        MMULTISCRIPTS,
1176        SCALARPRODUCT,
1177        VECTORPRODUCT,
1178        ANNOTATION_XML,
1179        DEFINITION_SRC,
1180        FONT_FACE_NAME,
1181        FEGAUSSIANBLUR,
1182        FEDISTANTLIGHT,
1183        LINEARGRADIENT,
1184        NATURALNUMBERS,
1185        RADIALGRADIENT,
1186        ANIMATETRANSFORM,
1187        CARTESIANPRODUCT,
1188        FONT_FACE_FORMAT,
1189        FECONVOLVEMATRIX,
1190        FEDIFFUSELIGHTING,
1191        FEDISPLACEMENTMAP,
1192        FESPECULARLIGHTING,
1193        DOMAINOFAPPLICATION,
1194        FECOMPONENTTRANSFER,
1195        };
1196        private final static int[] ELEMENT_HASHES = {
1197        1057,
1198        1090,
1199        1255,
1200        1321,
1201        1552,
1202        1585,
1203        1651,
1204        1717,
1205        68162,
1206        68899,
1207        69059,
1208        69764,
1209        70020,
1210        70276,
1211        71077,
1212        71205,
1213        72134,
1214        72232,
1215        72264,
1216        72296,
1217        72328,
1218        72360,
1219        72392,
1220        73351,
1221        74312,
1222        75209,
1223        78124,
1224        78284,
1225        78476,
1226        79149,
1227        79309,
1228        79341,
1229        79469,
1230        81295,
1231        81487,
1232        82224,
1233        84498,
1234        84626,
1235        86164,
1236        86292,
1237        86612,
1238        86676,
1239        87445,
1240        3183041,
1241        3186241,
1242        3198017,
1243        3218722,
1244        3226754,
1245        3247715,
1246        3256803,
1247        3263971,
1248        3264995,
1249        3289252,
1250        3291332,
1251        3295524,
1252        3299620,
1253        3326725,
1254        3379303,
1255        3392679,
1256        3448233,
1257        3460553,
1258        3461577,
1259        3510347,
1260        3546604,
1261        3552364,
1262        3556524,
1263        3576461,
1264        3586349,
1265        3588141,
1266        3590797,
1267        3596333,
1268        3622062,
1269        3625454,
1270        3627054,
1271        3675728,
1272        3749042,
1273        3771059,
1274        3771571,
1275        3776211,
1276        3782323,
1277        3782963,
1278        3784883,
1279        3785395,
1280        3788979,
1281        3815476,
1282        3839605,
1283        3885110,
1284        3917911,
1285        3948984,
1286        3951096,
1287        135304769,
1288        135858241,
1289        136498210,
1290        136906434,
1291        137138658,
1292        137512995,
1293        137531875,
1294        137548067,
1295        137629283,
1296        137645539,
1297        137646563,
1298        137775779,
1299        138529956,
1300        138615076,
1301        139040932,
1302        140954086,
1303        141179366,
1304        141690439,
1305        142738600,
1306        143013512,
1307        146979116,
1308        147175724,
1309        147475756,
1310        147902637,
1311        147936877,
1312        148017645,
1313        148131885,
1314        148228141,
1315        148229165,
1316        148309165,
1317        148395629,
1318        148551853,
1319        148618829,
1320        149076462,
1321        149490158,
1322        149572782,
1323        151277616,
1324        151639440,
1325        153268914,
1326        153486514,
1327        153563314,
1328        153750706,
1329        153763314,
1330        153914034,
1331        154406067,
1332        154417459,
1333        154600979,
1334        154678323,
1335        154680979,
1336        154866835,
1337        155366708,
1338        155375188,
1339        155391572,
1340        155465780,
1341        155869364,
1342        158045494,
1343        168988979,
1344        169321621,
1345        169652752,
1346        173151309,
1347        174240818,
1348        174247297,
1349        174669292,
1350        175391532,
1351        176638123,
1352        177380397,
1353        177879204,
1354        177886734,
1355        180753473,
1356        181020073,
1357        181503558,
1358        181686320,
1359        181999237,
1360        181999311,
1361        182048201,
1362        182074866,
1363        182078003,
1364        182083764,
1365        182920847,
1366        184716457,
1367        184976961,
1368        185145071,
1369        187281445,
1370        187872052,
1371        188100653,
1372        188875944,
1373        188919873,
1374        188920457,
1375        189107250,
1376        189203987,
1377        189371817,
1378        189414886,
1379        189567458,
1380        190266670,
1381        191318187,
1382        191337609,
1383        202479203,
1384        202493027,
1385        202835587,
1386        202843747,
1387        203013219,
1388        203036048,
1389        203045987,
1390        203177552,
1391        203898516,
1392        204648562,
1393        205067918,
1394        205078130,
1395        205096654,
1396        205689142,
1397        205690439,
1398        205988909,
1399        207213161,
1400        207794484,
1401        207800999,
1402        208023602,
1403        208213644,
1404        208213647,
1405        210261490,
1406        210310273,
1407        210940978,
1408        213325049,
1409        213946445,
1410        214055079,
1411        215125040,
1412        215134273,
1413        215135028,
1414        215237420,
1415        215418148,
1416        215553166,
1417        215553394,
1418        215563858,
1419        215627949,
1420        215754324,
1421        217529652,
1422        217713834,
1423        217732628,
1424        218731945,
1425        221417045,
1426        221424946,
1427        221493746,
1428        221515401,
1429        221658189,
1430        221908140,
1431        221910626,
1432        221921586,
1433        222659762,
1434        225001091,
1435        236105833,
1436        236113965,
1437        236194995,
1438        236195427,
1439        236206132,
1440        236206387,
1441        236211683,
1442        236212707,
1443        236381647,
1444        236571826,
1445        237124271,
1446        238172205,
1447        238210544,
1448        238270764,
1449        238435405,
1450        238501172,
1451        239224867,
1452        239257644,
1453        239710497,
1454        240307721,
1455        241208789,
1456        241241557,
1457        241318060,
1458        241319404,
1459        241343533,
1460        241344069,
1461        241405397,
1462        241765845,
1463        243864964,
1464        244502085,
1465        244946220,
1466        245109902,
1467        247647266,
1468        247707956,
1469        248648814,
1470        248648836,
1471        248682161,
1472        248986932,
1473        249058914,
1474        249697357,
1475        252132601,
1476        252135604,
1477        252317348,
1478        255007012,
1479        255278388,
1480        255641645,
1481        256365156,
1482        257566121,
1483        269763372,
1484        271202790,
1485        271863856,
1486        272049197,
1487        272127474,
1488        274339449,
1489        274939471,
1490        275388004,
1491        275388005,
1492        275388006,
1493        275977800,
1494        278267602,
1495        278513831,
1496        278712622,
1497        281613765,
1498        281683369,
1499        282120228,
1500        282250732,
1501        282508942,
1502        283743649,
1503        283787570,
1504        284710386,
1505        285391148,
1506        285478533,
1507        285854898,
1508        285873762,
1509        286931113,
1510        288964227,
1511        289445441,
1512        289689648,
1513        291671489,
1514        303512884,
1515        305319975,
1516        305610036,
1517        305764101,
1518        308448294,
1519        308675890,
1520        312085683,
1521        312264750,
1522        315032867,
1523        316391000,
1524        317331042,
1525        317902135,
1526        318950711,
1527        319447220,
1528        321499182,
1529        322538804,
1530        323145200,
1531        337067316,
1532        337826293,
1533        339905989,
1534        340833697,
1535        341457068,
1536        342310196,
1537        345302593,
1538        349554733,
1539        349771471,
1540        349786245,
1541        350819405,
1542        356072847,
1543        370349192,
1544        373962798,
1545        375558638,
1546        375574835,
1547        376053993,
1548        383276530,
1549        383373833,
1550        383407586,
1551        384439906,
1552        386079012,
1553        404133513,
1554        404307343,
1555        407031852,
1556        408072233,
1557        409112005,
1558        409608425,
1559        409771500,
1560        419040932,
1561        437730612,
1562        439529766,
1563        442616365,
1564        442813037,
1565        443157674,
1566        443295316,
1567        450118444,
1568        450482697,
1569        456789668,
1570        459935396,
1571        471217869,
1572        474073645,
1573        476230702,
1574        476665218,
1575        476717289,
1576        483014825,
1577        485083298,
1578        489306281,
1579        538364390,
1580        540675748,
1581        543819186,
1582        543958612,
1583        576960820,
1584        577242548,
1585        610515252,
1586        642202932,
1587        644420819,
1588        };
1589    }