1 /*
2  * Copyright (c) 2008-2017 Mozilla Foundation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20  * DEALINGS IN THE SOFTWARE.
21  */
22 
23 package nu.validator.htmlparser.impl;
24 
25 // uncomment to regenerate self
26 //import java.io.BufferedReader;
27 //import java.io.File;
28 //import java.io.FileInputStream;
29 //import java.io.IOException;
30 //import java.io.InputStreamReader;
31 //import java.util.Arrays;
32 //import java.util.Collections;
33 //import java.util.HashMap;
34 //import java.util.LinkedList;
35 //import java.util.List;
36 //import java.util.Map;
37 //import java.util.Map.Entry;
38 //import java.util.regex.Matcher;
39 //import java.util.regex.Pattern;
40 
41 import nu.validator.htmlparser.annotation.Inline;
42 import nu.validator.htmlparser.annotation.Local;
43 import nu.validator.htmlparser.annotation.NoLength;
44 import nu.validator.htmlparser.annotation.Unsigned;
45 import nu.validator.htmlparser.common.Interner;
46 
47 public final class ElementName
48         // uncomment when regenerating self
49 //        implements Comparable<ElementName>
50 {
51 
52     /**
53      * The mask for extracting the dispatch group.
54      */
55     public static final int GROUP_MASK = 127;
56 
57     /**
58      * Indicates that the element is not a pre-interned element. Forbidden on
59      * preinterned elements.
60      */
61     public static final int NOT_INTERNED = (1 << 30);
62 
63     /**
64      * Indicates that the element is in the "special" category. This bit should
65      * not be pre-set on MathML or SVG specials--only on HTML specials.
66      */
67     public static final int SPECIAL = (1 << 29);
68 
69     /**
70      * The element is foster-parenting. This bit should be pre-set on elements
71      * that are foster-parenting as HTML.
72      */
73     public static final int FOSTER_PARENTING = (1 << 28);
74 
75     /**
76      * The element is scoping. This bit should be pre-set on elements that are
77      * scoping as HTML.
78      */
79     public static final int SCOPING = (1 << 27);
80 
81     /**
82      * The element is scoping as SVG.
83      */
84     public static final int SCOPING_AS_SVG = (1 << 26);
85 
86     /**
87      * The element is scoping as MathML.
88      */
89     public static final int SCOPING_AS_MATHML = (1 << 25);
90 
91     /**
92      * The element is an HTML integration point.
93      */
94     public static final int HTML_INTEGRATION_POINT = (1 << 24);
95 
96     /**
97      * The element has an optional end tag.
98      */
99     public static final int OPTIONAL_END_TAG = (1 << 23);
100 
101     private @Local String name;
102 
103     private @Local String camelCaseName;
104 
105     // CPPONLY: private @HtmlCreator Object htmlCreator;
106 
107     // CPPONLY: private @SvgCreator Object svgCreator;
108 
109     /**
110      * The lowest 7 bits are the dispatch group. The high bits are flags.
111      */
112     public final int flags;
113 
getName()114     @Inline public @Local String getName() {
115         return name;
116     }
117 
getCamelCaseName()118     @Inline public @Local String getCamelCaseName() {
119         return camelCaseName;
120     }
121 
122     // CPPONLY: @Inline public @HtmlCreator Object getHtmlCreator() {
123     // CPPONLY: return htmlCreator;
124     // CPPONLY: }
125 
126     // CPPONLY: @Inline public @SvgCreator Object getSvgCreator() {
127     // CPPONLY: return svgCreator;
128     // CPPONLY: }
129 
getFlags()130     @Inline public int getFlags() {
131         return flags;
132     }
133 
getGroup()134     @Inline public int getGroup() {
135         return flags & ElementName.GROUP_MASK;
136     }
137 
isInterned()138     @Inline public boolean isInterned() {
139         return (flags & ElementName.NOT_INTERNED) == 0;
140     }
141 
levelOrderBinarySearch(int[] data, int key)142     @Inline static int levelOrderBinarySearch(int[] data, int key) {
143         int n = data.length;
144         int i = 0;
145 
146         while (i < n) {
147             int val = data[i];
148             if (val < key) {
149                 i = 2 * i + 2;
150             } else if (val > key) {
151                 i = 2 * i + 1;
152             } else {
153                 return i;
154             }
155         }
156 
157         return -1;
158     }
159 
elementNameByBuffer(@oLength char[] buf, int length, Interner interner)160     @Inline static ElementName elementNameByBuffer(@NoLength char[] buf,
161             int length, Interner interner) {
162         @Unsigned int hash = ElementName.bufToHash(buf, length);
163         int[] hashes;
164         hashes = ElementName.ELEMENT_HASHES;
165         int index = levelOrderBinarySearch(hashes, hash);
166         if (index < 0) {
167             return null;
168         } else {
169             ElementName elementName = ElementName.ELEMENT_NAMES[index];
170             @Local String name = elementName.name;
171             if (!Portability.localEqualsBuffer(name, buf, length)) {
172                 return null;
173             }
174             return elementName;
175         }
176     }
177 
178     /**
179      * This method has to return a unique positive integer for each well-known
180      * lower-cased element name.
181      *
182      * @param buf
183      * @param len
184      * @return
185      */
bufToHash(@oLength char[] buf, int length)186     @Inline private static @Unsigned int bufToHash(@NoLength char[] buf,
187             int length) {
188         @Unsigned int len = length;
189         @Unsigned int first = buf[0];
190         first <<= 19;
191         @Unsigned int second = 1 << 23;
192         @Unsigned int third = 0;
193         @Unsigned int fourth = 0;
194         @Unsigned int fifth = 0;
195         if (length >= 4) {
196             second = buf[length - 4];
197             second <<= 4;
198             third = buf[length - 3];
199             third <<= 9;
200             fourth = buf[length - 2];
201             fourth <<= 14;
202             fifth = buf[length - 1];
203             fifth <<= 24;
204         } else if (length == 3) {
205             second = buf[1];
206             second <<= 4;
207             third = buf[2];
208             third <<= 9;
209         } else if (length == 2) {
210             second = buf[1];
211             second <<= 24;
212         }
213         return len + first + second + third + fourth + fifth;
214     }
215 
ElementName(@ocal String name, @Local String camelCaseName, int flags)216     private ElementName(@Local String name, @Local String camelCaseName,
217             // CPPONLY: @HtmlCreator Object htmlCreator, @SvgCreator Object
218             // CPPONLY: svgCreator,
219             int flags) {
220         this.name = name;
221         this.camelCaseName = camelCaseName;
222         // CPPONLY: this.htmlCreator = htmlCreator;
223         // CPPONLY: this.svgCreator = svgCreator;
224         this.flags = flags;
225     }
226 
ElementName()227     public ElementName() {
228         this.name = null;
229         this.camelCaseName = null;
230         // CPPONLY: this.htmlCreator = NS_NewHTMLUnknownElement;
231         // CPPONLY: this.svgCreator = NS_NewSVGUnknownElement;
232         this.flags = TreeBuilder.OTHER | NOT_INTERNED;
233     }
234 
destructor()235     public void destructor() {
236         // The translator adds refcount debug code here.
237     }
238 
setNameForNonInterned(@ocal String name )239     @Inline public void setNameForNonInterned(@Local String name
240     // CPPONLY: , boolean custom
241     ) {
242         // No need to worry about refcounting the local name, because in the
243         // C++ case the scoped atom table remembers its own atoms.
244         this.name = name;
245         this.camelCaseName = name;
246         // CPPONLY: if (custom) {
247         // CPPONLY: this.htmlCreator = NS_NewCustomElement;
248         // CPPONLY: } else {
249         // CPPONLY: this.htmlCreator = NS_NewHTMLUnknownElement;
250         // CPPONLY: }
251         // The assertion below relies on TreeBuilder.OTHER being zero!
252         // TreeBuilder.OTHER isn't referenced here, because it would create
253         // a circular C++ header dependency given that this method is inlined.
254         assert this.flags == ElementName.NOT_INTERNED;
255     }
256 
257     // CPPONLY: @Inline public boolean isCustom() {
258     // CPPONLY: return this.htmlCreator == NS_NewCustomElement;
259     // CPPONLY: }
260 
261     public static final ElementName ANNOTATION_XML = new ElementName(
262             "annotation-xml", "annotation-xml",
263             // CPPONLY: NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement,
264             TreeBuilder.ANNOTATION_XML | SCOPING_AS_MATHML);
265 
266     // START CODE ONLY USED FOR GENERATING CODE uncomment and run to regenerate
267 
268 //    private static final Pattern HTML_TAG_DEF = Pattern.compile(
269 //            "^HTML_TAG\\(([^,]+),\\s*([^,]+),\\s*[^,]+\\).*$");
270 //
271 //    private static final Pattern HTML_HTMLELEMENT_TAG_DEF = Pattern.compile(
272 //            "^HTML_HTMLELEMENT_TAG\\(([^\\)]+)\\).*$");
273 //
274 //    private static final Pattern SVG_TAG_DEF = Pattern.compile(
275 //            "^SVG_(?:FROM_PARSER_)?TAG\\(([^,]+),\\s*([^\\)]+)\\).*$");
276 //
277 //    private static final Map<String, String> htmlMap = new HashMap<String, String>();
278 //
279 //    private static final Map<String, String> svgMap = new HashMap<String, String>();
280 //
281 //    private static void ingestHtmlTags(File htmlList) throws IOException {
282 //        // This doesn't need to be efficient, so let's make it easy to write.
283 //        BufferedReader htmlReader = new BufferedReader(
284 //                new InputStreamReader(new FileInputStream(htmlList), "utf-8"));
285 //        try {
286 //            String line;
287 //            while ((line = htmlReader.readLine()) != null) {
288 //                if (!line.startsWith("HTML_")) {
289 //                    continue;
290 //                }
291 //                if (line.startsWith("HTML_OTHER")) {
292 //                    continue;
293 //                }
294 //                Matcher m = HTML_TAG_DEF.matcher(line);
295 //                if (m.matches()) {
296 //                    String iface = m.group(2);
297 //                    if ("Unknown".equals(iface)) {
298 //                        continue;
299 //                    }
300 //                    htmlMap.put(m.group(1), "NS_NewHTML" + iface + "Element");
301 //                } else {
302 //                    m = HTML_HTMLELEMENT_TAG_DEF.matcher(line);
303 //                    if (!m.matches()) {
304 //                        throw new RuntimeException(
305 //                                "Malformed HTML element definition: " + line);
306 //                    }
307 //                    htmlMap.put(m.group(1), "NS_NewHTMLElement");
308 //                }
309 //            }
310 //        } finally {
311 //            htmlReader.close();
312 //        }
313 //    }
314 //
315 //    private static void ingestSvgTags(File svgList) throws IOException {
316 //        // This doesn't need to be efficient, so let's make it easy to write.
317 //        BufferedReader svgReader = new BufferedReader(
318 //                new InputStreamReader(new FileInputStream(svgList), "utf-8"));
319 //        try {
320 //            String line;
321 //            while ((line = svgReader.readLine()) != null) {
322 //                if (!line.startsWith("SVG_")) {
323 //                    continue;
324 //                }
325 //                Matcher m = SVG_TAG_DEF.matcher(line);
326 //                if (!m.matches()) {
327 //                    throw new RuntimeException(
328 //                            "Malformed SVG element definition: " + line);
329 //                }
330 //                String name = m.group(1);
331 //                if ("svgSwitch".equals(name)) {
332 //                    name = "switch";
333 //                }
334 //                svgMap.put(name, "NS_NewSVG" + m.group(2) + "Element");
335 //            }
336 //        } finally {
337 //            svgReader.close();
338 //        }
339 //    }
340 //
341 //    private static String htmlCreator(String name) {
342 //        String creator = htmlMap.remove(name);
343 //        if (creator != null) {
344 //            return creator;
345 //        }
346 //        return "NS_NewHTMLUnknownElement";
347 //    }
348 //
349 //    private static String svgCreator(String name) {
350 //        String creator = svgMap.remove(name);
351 //        if (creator != null) {
352 //            return creator;
353 //        }
354 //        return "NS_NewSVGUnknownElement";
355 //    }
356 //
357 //    /**
358 //     * @see java.lang.Object#toString()
359 //     */
360 //    @Override public String toString() {
361 //        return "(\"" + name + "\", \"" + camelCaseName + "\", \n// CPP"
362 //                + "ONLY: " + htmlCreator(name) + ",\n// CPP" + "ONLY: "
363 //                + svgCreator(camelCaseName) + ", \n" + decomposedFlags() + ")";
364 //    }
365 //
366 //    private String decomposedFlags() {
367 //        StringBuilder buf = new StringBuilder("TreeBuilder.");
368 //        buf.append(treeBuilderGroupToName());
369 //        if ((flags & SPECIAL) != 0) {
370 //            buf.append(" | SPECIAL");
371 //        }
372 //        if ((flags & FOSTER_PARENTING) != 0) {
373 //            buf.append(" | FOSTER_PARENTING");
374 //        }
375 //        if ((flags & SCOPING) != 0) {
376 //            buf.append(" | SCOPING");
377 //        }
378 //        if ((flags & SCOPING_AS_MATHML) != 0) {
379 //            buf.append(" | SCOPING_AS_MATHML");
380 //        }
381 //        if ((flags & SCOPING_AS_SVG) != 0) {
382 //            buf.append(" | SCOPING_AS_SVG");
383 //        }
384 //        if ((flags & OPTIONAL_END_TAG) != 0) {
385 //            buf.append(" | OPTIONAL_END_TAG");
386 //        }
387 //        return buf.toString();
388 //    }
389 //
390 //    private String constName() {
391 //        char[] buf = new char[name.length()];
392 //        for (int i = 0; i < name.length(); i++) {
393 //            char c = name.charAt(i);
394 //            if (c == '-') {
395 //                if (!"annotation-xml".equals(name)) {
396 //                    throw new RuntimeException(
397 //                            "Non-annotation-xml element name with hyphen: "
398 //                                    + name);
399 //                }
400 //                buf[i] = '_';
401 //            } else if (c >= '0' && c <= '9') {
402 //                buf[i] = c;
403 //            } else {
404 //                buf[i] = (char) (c - 0x20);
405 //            }
406 //        }
407 //        return new String(buf);
408 //    }
409 //
410 //    private int hash() {
411 //        return bufToHash(name.toCharArray(), name.length());
412 //    }
413 //
414 //    public int compareTo(ElementName other) {
415 //        int thisHash = this.hash();
416 //        int otherHash = other.hash();
417 //        if (thisHash < otherHash) {
418 //            return -1;
419 //        } else if (thisHash == otherHash) {
420 //            return 0;
421 //        } else {
422 //            return 1;
423 //        }
424 //    }
425 //
426 //    private String treeBuilderGroupToName() {
427 //        switch (getGroup()) {
428 //            case TreeBuilder.OTHER:
429 //                return "OTHER";
430 //            case TreeBuilder.A:
431 //                return "A";
432 //            case TreeBuilder.BASE:
433 //                return "BASE";
434 //            case TreeBuilder.BODY:
435 //                return "BODY";
436 //            case TreeBuilder.BR:
437 //                return "BR";
438 //            case TreeBuilder.BUTTON:
439 //                return "BUTTON";
440 //            case TreeBuilder.CAPTION:
441 //                return "CAPTION";
442 //            case TreeBuilder.COL:
443 //                return "COL";
444 //            case TreeBuilder.COLGROUP:
445 //                return "COLGROUP";
446 //            case TreeBuilder.FONT:
447 //                return "FONT";
448 //            case TreeBuilder.FORM:
449 //                return "FORM";
450 //            case TreeBuilder.FRAME:
451 //                return "FRAME";
452 //            case TreeBuilder.FRAMESET:
453 //                return "FRAMESET";
454 //            case TreeBuilder.IMAGE:
455 //                return "IMAGE";
456 //            case TreeBuilder.INPUT:
457 //                return "INPUT";
458 //            case TreeBuilder.LI:
459 //                return "LI";
460 //            case TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND:
461 //                return "LINK_OR_BASEFONT_OR_BGSOUND";
462 //            case TreeBuilder.MATH:
463 //                return "MATH";
464 //            case TreeBuilder.META:
465 //                return "META";
466 //            case TreeBuilder.SVG:
467 //                return "SVG";
468 //            case TreeBuilder.HEAD:
469 //                return "HEAD";
470 //            case TreeBuilder.HR:
471 //                return "HR";
472 //            case TreeBuilder.HTML:
473 //                return "HTML";
474 //            case TreeBuilder.KEYGEN:
475 //                return "KEYGEN";
476 //            case TreeBuilder.NOBR:
477 //                return "NOBR";
478 //            case TreeBuilder.NOFRAMES:
479 //                return "NOFRAMES";
480 //            case TreeBuilder.NOSCRIPT:
481 //                return "NOSCRIPT";
482 //            case TreeBuilder.OPTGROUP:
483 //                return "OPTGROUP";
484 //            case TreeBuilder.OPTION:
485 //                return "OPTION";
486 //            case TreeBuilder.P:
487 //                return "P";
488 //            case TreeBuilder.PLAINTEXT:
489 //                return "PLAINTEXT";
490 //            case TreeBuilder.SCRIPT:
491 //                return "SCRIPT";
492 //            case TreeBuilder.SELECT:
493 //                return "SELECT";
494 //            case TreeBuilder.STYLE:
495 //                return "STYLE";
496 //            case TreeBuilder.TABLE:
497 //                return "TABLE";
498 //            case TreeBuilder.TEXTAREA:
499 //                return "TEXTAREA";
500 //            case TreeBuilder.TITLE:
501 //                return "TITLE";
502 //            case TreeBuilder.TEMPLATE:
503 //                return "TEMPLATE";
504 //            case TreeBuilder.TR:
505 //                return "TR";
506 //            case TreeBuilder.XMP:
507 //                return "XMP";
508 //            case TreeBuilder.TBODY_OR_THEAD_OR_TFOOT:
509 //                return "TBODY_OR_THEAD_OR_TFOOT";
510 //            case TreeBuilder.TD_OR_TH:
511 //                return "TD_OR_TH";
512 //            case TreeBuilder.DD_OR_DT:
513 //                return "DD_OR_DT";
514 //            case TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6:
515 //                return "H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6";
516 //            case TreeBuilder.OBJECT:
517 //                return "OBJECT";
518 //            case TreeBuilder.OUTPUT:
519 //                return "OUTPUT";
520 //            case TreeBuilder.MARQUEE_OR_APPLET:
521 //                return "MARQUEE_OR_APPLET";
522 //            case TreeBuilder.PRE_OR_LISTING:
523 //                return "PRE_OR_LISTING";
524 //            case TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U:
525 //                return "B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U";
526 //            case TreeBuilder.UL_OR_OL_OR_DL:
527 //                return "UL_OR_OL_OR_DL";
528 //            case TreeBuilder.IFRAME:
529 //                return "IFRAME";
530 //            case TreeBuilder.NOEMBED:
531 //                return "NOEMBED";
532 //            case TreeBuilder.EMBED:
533 //                return "EMBED";
534 //            case TreeBuilder.IMG:
535 //                return "IMG";
536 //            case TreeBuilder.AREA_OR_WBR:
537 //                return "AREA_OR_WBR";
538 //            case TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
539 //                return "DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU";
540 //            case TreeBuilder.FIELDSET:
541 //                return "FIELDSET";
542 //            case TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY:
543 //                return "ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY";
544 //            case TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR:
545 //                return "RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR";
546 //            case TreeBuilder.RB_OR_RTC:
547 //                return "RB_OR_RTC";
548 //            case TreeBuilder.RT_OR_RP:
549 //                return "RT_OR_RP";
550 //            case TreeBuilder.PARAM_OR_SOURCE_OR_TRACK:
551 //                return "PARAM_OR_SOURCE_OR_TRACK";
552 //            case TreeBuilder.MGLYPH_OR_MALIGNMARK:
553 //                return "MGLYPH_OR_MALIGNMARK";
554 //            case TreeBuilder.MI_MO_MN_MS_MTEXT:
555 //                return "MI_MO_MN_MS_MTEXT";
556 //            case TreeBuilder.ANNOTATION_XML:
557 //                return "ANNOTATION_XML";
558 //            case TreeBuilder.FOREIGNOBJECT_OR_DESC:
559 //                return "FOREIGNOBJECT_OR_DESC";
560 //            case TreeBuilder.MENUITEM:
561 //                return "MENUITEM";
562 //        }
563 //        return null;
564 //    }
565 //
566 //    private static void fillLevelOrderArray(List<ElementName> sorted, int depth,
567 //            int rootIdx, ElementName[] levelOrder) {
568 //        if (rootIdx >= levelOrder.length) {
569 //            return;
570 //        }
571 //
572 //        if (depth > 0) {
573 //            fillLevelOrderArray(sorted, depth - 1, rootIdx * 2 + 1, levelOrder);
574 //        }
575 //
576 //        if (!sorted.isEmpty()) {
577 //            levelOrder[rootIdx] = sorted.remove(0);
578 //        }
579 //
580 //        if (depth > 0) {
581 //            fillLevelOrderArray(sorted, depth - 1, rootIdx * 2 + 2, levelOrder);
582 //        }
583 //    }
584 //
585 //    /**
586 //     * Regenerate self
587 //     *
588 //     * The args should be the paths to m-c files
589 //     * parser/htmlparser/nsHTMLTagList.h and dom/svg/SVGTagList.h.
590 //     */
591 //    public static void main(String[] args) {
592 //        File htmlList = new File(args[0]);
593 //        File svgList = new File(args[1]);
594 //        try {
595 //            ingestHtmlTags(htmlList);
596 //        } catch (IOException e) {
597 //            throw new RuntimeException(e);
598 //        }
599 //        try {
600 //            ingestSvgTags(svgList);
601 //        } catch (IOException e) {
602 //            throw new RuntimeException(e);
603 //        }
604 //
605 //        Arrays.sort(ELEMENT_NAMES);
606 //        for (int i = 0; i < ELEMENT_NAMES.length; i++) {
607 //            int hash = ELEMENT_NAMES[i].hash();
608 //            if (hash < 0) {
609 //                System.err.println("Negative hash: " + ELEMENT_NAMES[i].name);
610 //                return;
611 //            }
612 //            for (int j = i + 1; j < ELEMENT_NAMES.length; j++) {
613 //                if (hash == ELEMENT_NAMES[j].hash()) {
614 //                    System.err.println(
615 //                            "Hash collision: " + ELEMENT_NAMES[i].name + ", "
616 //                                    + ELEMENT_NAMES[j].name);
617 //                    return;
618 //                }
619 //            }
620 //        }
621 //        for (int i = 0; i < ELEMENT_NAMES.length; i++) {
622 //            ElementName el = ELEMENT_NAMES[i];
623 //            System.out.println(
624 //                    "public static final ElementName " + el.constName()
625 //                            + " = new ElementName" + el.toString() + ";");
626 //        }
627 //
628 //        LinkedList<ElementName> sortedNames = new LinkedList<ElementName>();
629 //        Collections.addAll(sortedNames, ELEMENT_NAMES);
630 //        ElementName[] levelOrder = new ElementName[ELEMENT_NAMES.length];
631 //        int bstDepth = (int) Math.ceil(
632 //                Math.log(ELEMENT_NAMES.length) / Math.log(2));
633 //        fillLevelOrderArray(sortedNames, bstDepth, 0, levelOrder);
634 //
635 //        System.out.println(
636 //                "private final static @NoLength ElementName[] ELEMENT_NAMES = {");
637 //        for (int i = 0; i < levelOrder.length; i++) {
638 //            ElementName el = levelOrder[i];
639 //            System.out.println(el.constName() + ",");
640 //        }
641 //        System.out.println("};");
642 //        System.out.println("private final static int[] ELEMENT_HASHES = {");
643 //        for (int i = 0; i < levelOrder.length; i++) {
644 //            ElementName el = levelOrder[i];
645 //            System.out.println(Integer.toString(el.hash()) + ",");
646 //        }
647 //        System.out.println("};");
648 //
649 //        for (Entry<String, String> entry : htmlMap.entrySet()) {
650 //            System.err.println("Missing HTML element: " + entry.getKey());
651 //        }
652 //        for (Entry<String, String> entry : svgMap.entrySet()) {
653 //            System.err.println("Missing SVG element: " + entry.getKey());
654 //        }
655 //    }
656 
657     // START GENERATED CODE
658 public static final ElementName BIG = new ElementName("big", "big",
659 // CPPONLY: NS_NewHTMLElement,
660 // CPPONLY: NS_NewSVGUnknownElement,
661 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
662 public static final ElementName BDI = new ElementName("bdi", "bdi",
663 // CPPONLY: NS_NewHTMLElement,
664 // CPPONLY: NS_NewSVGUnknownElement,
665 TreeBuilder.OTHER);
666 public static final ElementName BDO = new ElementName("bdo", "bdo",
667 // CPPONLY: NS_NewHTMLElement,
668 // CPPONLY: NS_NewSVGUnknownElement,
669 TreeBuilder.OTHER);
670 public static final ElementName COL = new ElementName("col", "col",
671 // CPPONLY: NS_NewHTMLTableColElement,
672 // CPPONLY: NS_NewSVGUnknownElement,
673 TreeBuilder.COL | SPECIAL);
674 public static final ElementName DEL = new ElementName("del", "del",
675 // CPPONLY: NS_NewHTMLModElement,
676 // CPPONLY: NS_NewSVGUnknownElement,
677 TreeBuilder.OTHER);
678 public static final ElementName DFN = new ElementName("dfn", "dfn",
679 // CPPONLY: NS_NewHTMLElement,
680 // CPPONLY: NS_NewSVGUnknownElement,
681 TreeBuilder.OTHER);
682 public static final ElementName DIR = new ElementName("dir", "dir",
683 // CPPONLY: NS_NewHTMLSharedElement,
684 // CPPONLY: NS_NewSVGUnknownElement,
685 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
686 public static final ElementName DIV = new ElementName("div", "div",
687 // CPPONLY: NS_NewHTMLDivElement,
688 // CPPONLY: NS_NewSVGUnknownElement,
689 TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
690 public static final ElementName IMG = new ElementName("img", "img",
691 // CPPONLY: NS_NewHTMLImageElement,
692 // CPPONLY: NS_NewSVGUnknownElement,
693 TreeBuilder.IMG | SPECIAL);
694 public static final ElementName INS = new ElementName("ins", "ins",
695 // CPPONLY: NS_NewHTMLModElement,
696 // CPPONLY: NS_NewSVGUnknownElement,
697 TreeBuilder.OTHER);
698 public static final ElementName KBD = new ElementName("kbd", "kbd",
699 // CPPONLY: NS_NewHTMLElement,
700 // CPPONLY: NS_NewSVGUnknownElement,
701 TreeBuilder.OTHER);
702 public static final ElementName MAP = new ElementName("map", "map",
703 // CPPONLY: NS_NewHTMLMapElement,
704 // CPPONLY: NS_NewSVGUnknownElement,
705 TreeBuilder.OTHER);
706 public static final ElementName NAV = new ElementName("nav", "nav",
707 // CPPONLY: NS_NewHTMLElement,
708 // CPPONLY: NS_NewSVGUnknownElement,
709 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
710 public static final ElementName PRE = new ElementName("pre", "pre",
711 // CPPONLY: NS_NewHTMLPreElement,
712 // CPPONLY: NS_NewSVGUnknownElement,
713 TreeBuilder.PRE_OR_LISTING | SPECIAL);
714 public static final ElementName A = new ElementName("a", "a",
715 // CPPONLY: NS_NewHTMLAnchorElement,
716 // CPPONLY: NS_NewSVGAElement,
717 TreeBuilder.A);
718 public static final ElementName B = new ElementName("b", "b",
719 // CPPONLY: NS_NewHTMLElement,
720 // CPPONLY: NS_NewSVGUnknownElement,
721 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
722 public static final ElementName RTC = new ElementName("rtc", "rtc",
723 // CPPONLY: NS_NewHTMLElement,
724 // CPPONLY: NS_NewSVGUnknownElement,
725 TreeBuilder.RB_OR_RTC | OPTIONAL_END_TAG);
726 public static final ElementName SUB = new ElementName("sub", "sub",
727 // CPPONLY: NS_NewHTMLElement,
728 // CPPONLY: NS_NewSVGUnknownElement,
729 TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
730 public static final ElementName SVG = new ElementName("svg", "svg",
731 // CPPONLY: NS_NewHTMLUnknownElement,
732 // CPPONLY: NS_NewSVGSVGElement,
733 TreeBuilder.SVG);
734 public static final ElementName SUP = new ElementName("sup", "sup",
735 // CPPONLY: NS_NewHTMLElement,
736 // CPPONLY: NS_NewSVGUnknownElement,
737 TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
738 public static final ElementName SET = new ElementName("set", "set",
739 // CPPONLY: NS_NewHTMLUnknownElement,
740 // CPPONLY: NS_NewSVGSetElement,
741 TreeBuilder.OTHER);
742 public static final ElementName USE = new ElementName("use", "use",
743 // CPPONLY: NS_NewHTMLUnknownElement,
744 // CPPONLY: NS_NewSVGUseElement,
745 TreeBuilder.OTHER);
746 public static final ElementName VAR = new ElementName("var", "var",
747 // CPPONLY: NS_NewHTMLElement,
748 // CPPONLY: NS_NewSVGUnknownElement,
749 TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
750 public static final ElementName G = new ElementName("g", "g",
751 // CPPONLY: NS_NewHTMLUnknownElement,
752 // CPPONLY: NS_NewSVGGElement,
753 TreeBuilder.OTHER);
754 public static final ElementName WBR = new ElementName("wbr", "wbr",
755 // CPPONLY: NS_NewHTMLElement,
756 // CPPONLY: NS_NewSVGUnknownElement,
757 TreeBuilder.AREA_OR_WBR | SPECIAL);
758 public static final ElementName XMP = new ElementName("xmp", "xmp",
759 // CPPONLY: NS_NewHTMLPreElement,
760 // CPPONLY: NS_NewSVGUnknownElement,
761 TreeBuilder.XMP | SPECIAL);
762 public static final ElementName I = new ElementName("i", "i",
763 // CPPONLY: NS_NewHTMLElement,
764 // CPPONLY: NS_NewSVGUnknownElement,
765 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
766 public static final ElementName P = new ElementName("p", "p",
767 // CPPONLY: NS_NewHTMLParagraphElement,
768 // CPPONLY: NS_NewSVGUnknownElement,
769 TreeBuilder.P | SPECIAL | OPTIONAL_END_TAG);
770 public static final ElementName Q = new ElementName("q", "q",
771 // CPPONLY: NS_NewHTMLSharedElement,
772 // CPPONLY: NS_NewSVGUnknownElement,
773 TreeBuilder.OTHER);
774 public static final ElementName S = new ElementName("s", "s",
775 // CPPONLY: NS_NewHTMLElement,
776 // CPPONLY: NS_NewSVGUnknownElement,
777 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
778 public static final ElementName U = new ElementName("u", "u",
779 // CPPONLY: NS_NewHTMLElement,
780 // CPPONLY: NS_NewSVGUnknownElement,
781 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
782 public static final ElementName H1 = new ElementName("h1", "h1",
783 // CPPONLY: NS_NewHTMLHeadingElement,
784 // CPPONLY: NS_NewSVGUnknownElement,
785 TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
786 public static final ElementName H2 = new ElementName("h2", "h2",
787 // CPPONLY: NS_NewHTMLHeadingElement,
788 // CPPONLY: NS_NewSVGUnknownElement,
789 TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
790 public static final ElementName H3 = new ElementName("h3", "h3",
791 // CPPONLY: NS_NewHTMLHeadingElement,
792 // CPPONLY: NS_NewSVGUnknownElement,
793 TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
794 public static final ElementName H4 = new ElementName("h4", "h4",
795 // CPPONLY: NS_NewHTMLHeadingElement,
796 // CPPONLY: NS_NewSVGUnknownElement,
797 TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
798 public static final ElementName H5 = new ElementName("h5", "h5",
799 // CPPONLY: NS_NewHTMLHeadingElement,
800 // CPPONLY: NS_NewSVGUnknownElement,
801 TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
802 public static final ElementName H6 = new ElementName("h6", "h6",
803 // CPPONLY: NS_NewHTMLHeadingElement,
804 // CPPONLY: NS_NewSVGUnknownElement,
805 TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
806 public static final ElementName AREA = new ElementName("area", "area",
807 // CPPONLY: NS_NewHTMLAreaElement,
808 // CPPONLY: NS_NewSVGUnknownElement,
809 TreeBuilder.AREA_OR_WBR | SPECIAL);
810 public static final ElementName DATA = new ElementName("data", "data",
811 // CPPONLY: NS_NewHTMLDataElement,
812 // CPPONLY: NS_NewSVGUnknownElement,
813 TreeBuilder.OTHER);
814 public static final ElementName FEFUNCA = new ElementName("fefunca", "feFuncA",
815 // CPPONLY: NS_NewHTMLUnknownElement,
816 // CPPONLY: NS_NewSVGFEFuncAElement,
817 TreeBuilder.OTHER);
818 public static final ElementName METADATA = new ElementName("metadata", "metadata",
819 // CPPONLY: NS_NewHTMLUnknownElement,
820 // CPPONLY: NS_NewSVGMetadataElement,
821 TreeBuilder.OTHER);
822 public static final ElementName META = new ElementName("meta", "meta",
823 // CPPONLY: NS_NewHTMLMetaElement,
824 // CPPONLY: NS_NewSVGUnknownElement,
825 TreeBuilder.META | SPECIAL);
826 public static final ElementName TEXTAREA = new ElementName("textarea", "textarea",
827 // CPPONLY: NS_NewHTMLTextAreaElement,
828 // CPPONLY: NS_NewSVGUnknownElement,
829 TreeBuilder.TEXTAREA | SPECIAL);
830 public static final ElementName FEFUNCB = new ElementName("fefuncb", "feFuncB",
831 // CPPONLY: NS_NewHTMLUnknownElement,
832 // CPPONLY: NS_NewSVGFEFuncBElement,
833 TreeBuilder.OTHER);
834 public static final ElementName RB = new ElementName("rb", "rb",
835 // CPPONLY: NS_NewHTMLElement,
836 // CPPONLY: NS_NewSVGUnknownElement,
837 TreeBuilder.RB_OR_RTC | OPTIONAL_END_TAG);
838 public static final ElementName DESC = new ElementName("desc", "desc",
839 // CPPONLY: NS_NewHTMLUnknownElement,
840 // CPPONLY: NS_NewSVGDescElement,
841 TreeBuilder.FOREIGNOBJECT_OR_DESC | SCOPING_AS_SVG);
842 public static final ElementName DD = new ElementName("dd", "dd",
843 // CPPONLY: NS_NewHTMLElement,
844 // CPPONLY: NS_NewSVGUnknownElement,
845 TreeBuilder.DD_OR_DT | SPECIAL | OPTIONAL_END_TAG);
846 public static final ElementName BGSOUND = new ElementName("bgsound", "bgsound",
847 // CPPONLY: NS_NewHTMLUnknownElement,
848 // CPPONLY: NS_NewSVGUnknownElement,
849 TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
850 public static final ElementName EMBED = new ElementName("embed", "embed",
851 // CPPONLY: NS_NewHTMLEmbedElement,
852 // CPPONLY: NS_NewSVGUnknownElement,
853 TreeBuilder.EMBED | SPECIAL);
854 public static final ElementName FEBLEND = new ElementName("feblend", "feBlend",
855 // CPPONLY: NS_NewHTMLUnknownElement,
856 // CPPONLY: NS_NewSVGFEBlendElement,
857 TreeBuilder.OTHER);
858 public static final ElementName FEFLOOD = new ElementName("feflood", "feFlood",
859 // CPPONLY: NS_NewHTMLUnknownElement,
860 // CPPONLY: NS_NewSVGFEFloodElement,
861 TreeBuilder.OTHER);
862 public static final ElementName HEAD = new ElementName("head", "head",
863 // CPPONLY: NS_NewHTMLSharedElement,
864 // CPPONLY: NS_NewSVGUnknownElement,
865 TreeBuilder.HEAD | SPECIAL | OPTIONAL_END_TAG);
866 public static final ElementName LEGEND = new ElementName("legend", "legend",
867 // CPPONLY: NS_NewHTMLLegendElement,
868 // CPPONLY: NS_NewSVGUnknownElement,
869 TreeBuilder.OTHER);
870 public static final ElementName NOEMBED = new ElementName("noembed", "noembed",
871 // CPPONLY: NS_NewHTMLElement,
872 // CPPONLY: NS_NewSVGUnknownElement,
873 TreeBuilder.NOEMBED | SPECIAL);
874 public static final ElementName TD = new ElementName("td", "td",
875 // CPPONLY: NS_NewHTMLTableCellElement,
876 // CPPONLY: NS_NewSVGUnknownElement,
877 TreeBuilder.TD_OR_TH | SPECIAL | SCOPING | OPTIONAL_END_TAG);
878 public static final ElementName THEAD = new ElementName("thead", "thead",
879 // CPPONLY: NS_NewHTMLTableSectionElement,
880 // CPPONLY: NS_NewSVGUnknownElement,
881 TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
882 public static final ElementName ASIDE = new ElementName("aside", "aside",
883 // CPPONLY: NS_NewHTMLElement,
884 // CPPONLY: NS_NewSVGUnknownElement,
885 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
886 public static final ElementName ARTICLE = new ElementName("article", "article",
887 // CPPONLY: NS_NewHTMLElement,
888 // CPPONLY: NS_NewSVGUnknownElement,
889 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
890 public static final ElementName ANIMATE = new ElementName("animate", "animate",
891 // CPPONLY: NS_NewHTMLUnknownElement,
892 // CPPONLY: NS_NewSVGAnimateElement,
893 TreeBuilder.OTHER);
894 public static final ElementName BASE = new ElementName("base", "base",
895 // CPPONLY: NS_NewHTMLSharedElement,
896 // CPPONLY: NS_NewSVGUnknownElement,
897 TreeBuilder.BASE | SPECIAL);
898 public static final ElementName BLOCKQUOTE = new ElementName("blockquote", "blockquote",
899 // CPPONLY: NS_NewHTMLSharedElement,
900 // CPPONLY: NS_NewSVGUnknownElement,
901 TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
902 public static final ElementName CODE = new ElementName("code", "code",
903 // CPPONLY: NS_NewHTMLElement,
904 // CPPONLY: NS_NewSVGUnknownElement,
905 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
906 public static final ElementName CIRCLE = new ElementName("circle", "circle",
907 // CPPONLY: NS_NewHTMLUnknownElement,
908 // CPPONLY: NS_NewSVGCircleElement,
909 TreeBuilder.OTHER);
910 public static final ElementName CITE = new ElementName("cite", "cite",
911 // CPPONLY: NS_NewHTMLElement,
912 // CPPONLY: NS_NewSVGUnknownElement,
913 TreeBuilder.OTHER);
914 public static final ElementName ELLIPSE = new ElementName("ellipse", "ellipse",
915 // CPPONLY: NS_NewHTMLUnknownElement,
916 // CPPONLY: NS_NewSVGEllipseElement,
917 TreeBuilder.OTHER);
918 public static final ElementName FETURBULENCE = new ElementName("feturbulence", "feTurbulence",
919 // CPPONLY: NS_NewHTMLUnknownElement,
920 // CPPONLY: NS_NewSVGFETurbulenceElement,
921 TreeBuilder.OTHER);
922 public static final ElementName FEMERGENODE = new ElementName("femergenode", "feMergeNode",
923 // CPPONLY: NS_NewHTMLUnknownElement,
924 // CPPONLY: NS_NewSVGFEMergeNodeElement,
925 TreeBuilder.OTHER);
926 public static final ElementName FEIMAGE = new ElementName("feimage", "feImage",
927 // CPPONLY: NS_NewHTMLUnknownElement,
928 // CPPONLY: NS_NewSVGFEImageElement,
929 TreeBuilder.OTHER);
930 public static final ElementName FEMERGE = new ElementName("femerge", "feMerge",
931 // CPPONLY: NS_NewHTMLUnknownElement,
932 // CPPONLY: NS_NewSVGFEMergeElement,
933 TreeBuilder.OTHER);
934 public static final ElementName FETILE = new ElementName("fetile", "feTile",
935 // CPPONLY: NS_NewHTMLUnknownElement,
936 // CPPONLY: NS_NewSVGFETileElement,
937 TreeBuilder.OTHER);
938 public static final ElementName FRAME = new ElementName("frame", "frame",
939 // CPPONLY: NS_NewHTMLFrameElement,
940 // CPPONLY: NS_NewSVGUnknownElement,
941 TreeBuilder.FRAME | SPECIAL);
942 public static final ElementName FIGURE = new ElementName("figure", "figure",
943 // CPPONLY: NS_NewHTMLElement,
944 // CPPONLY: NS_NewSVGUnknownElement,
945 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
946 public static final ElementName FECOMPOSITE = new ElementName("fecomposite", "feComposite",
947 // CPPONLY: NS_NewHTMLUnknownElement,
948 // CPPONLY: NS_NewSVGFECompositeElement,
949 TreeBuilder.OTHER);
950 public static final ElementName IMAGE = new ElementName("image", "image",
951 // CPPONLY: NS_NewHTMLElement,
952 // CPPONLY: NS_NewSVGImageElement,
953 TreeBuilder.IMAGE);
954 public static final ElementName IFRAME = new ElementName("iframe", "iframe",
955 // CPPONLY: NS_NewHTMLIFrameElement,
956 // CPPONLY: NS_NewSVGUnknownElement,
957 TreeBuilder.IFRAME | SPECIAL);
958 public static final ElementName LINE = new ElementName("line", "line",
959 // CPPONLY: NS_NewHTMLUnknownElement,
960 // CPPONLY: NS_NewSVGLineElement,
961 TreeBuilder.OTHER);
962 public static final ElementName MARQUEE = new ElementName("marquee", "marquee",
963 // CPPONLY: NS_NewHTMLMarqueeElement,
964 // CPPONLY: NS_NewSVGUnknownElement,
965 TreeBuilder.MARQUEE_OR_APPLET | SPECIAL | SCOPING);
966 public static final ElementName POLYLINE = new ElementName("polyline", "polyline",
967 // CPPONLY: NS_NewHTMLUnknownElement,
968 // CPPONLY: NS_NewSVGPolylineElement,
969 TreeBuilder.OTHER);
970 public static final ElementName PICTURE = new ElementName("picture", "picture",
971 // CPPONLY: NS_NewHTMLPictureElement,
972 // CPPONLY: NS_NewSVGUnknownElement,
973 TreeBuilder.OTHER);
974 public static final ElementName SOURCE = new ElementName("source", "source",
975 // CPPONLY: NS_NewHTMLSourceElement,
976 // CPPONLY: NS_NewSVGUnknownElement,
977 TreeBuilder.PARAM_OR_SOURCE_OR_TRACK);
978 public static final ElementName STRIKE = new ElementName("strike", "strike",
979 // CPPONLY: NS_NewHTMLElement,
980 // CPPONLY: NS_NewSVGUnknownElement,
981 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
982 public static final ElementName STYLE = new ElementName("style", "style",
983 // CPPONLY: NS_NewHTMLStyleElement,
984 // CPPONLY: NS_NewSVGStyleElement,
985 TreeBuilder.STYLE | SPECIAL);
986 public static final ElementName TABLE = new ElementName("table", "table",
987 // CPPONLY: NS_NewHTMLTableElement,
988 // CPPONLY: NS_NewSVGUnknownElement,
989 TreeBuilder.TABLE | SPECIAL | FOSTER_PARENTING | SCOPING);
990 public static final ElementName TITLE = new ElementName("title", "title",
991 // CPPONLY: NS_NewHTMLTitleElement,
992 // CPPONLY: NS_NewSVGTitleElement,
993 TreeBuilder.TITLE | SPECIAL | SCOPING_AS_SVG);
994 public static final ElementName TIME = new ElementName("time", "time",
995 // CPPONLY: NS_NewHTMLTimeElement,
996 // CPPONLY: NS_NewSVGUnknownElement,
997 TreeBuilder.OTHER);
998 public static final ElementName TEMPLATE = new ElementName("template", "template",
999 // CPPONLY: NS_NewHTMLTemplateElement,
1000 // CPPONLY: NS_NewSVGUnknownElement,
1001 TreeBuilder.TEMPLATE | SPECIAL | SCOPING);
1002 public static final ElementName ALTGLYPHDEF = new ElementName("altglyphdef", "altGlyphDef",
1003 // CPPONLY: NS_NewHTMLUnknownElement,
1004 // CPPONLY: NS_NewSVGUnknownElement,
1005 TreeBuilder.OTHER);
1006 public static final ElementName GLYPHREF = new ElementName("glyphref", "glyphRef",
1007 // CPPONLY: NS_NewHTMLUnknownElement,
1008 // CPPONLY: NS_NewSVGUnknownElement,
1009 TreeBuilder.OTHER);
1010 public static final ElementName DIALOG = new ElementName("dialog", "dialog",
1011 // CPPONLY: NS_NewHTMLDialogElement,
1012 // CPPONLY: NS_NewSVGUnknownElement,
1013 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1014 public static final ElementName FEFUNCG = new ElementName("fefuncg", "feFuncG",
1015 // CPPONLY: NS_NewHTMLUnknownElement,
1016 // CPPONLY: NS_NewSVGFEFuncGElement,
1017 TreeBuilder.OTHER);
1018 public static final ElementName FEDIFFUSELIGHTING = new ElementName("fediffuselighting", "feDiffuseLighting",
1019 // CPPONLY: NS_NewHTMLUnknownElement,
1020 // CPPONLY: NS_NewSVGFEDiffuseLightingElement,
1021 TreeBuilder.OTHER);
1022 public static final ElementName FESPECULARLIGHTING = new ElementName("fespecularlighting", "feSpecularLighting",
1023 // CPPONLY: NS_NewHTMLUnknownElement,
1024 // CPPONLY: NS_NewSVGFESpecularLightingElement,
1025 TreeBuilder.OTHER);
1026 public static final ElementName LISTING = new ElementName("listing", "listing",
1027 // CPPONLY: NS_NewHTMLPreElement,
1028 // CPPONLY: NS_NewSVGUnknownElement,
1029 TreeBuilder.PRE_OR_LISTING | SPECIAL);
1030 public static final ElementName STRONG = new ElementName("strong", "strong",
1031 // CPPONLY: NS_NewHTMLElement,
1032 // CPPONLY: NS_NewSVGUnknownElement,
1033 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
1034 public static final ElementName ALTGLYPH = new ElementName("altglyph", "altGlyph",
1035 // CPPONLY: NS_NewHTMLUnknownElement,
1036 // CPPONLY: NS_NewSVGUnknownElement,
1037 TreeBuilder.OTHER);
1038 public static final ElementName CLIPPATH = new ElementName("clippath", "clipPath",
1039 // CPPONLY: NS_NewHTMLUnknownElement,
1040 // CPPONLY: NS_NewSVGClipPathElement,
1041 TreeBuilder.OTHER);
1042 public static final ElementName MGLYPH = new ElementName("mglyph", "mglyph",
1043 // CPPONLY: NS_NewHTMLUnknownElement,
1044 // CPPONLY: NS_NewSVGUnknownElement,
1045 TreeBuilder.MGLYPH_OR_MALIGNMARK);
1046 public static final ElementName MATH = new ElementName("math", "math",
1047 // CPPONLY: NS_NewHTMLUnknownElement,
1048 // CPPONLY: NS_NewSVGUnknownElement,
1049 TreeBuilder.MATH);
1050 public static final ElementName MPATH = new ElementName("mpath", "mpath",
1051 // CPPONLY: NS_NewHTMLUnknownElement,
1052 // CPPONLY: NS_NewSVGMPathElement,
1053 TreeBuilder.OTHER);
1054 public static final ElementName PATH = new ElementName("path", "path",
1055 // CPPONLY: NS_NewHTMLUnknownElement,
1056 // CPPONLY: NS_NewSVGPathElement,
1057 TreeBuilder.OTHER);
1058 public static final ElementName TH = new ElementName("th", "th",
1059 // CPPONLY: NS_NewHTMLTableCellElement,
1060 // CPPONLY: NS_NewSVGUnknownElement,
1061 TreeBuilder.TD_OR_TH | SPECIAL | SCOPING | OPTIONAL_END_TAG);
1062 public static final ElementName SWITCH = new ElementName("switch", "switch",
1063 // CPPONLY: NS_NewHTMLUnknownElement,
1064 // CPPONLY: NS_NewSVGSwitchElement,
1065 TreeBuilder.OTHER);
1066 public static final ElementName TEXTPATH = new ElementName("textpath", "textPath",
1067 // CPPONLY: NS_NewHTMLUnknownElement,
1068 // CPPONLY: NS_NewSVGTextPathElement,
1069 TreeBuilder.OTHER);
1070 public static final ElementName LI = new ElementName("li", "li",
1071 // CPPONLY: NS_NewHTMLLIElement,
1072 // CPPONLY: NS_NewSVGUnknownElement,
1073 TreeBuilder.LI | SPECIAL | OPTIONAL_END_TAG);
1074 public static final ElementName MI = new ElementName("mi", "mi",
1075 // CPPONLY: NS_NewHTMLUnknownElement,
1076 // CPPONLY: NS_NewSVGUnknownElement,
1077 TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
1078 public static final ElementName LINK = new ElementName("link", "link",
1079 // CPPONLY: NS_NewHTMLLinkElement,
1080 // CPPONLY: NS_NewSVGUnknownElement,
1081 TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
1082 public static final ElementName MARK = new ElementName("mark", "mark",
1083 // CPPONLY: NS_NewHTMLElement,
1084 // CPPONLY: NS_NewSVGUnknownElement,
1085 TreeBuilder.OTHER);
1086 public static final ElementName MALIGNMARK = new ElementName("malignmark", "malignmark",
1087 // CPPONLY: NS_NewHTMLUnknownElement,
1088 // CPPONLY: NS_NewSVGUnknownElement,
1089 TreeBuilder.MGLYPH_OR_MALIGNMARK);
1090 public static final ElementName MASK = new ElementName("mask", "mask",
1091 // CPPONLY: NS_NewHTMLUnknownElement,
1092 // CPPONLY: NS_NewSVGMaskElement,
1093 TreeBuilder.OTHER);
1094 public static final ElementName TRACK = new ElementName("track", "track",
1095 // CPPONLY: NS_NewHTMLTrackElement,
1096 // CPPONLY: NS_NewSVGUnknownElement,
1097 TreeBuilder.PARAM_OR_SOURCE_OR_TRACK | SPECIAL);
1098 public static final ElementName DL = new ElementName("dl", "dl",
1099 // CPPONLY: NS_NewHTMLSharedListElement,
1100 // CPPONLY: NS_NewSVGUnknownElement,
1101 TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
1102 public static final ElementName HTML = new ElementName("html", "html",
1103 // CPPONLY: NS_NewHTMLSharedElement,
1104 // CPPONLY: NS_NewSVGUnknownElement,
1105 TreeBuilder.HTML | SPECIAL | SCOPING | OPTIONAL_END_TAG);
1106 public static final ElementName OL = new ElementName("ol", "ol",
1107 // CPPONLY: NS_NewHTMLSharedListElement,
1108 // CPPONLY: NS_NewSVGUnknownElement,
1109 TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
1110 public static final ElementName LABEL = new ElementName("label", "label",
1111 // CPPONLY: NS_NewHTMLLabelElement,
1112 // CPPONLY: NS_NewSVGUnknownElement,
1113 TreeBuilder.OTHER);
1114 public static final ElementName UL = new ElementName("ul", "ul",
1115 // CPPONLY: NS_NewHTMLSharedListElement,
1116 // CPPONLY: NS_NewSVGUnknownElement,
1117 TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
1118 public static final ElementName SMALL = new ElementName("small", "small",
1119 // CPPONLY: NS_NewHTMLElement,
1120 // CPPONLY: NS_NewSVGUnknownElement,
1121 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
1122 public static final ElementName SYMBOL = new ElementName("symbol", "symbol",
1123 // CPPONLY: NS_NewHTMLUnknownElement,
1124 // CPPONLY: NS_NewSVGSymbolElement,
1125 TreeBuilder.OTHER);
1126 public static final ElementName ALTGLYPHITEM = new ElementName("altglyphitem", "altGlyphItem",
1127 // CPPONLY: NS_NewHTMLUnknownElement,
1128 // CPPONLY: NS_NewSVGUnknownElement,
1129 TreeBuilder.OTHER);
1130 public static final ElementName ANIMATETRANSFORM = new ElementName("animatetransform", "animateTransform",
1131 // CPPONLY: NS_NewHTMLUnknownElement,
1132 // CPPONLY: NS_NewSVGAnimateTransformElement,
1133 TreeBuilder.OTHER);
1134 public static final ElementName ACRONYM = new ElementName("acronym", "acronym",
1135 // CPPONLY: NS_NewHTMLElement,
1136 // CPPONLY: NS_NewSVGUnknownElement,
1137 TreeBuilder.OTHER);
1138 public static final ElementName EM = new ElementName("em", "em",
1139 // CPPONLY: NS_NewHTMLElement,
1140 // CPPONLY: NS_NewSVGUnknownElement,
1141 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
1142 public static final ElementName FORM = new ElementName("form", "form",
1143 // CPPONLY: NS_NewHTMLFormElement,
1144 // CPPONLY: NS_NewSVGUnknownElement,
1145 TreeBuilder.FORM | SPECIAL);
1146 public static final ElementName MENUITEM = new ElementName("menuitem", "menuitem",
1147 // CPPONLY: NS_NewHTMLMenuItemElement,
1148 // CPPONLY: NS_NewSVGUnknownElement,
1149 TreeBuilder.MENUITEM);
1150 public static final ElementName PARAM = new ElementName("param", "param",
1151 // CPPONLY: NS_NewHTMLSharedElement,
1152 // CPPONLY: NS_NewSVGUnknownElement,
1153 TreeBuilder.PARAM_OR_SOURCE_OR_TRACK | SPECIAL);
1154 public static final ElementName ANIMATEMOTION = new ElementName("animatemotion", "animateMotion",
1155 // CPPONLY: NS_NewHTMLUnknownElement,
1156 // CPPONLY: NS_NewSVGAnimateMotionElement,
1157 TreeBuilder.OTHER);
1158 public static final ElementName BUTTON = new ElementName("button", "button",
1159 // CPPONLY: NS_NewHTMLButtonElement,
1160 // CPPONLY: NS_NewSVGUnknownElement,
1161 TreeBuilder.BUTTON | SPECIAL);
1162 public static final ElementName CAPTION = new ElementName("caption", "caption",
1163 // CPPONLY: NS_NewHTMLTableCaptionElement,
1164 // CPPONLY: NS_NewSVGUnknownElement,
1165 TreeBuilder.CAPTION | SPECIAL | SCOPING);
1166 public static final ElementName FIGCAPTION = new ElementName("figcaption", "figcaption",
1167 // CPPONLY: NS_NewHTMLElement,
1168 // CPPONLY: NS_NewSVGUnknownElement,
1169 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1170 public static final ElementName MN = new ElementName("mn", "mn",
1171 // CPPONLY: NS_NewHTMLUnknownElement,
1172 // CPPONLY: NS_NewSVGUnknownElement,
1173 TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
1174 public static final ElementName KEYGEN = new ElementName("keygen", "keygen",
1175 // CPPONLY: NS_NewHTMLElement,
1176 // CPPONLY: NS_NewSVGUnknownElement,
1177 TreeBuilder.KEYGEN | SPECIAL);
1178 public static final ElementName MAIN = new ElementName("main", "main",
1179 // CPPONLY: NS_NewHTMLElement,
1180 // CPPONLY: NS_NewSVGUnknownElement,
1181 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1182 public static final ElementName OPTION = new ElementName("option", "option",
1183 // CPPONLY: NS_NewHTMLOptionElement,
1184 // CPPONLY: NS_NewSVGUnknownElement,
1185 TreeBuilder.OPTION | OPTIONAL_END_TAG);
1186 public static final ElementName POLYGON = new ElementName("polygon", "polygon",
1187 // CPPONLY: NS_NewHTMLUnknownElement,
1188 // CPPONLY: NS_NewSVGPolygonElement,
1189 TreeBuilder.OTHER);
1190 public static final ElementName PATTERN = new ElementName("pattern", "pattern",
1191 // CPPONLY: NS_NewHTMLUnknownElement,
1192 // CPPONLY: NS_NewSVGPatternElement,
1193 TreeBuilder.OTHER);
1194 public static final ElementName SPAN = new ElementName("span", "span",
1195 // CPPONLY: NS_NewHTMLSpanElement,
1196 // CPPONLY: NS_NewSVGUnknownElement,
1197 TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
1198 public static final ElementName SECTION = new ElementName("section", "section",
1199 // CPPONLY: NS_NewHTMLElement,
1200 // CPPONLY: NS_NewSVGUnknownElement,
1201 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1202 public static final ElementName TSPAN = new ElementName("tspan", "tspan",
1203 // CPPONLY: NS_NewHTMLUnknownElement,
1204 // CPPONLY: NS_NewSVGTSpanElement,
1205 TreeBuilder.OTHER);
1206 public static final ElementName AUDIO = new ElementName("audio", "audio",
1207 // CPPONLY: NS_NewHTMLAudioElement,
1208 // CPPONLY: NS_NewSVGUnknownElement,
1209 TreeBuilder.OTHER);
1210 public static final ElementName MO = new ElementName("mo", "mo",
1211 // CPPONLY: NS_NewHTMLUnknownElement,
1212 // CPPONLY: NS_NewSVGUnknownElement,
1213 TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
1214 public static final ElementName VIDEO = new ElementName("video", "video",
1215 // CPPONLY: NS_NewHTMLVideoElement,
1216 // CPPONLY: NS_NewSVGUnknownElement,
1217 TreeBuilder.OTHER);
1218 public static final ElementName COLGROUP = new ElementName("colgroup", "colgroup",
1219 // CPPONLY: NS_NewHTMLTableColElement,
1220 // CPPONLY: NS_NewSVGUnknownElement,
1221 TreeBuilder.COLGROUP | SPECIAL | OPTIONAL_END_TAG);
1222 public static final ElementName FEDISPLACEMENTMAP = new ElementName("fedisplacementmap", "feDisplacementMap",
1223 // CPPONLY: NS_NewHTMLUnknownElement,
1224 // CPPONLY: NS_NewSVGFEDisplacementMapElement,
1225 TreeBuilder.OTHER);
1226 public static final ElementName HGROUP = new ElementName("hgroup", "hgroup",
1227 // CPPONLY: NS_NewHTMLElement,
1228 // CPPONLY: NS_NewSVGUnknownElement,
1229 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1230 public static final ElementName RP = new ElementName("rp", "rp",
1231 // CPPONLY: NS_NewHTMLElement,
1232 // CPPONLY: NS_NewSVGUnknownElement,
1233 TreeBuilder.RT_OR_RP | OPTIONAL_END_TAG);
1234 public static final ElementName OPTGROUP = new ElementName("optgroup", "optgroup",
1235 // CPPONLY: NS_NewHTMLOptGroupElement,
1236 // CPPONLY: NS_NewSVGUnknownElement,
1237 TreeBuilder.OPTGROUP | OPTIONAL_END_TAG);
1238 public static final ElementName SAMP = new ElementName("samp", "samp",
1239 // CPPONLY: NS_NewHTMLElement,
1240 // CPPONLY: NS_NewSVGUnknownElement,
1241 TreeBuilder.OTHER);
1242 public static final ElementName STOP = new ElementName("stop", "stop",
1243 // CPPONLY: NS_NewHTMLUnknownElement,
1244 // CPPONLY: NS_NewSVGStopElement,
1245 TreeBuilder.OTHER);
1246 public static final ElementName BR = new ElementName("br", "br",
1247 // CPPONLY: NS_NewHTMLBRElement,
1248 // CPPONLY: NS_NewSVGUnknownElement,
1249 TreeBuilder.BR | SPECIAL);
1250 public static final ElementName ABBR = new ElementName("abbr", "abbr",
1251 // CPPONLY: NS_NewHTMLElement,
1252 // CPPONLY: NS_NewSVGUnknownElement,
1253 TreeBuilder.OTHER);
1254 public static final ElementName ANIMATECOLOR = new ElementName("animatecolor", "animateColor",
1255 // CPPONLY: NS_NewHTMLUnknownElement,
1256 // CPPONLY: NS_NewSVGUnknownElement,
1257 TreeBuilder.OTHER);
1258 public static final ElementName CENTER = new ElementName("center", "center",
1259 // CPPONLY: NS_NewHTMLElement,
1260 // CPPONLY: NS_NewSVGUnknownElement,
1261 TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
1262 public static final ElementName HR = new ElementName("hr", "hr",
1263 // CPPONLY: NS_NewHTMLHRElement,
1264 // CPPONLY: NS_NewSVGUnknownElement,
1265 TreeBuilder.HR | SPECIAL);
1266 public static final ElementName FEFUNCR = new ElementName("fefuncr", "feFuncR",
1267 // CPPONLY: NS_NewHTMLUnknownElement,
1268 // CPPONLY: NS_NewSVGFEFuncRElement,
1269 TreeBuilder.OTHER);
1270 public static final ElementName FECOMPONENTTRANSFER = new ElementName("fecomponenttransfer", "feComponentTransfer",
1271 // CPPONLY: NS_NewHTMLUnknownElement,
1272 // CPPONLY: NS_NewSVGFEComponentTransferElement,
1273 TreeBuilder.OTHER);
1274 public static final ElementName FILTER = new ElementName("filter", "filter",
1275 // CPPONLY: NS_NewHTMLUnknownElement,
1276 // CPPONLY: NS_NewSVGFilterElement,
1277 TreeBuilder.OTHER);
1278 public static final ElementName FOOTER = new ElementName("footer", "footer",
1279 // CPPONLY: NS_NewHTMLElement,
1280 // CPPONLY: NS_NewSVGUnknownElement,
1281 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1282 public static final ElementName FEGAUSSIANBLUR = new ElementName("fegaussianblur", "feGaussianBlur",
1283 // CPPONLY: NS_NewHTMLUnknownElement,
1284 // CPPONLY: NS_NewSVGFEGaussianBlurElement,
1285 TreeBuilder.OTHER);
1286 public static final ElementName HEADER = new ElementName("header", "header",
1287 // CPPONLY: NS_NewHTMLElement,
1288 // CPPONLY: NS_NewSVGUnknownElement,
1289 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1290 public static final ElementName MARKER = new ElementName("marker", "marker",
1291 // CPPONLY: NS_NewHTMLUnknownElement,
1292 // CPPONLY: NS_NewSVGMarkerElement,
1293 TreeBuilder.OTHER);
1294 public static final ElementName METER = new ElementName("meter", "meter",
1295 // CPPONLY: NS_NewHTMLMeterElement,
1296 // CPPONLY: NS_NewSVGUnknownElement,
1297 TreeBuilder.OTHER);
1298 public static final ElementName NOBR = new ElementName("nobr", "nobr",
1299 // CPPONLY: NS_NewHTMLElement,
1300 // CPPONLY: NS_NewSVGUnknownElement,
1301 TreeBuilder.NOBR);
1302 public static final ElementName TR = new ElementName("tr", "tr",
1303 // CPPONLY: NS_NewHTMLTableRowElement,
1304 // CPPONLY: NS_NewSVGUnknownElement,
1305 TreeBuilder.TR | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
1306 public static final ElementName ADDRESS = new ElementName("address", "address",
1307 // CPPONLY: NS_NewHTMLElement,
1308 // CPPONLY: NS_NewSVGUnknownElement,
1309 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1310 public static final ElementName CANVAS = new ElementName("canvas", "canvas",
1311 // CPPONLY: NS_NewHTMLCanvasElement,
1312 // CPPONLY: NS_NewSVGUnknownElement,
1313 TreeBuilder.OTHER);
1314 public static final ElementName DEFS = new ElementName("defs", "defs",
1315 // CPPONLY: NS_NewHTMLUnknownElement,
1316 // CPPONLY: NS_NewSVGDefsElement,
1317 TreeBuilder.OTHER);
1318 public static final ElementName DETAILS = new ElementName("details", "details",
1319 // CPPONLY: NS_NewHTMLDetailsElement,
1320 // CPPONLY: NS_NewSVGUnknownElement,
1321 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1322 public static final ElementName MS = new ElementName("ms", "ms",
1323 // CPPONLY: NS_NewHTMLUnknownElement,
1324 // CPPONLY: NS_NewSVGUnknownElement,
1325 TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
1326 public static final ElementName NOFRAMES = new ElementName("noframes", "noframes",
1327 // CPPONLY: NS_NewHTMLElement,
1328 // CPPONLY: NS_NewSVGUnknownElement,
1329 TreeBuilder.NOFRAMES | SPECIAL);
1330 public static final ElementName PROGRESS = new ElementName("progress", "progress",
1331 // CPPONLY: NS_NewHTMLProgressElement,
1332 // CPPONLY: NS_NewSVGUnknownElement,
1333 TreeBuilder.OTHER);
1334 public static final ElementName DT = new ElementName("dt", "dt",
1335 // CPPONLY: NS_NewHTMLElement,
1336 // CPPONLY: NS_NewSVGUnknownElement,
1337 TreeBuilder.DD_OR_DT | SPECIAL | OPTIONAL_END_TAG);
1338 public static final ElementName APPLET = new ElementName("applet", "applet",
1339 // CPPONLY: NS_NewHTMLUnknownElement,
1340 // CPPONLY: NS_NewSVGUnknownElement,
1341 TreeBuilder.MARQUEE_OR_APPLET | SPECIAL | SCOPING);
1342 public static final ElementName BASEFONT = new ElementName("basefont", "basefont",
1343 // CPPONLY: NS_NewHTMLElement,
1344 // CPPONLY: NS_NewSVGUnknownElement,
1345 TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
1346 public static final ElementName DATALIST = new ElementName("datalist", "datalist",
1347 // CPPONLY: NS_NewHTMLDataListElement,
1348 // CPPONLY: NS_NewSVGUnknownElement,
1349 TreeBuilder.OTHER);
1350 public static final ElementName FOREIGNOBJECT = new ElementName("foreignobject", "foreignObject",
1351 // CPPONLY: NS_NewHTMLUnknownElement,
1352 // CPPONLY: NS_NewSVGForeignObjectElement,
1353 TreeBuilder.FOREIGNOBJECT_OR_DESC | SCOPING_AS_SVG);
1354 public static final ElementName FIELDSET = new ElementName("fieldset", "fieldset",
1355 // CPPONLY: NS_NewHTMLFieldSetElement,
1356 // CPPONLY: NS_NewSVGUnknownElement,
1357 TreeBuilder.FIELDSET | SPECIAL);
1358 public static final ElementName FRAMESET = new ElementName("frameset", "frameset",
1359 // CPPONLY: NS_NewHTMLFrameSetElement,
1360 // CPPONLY: NS_NewSVGUnknownElement,
1361 TreeBuilder.FRAMESET | SPECIAL);
1362 public static final ElementName FEOFFSET = new ElementName("feoffset", "feOffset",
1363 // CPPONLY: NS_NewHTMLUnknownElement,
1364 // CPPONLY: NS_NewSVGFEOffsetElement,
1365 TreeBuilder.OTHER);
1366 public static final ElementName FESPOTLIGHT = new ElementName("fespotlight", "feSpotLight",
1367 // CPPONLY: NS_NewHTMLUnknownElement,
1368 // CPPONLY: NS_NewSVGFESpotLightElement,
1369 TreeBuilder.OTHER);
1370 public static final ElementName FEPOINTLIGHT = new ElementName("fepointlight", "fePointLight",
1371 // CPPONLY: NS_NewHTMLUnknownElement,
1372 // CPPONLY: NS_NewSVGFEPointLightElement,
1373 TreeBuilder.OTHER);
1374 public static final ElementName FEDISTANTLIGHT = new ElementName("fedistantlight", "feDistantLight",
1375 // CPPONLY: NS_NewHTMLUnknownElement,
1376 // CPPONLY: NS_NewSVGFEDistantLightElement,
1377 TreeBuilder.OTHER);
1378 public static final ElementName FONT = new ElementName("font", "font",
1379 // CPPONLY: NS_NewHTMLFontElement,
1380 // CPPONLY: NS_NewSVGUnknownElement,
1381 TreeBuilder.FONT);
1382 public static final ElementName INPUT = new ElementName("input", "input",
1383 // CPPONLY: NS_NewHTMLInputElement,
1384 // CPPONLY: NS_NewSVGUnknownElement,
1385 TreeBuilder.INPUT | SPECIAL);
1386 public static final ElementName LINEARGRADIENT = new ElementName("lineargradient", "linearGradient",
1387 // CPPONLY: NS_NewHTMLUnknownElement,
1388 // CPPONLY: NS_NewSVGLinearGradientElement,
1389 TreeBuilder.OTHER);
1390 public static final ElementName MTEXT = new ElementName("mtext", "mtext",
1391 // CPPONLY: NS_NewHTMLUnknownElement,
1392 // CPPONLY: NS_NewSVGUnknownElement,
1393 TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
1394 public static final ElementName NOSCRIPT = new ElementName("noscript", "noscript",
1395 // CPPONLY: NS_NewHTMLElement,
1396 // CPPONLY: NS_NewSVGUnknownElement,
1397 TreeBuilder.NOSCRIPT | SPECIAL);
1398 public static final ElementName RT = new ElementName("rt", "rt",
1399 // CPPONLY: NS_NewHTMLElement,
1400 // CPPONLY: NS_NewSVGUnknownElement,
1401 TreeBuilder.RT_OR_RP | OPTIONAL_END_TAG);
1402 public static final ElementName OBJECT = new ElementName("object", "object",
1403 // CPPONLY: NS_NewHTMLObjectElement,
1404 // CPPONLY: NS_NewSVGUnknownElement,
1405 TreeBuilder.OBJECT | SPECIAL | SCOPING);
1406 public static final ElementName OUTPUT = new ElementName("output", "output",
1407 // CPPONLY: NS_NewHTMLOutputElement,
1408 // CPPONLY: NS_NewSVGUnknownElement,
1409 TreeBuilder.OUTPUT);
1410 public static final ElementName PLAINTEXT = new ElementName("plaintext", "plaintext",
1411 // CPPONLY: NS_NewHTMLElement,
1412 // CPPONLY: NS_NewSVGUnknownElement,
1413 TreeBuilder.PLAINTEXT | SPECIAL);
1414 public static final ElementName TT = new ElementName("tt", "tt",
1415 // CPPONLY: NS_NewHTMLElement,
1416 // CPPONLY: NS_NewSVGUnknownElement,
1417 TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
1418 public static final ElementName RECT = new ElementName("rect", "rect",
1419 // CPPONLY: NS_NewHTMLUnknownElement,
1420 // CPPONLY: NS_NewSVGRectElement,
1421 TreeBuilder.OTHER);
1422 public static final ElementName RADIALGRADIENT = new ElementName("radialgradient", "radialGradient",
1423 // CPPONLY: NS_NewHTMLUnknownElement,
1424 // CPPONLY: NS_NewSVGRadialGradientElement,
1425 TreeBuilder.OTHER);
1426 public static final ElementName SELECT = new ElementName("select", "select",
1427 // CPPONLY: NS_NewHTMLSelectElement,
1428 // CPPONLY: NS_NewSVGUnknownElement,
1429 TreeBuilder.SELECT | SPECIAL);
1430 public static final ElementName SLOT = new ElementName("slot", "slot",
1431 // CPPONLY: NS_NewHTMLSlotElement,
1432 // CPPONLY: NS_NewSVGUnknownElement,
1433 TreeBuilder.OTHER);
1434 public static final ElementName SCRIPT = new ElementName("script", "script",
1435 // CPPONLY: NS_NewHTMLScriptElement,
1436 // CPPONLY: NS_NewSVGScriptElement,
1437 TreeBuilder.SCRIPT | SPECIAL);
1438 public static final ElementName TFOOT = new ElementName("tfoot", "tfoot",
1439 // CPPONLY: NS_NewHTMLTableSectionElement,
1440 // CPPONLY: NS_NewSVGUnknownElement,
1441 TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
1442 public static final ElementName TEXT = new ElementName("text", "text",
1443 // CPPONLY: NS_NewHTMLUnknownElement,
1444 // CPPONLY: NS_NewSVGTextElement,
1445 TreeBuilder.OTHER);
1446 public static final ElementName MENU = new ElementName("menu", "menu",
1447 // CPPONLY: NS_NewHTMLMenuElement,
1448 // CPPONLY: NS_NewSVGUnknownElement,
1449 TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL);
1450 public static final ElementName FEDROPSHADOW = new ElementName("fedropshadow", "feDropShadow",
1451 // CPPONLY: NS_NewHTMLUnknownElement,
1452 // CPPONLY: NS_NewSVGFEDropShadowElement,
1453 TreeBuilder.OTHER);
1454 public static final ElementName VIEW = new ElementName("view", "view",
1455 // CPPONLY: NS_NewHTMLUnknownElement,
1456 // CPPONLY: NS_NewSVGViewElement,
1457 TreeBuilder.OTHER);
1458 public static final ElementName FECOLORMATRIX = new ElementName("fecolormatrix", "feColorMatrix",
1459 // CPPONLY: NS_NewHTMLUnknownElement,
1460 // CPPONLY: NS_NewSVGFEColorMatrixElement,
1461 TreeBuilder.OTHER);
1462 public static final ElementName FECONVOLVEMATRIX = new ElementName("feconvolvematrix", "feConvolveMatrix",
1463 // CPPONLY: NS_NewHTMLUnknownElement,
1464 // CPPONLY: NS_NewSVGFEConvolveMatrixElement,
1465 TreeBuilder.OTHER);
1466 public static final ElementName BODY = new ElementName("body", "body",
1467 // CPPONLY: NS_NewHTMLBodyElement,
1468 // CPPONLY: NS_NewSVGUnknownElement,
1469 TreeBuilder.BODY | SPECIAL | OPTIONAL_END_TAG);
1470 public static final ElementName FEMORPHOLOGY = new ElementName("femorphology", "feMorphology",
1471 // CPPONLY: NS_NewHTMLUnknownElement,
1472 // CPPONLY: NS_NewSVGFEMorphologyElement,
1473 TreeBuilder.OTHER);
1474 public static final ElementName RUBY = new ElementName("ruby", "ruby",
1475 // CPPONLY: NS_NewHTMLElement,
1476 // CPPONLY: NS_NewSVGUnknownElement,
1477 TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
1478 public static final ElementName SUMMARY = new ElementName("summary", "summary",
1479 // CPPONLY: NS_NewHTMLSummaryElement,
1480 // CPPONLY: NS_NewSVGUnknownElement,
1481 TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
1482 public static final ElementName TBODY = new ElementName("tbody", "tbody",
1483 // CPPONLY: NS_NewHTMLTableSectionElement,
1484 // CPPONLY: NS_NewSVGUnknownElement,
1485 TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
1486 private final static @NoLength ElementName[] ELEMENT_NAMES = {
1487 FIGCAPTION,
1488 CITE,
1489 FRAMESET,
1490 H1,
1491 CLIPPATH,
1492 METER,
1493 RADIALGRADIENT,
1494 B,
1495 BGSOUND,
1496 SOURCE,
1497 HTML,
1498 RP,
1499 NOFRAMES,
1500 MTEXT,
1501 VIEW,
1502 DIV,
1503 G,
1504 FEFUNCA,
1505 THEAD,
1506 FIGURE,
1507 GLYPHREF,
1508 LI,
1509 ACRONYM,
1510 SECTION,
1511 HR,
1512 CANVAS,
1513 BASEFONT,
1514 FEDISTANTLIGHT,
1515 OUTPUT,
1516 TFOOT,
1517 FEMORPHOLOGY,
1518 COL,
1519 MAP,
1520 SUP,
1521 P,
1522 H5,
1523 FEFUNCB,
1524 HEAD,
1525 BASE,
1526 FEIMAGE,
1527 LINE,
1528 TITLE,
1529 FESPECULARLIGHTING,
1530 PATH,
1531 MALIGNMARK,
1532 SMALL,
1533 PARAM,
1534 OPTION,
1535 VIDEO,
1536 BR,
1537 FOOTER,
1538 TR,
1539 DETAILS,
1540 DT,
1541 FOREIGNOBJECT,
1542 FESPOTLIGHT,
1543 INPUT,
1544 RT,
1545 TT,
1546 SLOT,
1547 MENU,
1548 FECONVOLVEMATRIX,
1549 SUMMARY,
1550 BDI,
1551 DFN,
1552 INS,
1553 PRE,
1554 SUB,
1555 USE,
1556 XMP,
1557 S,
1558 H3,
1559 AREA,
1560 META,
1561 DESC,
1562 FEBLEND,
1563 NOEMBED,
1564 ARTICLE,
1565 CODE,
1566 FETURBULENCE,
1567 FETILE,
1568 IMAGE,
1569 POLYLINE,
1570 STYLE,
1571 TEMPLATE,
1572 FEFUNCG,
1573 STRONG,
1574 MATH,
1575 SWITCH,
1576 LINK,
1577 TRACK,
1578 LABEL,
1579 ALTGLYPHITEM,
1580 FORM,
1581 BUTTON,
1582 KEYGEN,
1583 PATTERN,
1584 AUDIO,
1585 FEDISPLACEMENTMAP,
1586 SAMP,
1587 ANIMATECOLOR,
1588 FECOMPONENTTRANSFER,
1589 HEADER,
1590 NOBR,
1591 ADDRESS,
1592 DEFS,
1593 MS,
1594 PROGRESS,
1595 APPLET,
1596 DATALIST,
1597 FIELDSET,
1598 FEOFFSET,
1599 FEPOINTLIGHT,
1600 FONT,
1601 LINEARGRADIENT,
1602 NOSCRIPT,
1603 OBJECT,
1604 PLAINTEXT,
1605 RECT,
1606 SELECT,
1607 SCRIPT,
1608 TEXT,
1609 FEDROPSHADOW,
1610 FECOLORMATRIX,
1611 BODY,
1612 RUBY,
1613 TBODY,
1614 BIG,
1615 BDO,
1616 DEL,
1617 DIR,
1618 IMG,
1619 KBD,
1620 NAV,
1621 A,
1622 RTC,
1623 SVG,
1624 SET,
1625 VAR,
1626 WBR,
1627 I,
1628 Q,
1629 U,
1630 H2,
1631 H4,
1632 H6,
1633 DATA,
1634 METADATA,
1635 TEXTAREA,
1636 RB,
1637 DD,
1638 EMBED,
1639 FEFLOOD,
1640 LEGEND,
1641 TD,
1642 ASIDE,
1643 ANIMATE,
1644 BLOCKQUOTE,
1645 CIRCLE,
1646 ELLIPSE,
1647 FEMERGENODE,
1648 FEMERGE,
1649 FRAME,
1650 FECOMPOSITE,
1651 IFRAME,
1652 MARQUEE,
1653 PICTURE,
1654 STRIKE,
1655 TABLE,
1656 TIME,
1657 ALTGLYPHDEF,
1658 DIALOG,
1659 FEDIFFUSELIGHTING,
1660 LISTING,
1661 ALTGLYPH,
1662 MGLYPH,
1663 MPATH,
1664 TH,
1665 TEXTPATH,
1666 MI,
1667 MARK,
1668 MASK,
1669 DL,
1670 OL,
1671 UL,
1672 SYMBOL,
1673 ANIMATETRANSFORM,
1674 EM,
1675 MENUITEM,
1676 ANIMATEMOTION,
1677 CAPTION,
1678 MN,
1679 MAIN,
1680 POLYGON,
1681 SPAN,
1682 TSPAN,
1683 MO,
1684 COLGROUP,
1685 HGROUP,
1686 OPTGROUP,
1687 STOP,
1688 ABBR,
1689 CENTER,
1690 FEFUNCR,
1691 FILTER,
1692 FEGAUSSIANBLUR,
1693 MARKER,
1694 };
1695 private final static int[] ELEMENT_HASHES = {
1696 1900845386,
1697 1748359220,
1698 2001349720,
1699 876609538,
1700 1798686984,
1701 1971465813,
1702 2007781534,
1703 59768833,
1704 1730965751,
1705 1756474198,
1706 1868312196,
1707 1938817026,
1708 1988763672,
1709 2005324101,
1710 2060065124,
1711 52490899,
1712 62390273,
1713 1682547543,
1714 1740181637,
1715 1749905526,
1716 1766992520,
1717 1818230786,
1718 1881613047,
1719 1907661127,
1720 1967128578,
1721 1982935782,
1722 1999397992,
1723 2001392798,
1724 2006329158,
1725 2008851557,
1726 2085266636,
1727 51961587,
1728 57206291,
1729 60352339,
1730 67108865,
1731 943718402,
1732 1699324759,
1733 1733890180,
1734 1747814436,
1735 1749715159,
1736 1752979652,
1737 1757146773,
1738 1783388498,
1739 1805502724,
1740 1854228698,
1741 1874053333,
1742 1889085973,
1743 1905563974,
1744 1925844629,
1745 1963982850,
1746 1967795958,
1747 1973420034,
1748 1983633431,
1749 1998585858,
1750 2001309869,
1751 2001392795,
1752 2003183333,
1753 2005925890,
1754 2006974466,
1755 2008325940,
1756 2021937364,
1757 2068523856,
1758 2092255447,
1759 51435587,
1760 52486755,
1761 55110883,
1762 58773795,
1763 60345171,
1764 61395251,
1765 62973651,
1766 68681729,
1767 910163970,
1768 1679960596,
1769 1686491348,
1770 1715310660,
1771 1733054663,
1772 1737099991,
1773 1747176599,
1774 1748100148,
1775 1749656156,
1776 1749801286,
1777 1751288021,
1778 1755076808,
1779 1756625221,
1780 1757268168,
1781 1783210839,
1782 1790207270,
1783 1803929812,
1784 1806806678,
1785 1853642948,
1786 1857653029,
1787 1870268949,
1788 1881288348,
1789 1884120164,
1790 1898753862,
1791 1903302038,
1792 1906135367,
1793 1914900309,
1794 1934172497,
1795 1941178676,
1796 1965334268,
1797 1967788867,
1798 1968836118,
1799 1971938532,
1800 1982173479,
1801 1983533124,
1802 1986527234,
1803 1990037800,
1804 1998724870,
1805 2000525512,
1806 2001349704,
1807 2001349736,
1808 2001392796,
1809 2001495140,
1810 2004635806,
1811 2005719336,
1812 2006028454,
1813 2006896969,
1814 2007601444,
1815 2008125638,
1816 2008340774,
1817 2008994116,
1818 2051837468,
1819 2068523853,
1820 2083120164,
1821 2091479332,
1822 2092557349,
1823 51434643,
1824 51438659,
1825 52485715,
1826 52488851,
1827 55104723,
1828 56151587,
1829 57733651,
1830 59244545,
1831 59821379,
1832 60347747,
1833 60354131,
1834 61925907,
1835 62450211,
1836 63438849,
1837 67633153,
1838 69730305,
1839 893386754,
1840 926941186,
1841 960495618,
1842 1681770564,
1843 1686489160,
1844 1689922072,
1845 1703936002,
1846 1730150402,
1847 1732381397,
1848 1733076167,
1849 1736200310,
1850 1738539010,
1851 1747048757,
1852 1747306711,
1853 1747838298,
1854 1748225318,
1855 1749395095,
1856 1749673195,
1857 1749723735,
1858 1749813541,
1859 1749932347,
1860 1751386406,
1861 1753362711,
1862 1755148615,
1863 1756600614,
1864 1757137429,
1865 1757157700,
1866 1763839627,
1867 1782357526,
1868 1783388497,
1869 1786534215,
1870 1797585096,
1871 1803876550,
1872 1803929861,
1873 1805647874,
1874 1807599880,
1875 1818755074,
1876 1854228692,
1877 1854245076,
1878 1864368130,
1879 1870135298,
1880 1873281026,
1881 1874102998,
1882 1881498736,
1883 1881669634,
1884 1887579800,
1885 1898223949,
1886 1899272519,
1887 1902641154,
1888 1904412884,
1889 1906087319,
1890 1907435316,
1891 1907959605,
1892 1919418370,
1893 1932928296,
1894 1935549734,
1895 1939219752,
1896 1941221172,
1897 1965115924,
1898 1966223078,
1899 1967760215,
1900 1967795910,
1901 1968053806,
1902 1971461414,
1903 };
1904 }
1905