Bug 643395 - Update the HTML parser Java code to the state in the htmlparser repo (NPOTB). rs=jonas.
authorHenri Sivonen <hsivonen@iki.fi>
Fri, 08 Apr 2011 09:07:27 +0300
changeset 67660 bba58040498cc6042d8efbf76900ab2ea6774e81
parent 67659 258a0f209565896cbb47b12757544b0121ebdf1f
child 67661 36406d349301a3057e86e9d13f3c1012d070420a
push idunknown
push userunknown
push dateunknown
reviewersjonas
bugs643395
milestone2.2a1pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 643395 - Update the HTML parser Java code to the state in the htmlparser repo (NPOTB). rs=jonas.
parser/html/javasrc/AttributeName.java
parser/html/javasrc/ElementName.java
parser/html/javasrc/HtmlAttributes.java
parser/html/javasrc/StackNode.java
parser/html/javasrc/TreeBuilder.java
parser/html/nsHtml5AttributeName.cpp
parser/html/nsHtml5AttributeName.h
parser/html/nsHtml5ElementName.cpp
parser/html/nsHtml5ElementName.h
parser/html/nsHtml5HtmlAttributes.cpp
parser/html/nsHtml5HtmlAttributes.h
parser/html/nsHtml5StackNode.cpp
parser/html/nsHtml5StackNode.h
parser/html/nsHtml5TreeBuilder.cpp
parser/html/nsHtml5TreeBuilder.h
--- a/parser/html/javasrc/AttributeName.java
+++ b/parser/html/javasrc/AttributeName.java
@@ -1,10 +1,10 @@
 /*
- * Copyright (c) 2008-2009 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -19,30 +19,44 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
  * DEALINGS IN THE SOFTWARE.
  */
 
 package nu.validator.htmlparser.impl;
 
 import java.util.Arrays;
 
-import nu.validator.htmlparser.annotation.IdType;
 import nu.validator.htmlparser.annotation.Local;
 import nu.validator.htmlparser.annotation.NoLength;
 import nu.validator.htmlparser.annotation.NsUri;
 import nu.validator.htmlparser.annotation.Prefix;
 import nu.validator.htmlparser.annotation.QName;
 import nu.validator.htmlparser.annotation.Virtual;
 import nu.validator.htmlparser.common.Interner;
 
 public final class AttributeName
 // Uncomment to regenerate
 // implements Comparable<AttributeName>
 {
+    // [NOCPP[
 
+    public static final int NCNAME_HTML = 1;
+
+    public static final int NCNAME_FOREIGN = (1 << 1) | (1 << 2);
+
+    public static final int NCNAME_LANG = (1 << 3);
+
+    public static final int IS_XMLNS = (1 << 4);
+
+    public static final int CASE_FOLDED = (1 << 5);
+
+    public static final int BOOLEAN = (1 << 6);
+
+    // ]NOCPP]
+    
     /**
      * An array representing no namespace regardless of namespace mode (HTML,
      * SVG, MathML, lang-mapping HTML) used.
      */
     static final @NoLength @NsUri String[] ALL_NO_NS = { "", "", "",
     // [NOCPP[
             ""
     // ]NOCPP]
@@ -134,20 +148,16 @@ public final class AttributeName
     // ]NOCPP]
     };
 
     // [NOCPP[
 
     private static final @NoLength @Prefix String[] LANG_PREFIX = { null, null,
             null, "xml" };
 
-    private static final boolean[] ALL_NCNAME = { true, true, true, true };
-
-    private static final boolean[] ALL_NO_NCNAME = { false, false, false, false };
-
     private static @QName String[] COMPUTE_QNAME(String[] local, String[] prefix) {
         @QName String[] arr = new String[4];
         for (int i = 0; i < arr.length; i++) {
             if (prefix[i] == null) {
                 arr[i] = local[i];
             } else {
                 arr[i] = (prefix[i] + ':' + local[i]).intern();
             }
@@ -333,21 +343,16 @@ public final class AttributeName
 
     // [NOCPP[
 
     /**
      * The mode value for lang-mapping HTML.
      */
     public static final int HTML_LANG = 3;
 
-    /**
-     * The XML data type of this attribute.
-     */
-    private final @IdType String type;
-
     // ]NOCPP]
 
     /**
      * The namespaces indexable by mode.
      */
     private final @NsUri @NoLength String[] uri;
 
     /**
@@ -357,61 +362,23 @@ public final class AttributeName
 
     /**
      * The prefixes indexably by mode.
      */
     private final @Prefix @NoLength String[] prefix;
 
     // [NOCPP[
 
+    private final int flags;
+
     /**
      * The qnames indexable by mode.
      */
     private final @QName @NoLength String[] qName;
 
-    // XXX convert to bitfield
-    /**
-     * Data on which names are ncnames indexable by mode.
-     */
-    private final @NoLength boolean[] ncname;
-
-    /**
-     * This in an xmlns attribute.
-     */
-    private final boolean xmlns;
-
-    /**
-     * The run-time constructor.
-     * 
-     * @param uri
-     *            the namespace
-     * @param local
-     *            the local name
-     * @param prefix
-     *            the prefix
-     * @param ncname
-     *            the ncnameness
-     * @param xmlns
-     *            whether this is an xmlns attribute
-     * @param type
-     *            the XML datatype
-     */
-    private AttributeName(@NsUri @NoLength String[] uri,
-            @Local @NoLength String[] local, @Prefix @NoLength String[] prefix,
-            @NoLength boolean[] ncname, boolean xmlns, @IdType String type) {
-        this.type = type;
-        this.uri = uri;
-        this.local = local;
-        this.prefix = prefix;
-
-        this.qName = COMPUTE_QNAME(local, prefix);
-        this.ncname = ncname;
-        this.xmlns = xmlns;
-    }
-
     // ]NOCPP]
 
     /**
      * The startup-time constructor.
      * 
      * @param uri
      *            the namespace
      * @param local
@@ -421,29 +388,25 @@ public final class AttributeName
      * @param ncname
      *            the ncnameness
      * @param xmlns
      *            whether this is an xmlns attribute
      */
     protected AttributeName(@NsUri @NoLength String[] uri,
             @Local @NoLength String[] local, @Prefix @NoLength String[] prefix
             // [NOCPP[
-            , @NoLength boolean[] ncname, boolean xmlns
-    // ]NOCPP]
+            , int flags
+    // ]NOCPP]        
     ) {
-        // [NOCPP[
-        this.type = "CDATA";
-        // ]NOCPP]
         this.uri = uri;
         this.local = local;
         this.prefix = prefix;
         // [NOCPP[
         this.qName = COMPUTE_QNAME(local, prefix);
-        this.ncname = ncname;
-        this.xmlns = xmlns;
+        this.flags = flags;
         // ]NOCPP]
     }
 
     /**
      * Creates an <code>AttributeName</code> for a local name.
      * 
      * @param name
      *            the name
@@ -452,33 +415,25 @@ public final class AttributeName
      * @return an <code>AttributeName</code>
      */
     private static AttributeName createAttributeName(@Local String name
     // [NOCPP[
             , boolean checkNcName
     // ]NOCPP]
     ) {
         // [NOCPP[
-        boolean ncName = true;
-        boolean xmlns = name.startsWith("xmlns:");
-        if (checkNcName) {
-            if (xmlns) {
-                ncName = false;
-            } else {
-                ncName = NCName.isNCName(name);
-            }
+        int flags = NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG;
+        if (name.startsWith("xmlns:")) {
+            flags = IS_XMLNS;
+        } else if (checkNcName && !NCName.isNCName(name)) {
+            flags = 0;
         }
         // ]NOCPP]
         return new AttributeName(AttributeName.ALL_NO_NS,
-                AttributeName.SAME_LOCAL(name), ALL_NO_PREFIX
-                // ]NOCPP]
-                , (ncName ? AttributeName.ALL_NCNAME
-                        : AttributeName.ALL_NO_NCNAME), xmlns
-        // ]NOCPP]
-        );
+                AttributeName.SAME_LOCAL(name), ALL_NO_PREFIX, flags);
     }
 
     /**
      * Deletes runtime-allocated instances in C++.
      */
     @Virtual void release() {
         // No-op in Java.
         // Implement as |delete this;| in subclass.
@@ -509,103 +464,57 @@ public final class AttributeName
      * to be changed.
      * 
      * @param name
      *            the name of the attribute to create
      */
     static AttributeName create(@Local String name) {
         return new AttributeName(AttributeName.ALL_NO_NS,
                 AttributeName.SAME_LOCAL(name), ALL_NO_PREFIX,
-                AttributeName.ALL_NCNAME, false);
+                NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
     }
 
     /**
      * Queries whether this name is an XML 1.0 4th ed. NCName.
      * 
      * @param mode
      *            the SVG/MathML/HTML mode
      * @return <code>true</code> if this is an NCName in the given mode
      */
     public boolean isNcName(int mode) {
-        return ncname[mode];
+        return (flags & (1 << mode)) != 0;
     }
 
     /**
      * Queries whether this is an <code>xmlns</code> attribute.
      * 
      * @return <code>true</code> if this is an <code>xmlns</code> attribute
      */
     public boolean isXmlns() {
-        return xmlns;
+        return (flags & IS_XMLNS) != 0;
     }
-
+        
     /**
      * Queries whether this attribute has a case-folded value in the HTML4 mode
      * of the parser.
      * 
      * @return <code>true</code> if the value is case-folded
      */
     boolean isCaseFolded() {
-        return this == AttributeName.ACTIVE || this == AttributeName.ALIGN
-                || this == AttributeName.ASYNC
-                || this == AttributeName.AUTOCOMPLETE
-                || this == AttributeName.AUTOFOCUS
-                || this == AttributeName.AUTOSUBMIT
-                || this == AttributeName.CHECKED || this == AttributeName.CLEAR
-                || this == AttributeName.COMPACT
-                || this == AttributeName.DATAFORMATAS
-                || this == AttributeName.DECLARE
-                || this == AttributeName.DEFAULT || this == AttributeName.DEFER
-                || this == AttributeName.DIR || this == AttributeName.DISABLED
-                || this == AttributeName.ENCTYPE || this == AttributeName.FRAME
-                || this == AttributeName.ISMAP || this == AttributeName.METHOD
-                || this == AttributeName.MULTIPLE
-                || this == AttributeName.NOHREF
-                || this == AttributeName.NORESIZE
-                || this == AttributeName.NOSHADE
-                || this == AttributeName.NOWRAP
-                || this == AttributeName.READONLY
-                || this == AttributeName.REPLACE
-                || this == AttributeName.REQUIRED
-                || this == AttributeName.RULES || this == AttributeName.SCOPE
-                || this == AttributeName.SCROLLING
-                || this == AttributeName.SELECTED
-                || this == AttributeName.SHAPE || this == AttributeName.STEP
-                || this == AttributeName.TYPE || this == AttributeName.VALIGN
-                || this == AttributeName.VALUETYPE;
+        return (flags & CASE_FOLDED) != 0;
     }
 
     boolean isBoolean() {
-        return this == AttributeName.ACTIVE || this == AttributeName.ASYNC
-                || this == AttributeName.AUTOFOCUS
-                || this == AttributeName.AUTOSUBMIT
-                || this == AttributeName.CHECKED
-                || this == AttributeName.COMPACT
-                || this == AttributeName.DECLARE
-                || this == AttributeName.DEFAULT || this == AttributeName.DEFER
-                || this == AttributeName.DISABLED
-                || this == AttributeName.ISMAP
-                || this == AttributeName.MULTIPLE
-                || this == AttributeName.NOHREF
-                || this == AttributeName.NORESIZE
-                || this == AttributeName.NOSHADE
-                || this == AttributeName.NOWRAP
-                || this == AttributeName.READONLY
-                || this == AttributeName.REQUIRED
-                || this == AttributeName.SELECTED;
+        return (flags & BOOLEAN) != 0;
     }
 
     public @QName String getQName(int mode) {
         return qName[mode];
     }
 
-    public @IdType String getType(int mode) {
-        return type;
-    }
-
     // ]NOCPP]
 
     public @NsUri String getUri(int mode) {
         return uri[mode];
     }
 
     public @Local String getLocal(int mode) {
         return local[mode];
@@ -616,2355 +525,1944 @@ public final class AttributeName
     }
 
     boolean equalsAnother(AttributeName another) {
         return this.getLocal(AttributeName.HTML) == another.getLocal(AttributeName.HTML);
     }
 
     // START CODE ONLY USED FOR GENERATING CODE uncomment to regenerate
 
-    // /**
-    // * @see java.lang.Object#toString()
-    // */
-    // @Override public String toString() {
-    // return "(" + formatNs() + ", " + formatLocal() + ", " + formatPrefix()
-    // + ", " + formatNcname() + ", " + (xmlns ? "true" : "false")
-    // + ("ID" == type ? ", \"ID\"" : "") + ")";
-    // }
-    //
-    // public int compareTo(AttributeName other) {
-    // int thisHash = this.hash();
-    // int otherHash = other.hash();
-    // if (thisHash < otherHash) {
-    // return -1;
-    // } else if (thisHash == otherHash) {
-    // return 0;
-    // } else {
-    // return 1;
-    // }
-    // }
-    //
-    // private String formatPrefix() {
-    // if (prefix[0] == null && prefix[1] == null && prefix[2] == null
-    // && prefix[3] == null) {
-    // return "ALL_NO_PREFIX";
-    // } else if (prefix[0] == null && prefix[1] == prefix[2]
-    // && prefix[3] == null) {
-    // if ("xmlns".equals(prefix[1])) {
-    // return "XMLNS_PREFIX";
-    // } else if ("xml".equals(prefix[1])) {
-    // return "XML_PREFIX";
-    // } else if ("xlink".equals(prefix[1])) {
-    // return "XLINK_PREFIX";
-    // } else {
-    // throw new IllegalStateException();
-    // }
-    // } else if (prefix[0] == null && prefix[1] == null && prefix[2] == null
-    // && prefix[3] == "xml") {
-    // return "LANG_PREFIX";
-    // } else {
-    // throw new IllegalStateException();
-    // }
-    // }
-    //
-    // private String formatLocal() {
-    // if (local[0] == local[1] && local[0] == local[3]
-    // && local[0] != local[2]) {
-    // return "SVG_DIFFERENT(\"" + local[0] + "\", \"" + local[2] + "\")";
-    // }
-    // if (local[0] == local[2] && local[0] == local[3]
-    // && local[0] != local[1]) {
-    // return "MATH_DIFFERENT(\"" + local[0] + "\", \"" + local[1] + "\")";
-    // }
-    // if (local[0] == local[3] && local[1] == local[2]
-    // && local[0] != local[1]) {
-    // return "COLONIFIED_LOCAL(\"" + local[0] + "\", \"" + local[1]
-    // + "\")";
-    // }
-    // for (int i = 1; i < local.length; i++) {
-    // if (local[0] != local[i]) {
-    // throw new IllegalStateException();
-    // }
-    // }
-    // return "SAME_LOCAL(\"" + local[0] + "\")";
-    // }
-    //
-    // private String formatNs() {
-    // if (uri[0] == "" && uri[1] == "" && uri[2] == "" && uri[3] == "") {
-    // return "ALL_NO_NS";
-    // } else if (uri[0] == "" && uri[1] == uri[2] && uri[3] == "") {
-    // if ("http://www.w3.org/2000/xmlns/".equals(uri[1])) {
-    // return "XMLNS_NS";
-    // } else if ("http://www.w3.org/XML/1998/namespace".equals(uri[1])) {
-    // return "XML_NS";
-    // } else if ("http://www.w3.org/1999/xlink".equals(uri[1])) {
-    // return "XLINK_NS";
-    // } else {
-    // throw new IllegalStateException();
-    // }
-    // } else if (uri[0] == "" && uri[1] == "" && uri[2] == ""
-    // && uri[3] == "http://www.w3.org/XML/1998/namespace") {
-    // return "LANG_NS";
-    // } else {
-    // throw new IllegalStateException();
-    // }
-    // }
-    //
-    // private String formatNcname() {
-    // for (int i = 0; i < ncname.length; i++) {
-    // if (!ncname[i]) {
-    // return "new boolean[]{" + ncname[0] + ", " + ncname[1] + ", "
-    // + ncname[2] + ", " + ncname[3] + "}";
-    // }
-    // }
-    // return "ALL_NCNAME";
-    // }
-    //
-    // private String constName() {
-    // String name = getLocal(HTML);
-    // char[] buf = new char[name.length()];
-    // for (int i = 0; i < name.length(); i++) {
-    // char c = name.charAt(i);
-    // if (c == '-' || c == ':') {
-    // buf[i] = '_';
-    // } else if (c >= 'a' && c <= 'z') {
-    // buf[i] = (char) (c - 0x20);
-    // } else {
-    // buf[i] = c;
-    // }
-    // }
-    // return new String(buf);
-    // }
-    //
-    // private int hash() {
-    // String name = getLocal(HTML);
-    // return bufToHash(name.toCharArray(), name.length());
-    // }
-    //
-    // /**
-    // * Regenerate self
-    // *
-    // * @param args
-    // */
-    // public static void main(String[] args) {
-    // Arrays.sort(ATTRIBUTE_NAMES);
-    // for (int i = 1; i < ATTRIBUTE_NAMES.length; i++) {
-    // if (ATTRIBUTE_NAMES[i].hash() == ATTRIBUTE_NAMES[i - 1].hash()) {
-    // System.err.println("Hash collision: "
-    // + ATTRIBUTE_NAMES[i].getLocal(HTML) + ", "
-    // + ATTRIBUTE_NAMES[i - 1].getLocal(HTML));
-    // return;
-    // }
-    // }
-    // for (int i = 0; i < ATTRIBUTE_NAMES.length; i++) {
-    // AttributeName att = ATTRIBUTE_NAMES[i];
-    // System.out.println("public static final AttributeName "
-    // + att.constName() + " = new AttributeName" + att.toString()
-    // + ";");
-    // }
-    // System.out.println("private final static @NoLength AttributeName[] ATTRIBUTE_NAMES = {");
-    // for (int i = 0; i < ATTRIBUTE_NAMES.length; i++) {
-    // AttributeName att = ATTRIBUTE_NAMES[i];
-    // System.out.println(att.constName() + ",");
-    // }
-    // System.out.println("};");
-    // System.out.println("private final static int[] ATTRIBUTE_HASHES = {");
-    // for (int i = 0; i < ATTRIBUTE_NAMES.length; i++) {
-    // AttributeName att = ATTRIBUTE_NAMES[i];
-    // System.out.println(Integer.toString(att.hash()) + ",");
-    // }
-    // System.out.println("};");
-    // }
+//    /**
+//     * @see java.lang.Object#toString()
+//     */
+//    @Override public String toString() {
+//        return "(" + formatNs() + ", " + formatLocal() + ", " + formatPrefix()
+//                + ", " + formatFlags() + ")";
+//    }
+//
+//    private String formatFlags() {
+//        StringBuilder builder = new StringBuilder();
+//        if ((flags & NCNAME_HTML) != 0) {
+//            if (builder.length() != 0) {
+//                builder.append(" | ");
+//            }
+//            builder.append("NCNAME_HTML");
+//        }            
+//        if ((flags & NCNAME_FOREIGN) != 0) {
+//            if (builder.length() != 0) {
+//                builder.append(" | ");
+//            }
+//            builder.append("NCNAME_FOREIGN");
+//        }
+//        if ((flags & NCNAME_LANG) != 0) {
+//            if (builder.length() != 0) {
+//                builder.append(" | ");
+//            }
+//            builder.append("NCNAME_LANG");
+//        }
+//        if (isXmlns()) {
+//            if (builder.length() != 0) {
+//                builder.append(" | ");
+//            }
+//            builder.append("IS_XMLNS");
+//        }
+//        if (isCaseFolded()) {
+//            if (builder.length() != 0) {
+//                builder.append(" | ");
+//            }
+//            builder.append("CASE_FOLDED");
+//        }
+//        if (isBoolean()) {
+//            if (builder.length() != 0) {
+//                builder.append(" | ");
+//            }
+//            builder.append("BOOLEAN");
+//        }
+//        if (builder.length() == 0) {
+//            return "0";
+//        }
+//        return builder.toString();
+//    }
+//
+//    public int compareTo(AttributeName other) {
+//        int thisHash = this.hash();
+//        int otherHash = other.hash();
+//        if (thisHash < otherHash) {
+//            return -1;
+//        } else if (thisHash == otherHash) {
+//            return 0;
+//        } else {
+//            return 1;
+//        }
+//    }
+//
+//    private String formatPrefix() {
+//        if (prefix[0] == null && prefix[1] == null && prefix[2] == null
+//                && prefix[3] == null) {
+//            return "ALL_NO_PREFIX";
+//        } else if (prefix[0] == null && prefix[1] == prefix[2]
+//                && prefix[3] == null) {
+//            if ("xmlns".equals(prefix[1])) {
+//                return "XMLNS_PREFIX";
+//            } else if ("xml".equals(prefix[1])) {
+//                return "XML_PREFIX";
+//            } else if ("xlink".equals(prefix[1])) {
+//                return "XLINK_PREFIX";
+//            } else {
+//                throw new IllegalStateException();
+//            }
+//        } else if (prefix[0] == null && prefix[1] == null && prefix[2] == null
+//                && prefix[3] == "xml") {
+//            return "LANG_PREFIX";
+//        } else {
+//            throw new IllegalStateException();
+//        }
+//    }
+//
+//    private String formatLocal() {
+//        if (local[0] == local[1] && local[0] == local[3]
+//                && local[0] != local[2]) {
+//            return "SVG_DIFFERENT(\"" + local[0] + "\", \"" + local[2] + "\")";
+//        }
+//        if (local[0] == local[2] && local[0] == local[3]
+//                && local[0] != local[1]) {
+//            return "MATH_DIFFERENT(\"" + local[0] + "\", \"" + local[1] + "\")";
+//        }
+//        if (local[0] == local[3] && local[1] == local[2]
+//                && local[0] != local[1]) {
+//            return "COLONIFIED_LOCAL(\"" + local[0] + "\", \"" + local[1]
+//                    + "\")";
+//        }
+//        for (int i = 1; i < local.length; i++) {
+//            if (local[0] != local[i]) {
+//                throw new IllegalStateException();
+//            }
+//        }
+//        return "SAME_LOCAL(\"" + local[0] + "\")";
+//    }
+//
+//    private String formatNs() {
+//        if (uri[0] == "" && uri[1] == "" && uri[2] == "" && uri[3] == "") {
+//            return "ALL_NO_NS";
+//        } else if (uri[0] == "" && uri[1] == uri[2] && uri[3] == "") {
+//            if ("http://www.w3.org/2000/xmlns/".equals(uri[1])) {
+//                return "XMLNS_NS";
+//            } else if ("http://www.w3.org/XML/1998/namespace".equals(uri[1])) {
+//                return "XML_NS";
+//            } else if ("http://www.w3.org/1999/xlink".equals(uri[1])) {
+//                return "XLINK_NS";
+//            } else {
+//                throw new IllegalStateException();
+//            }
+//        } else if (uri[0] == "" && uri[1] == "" && uri[2] == ""
+//                && uri[3] == "http://www.w3.org/XML/1998/namespace") {
+//            return "LANG_NS";
+//        } else {
+//            throw new IllegalStateException();
+//        }
+//    }
+//
+//    private String constName() {
+//        String name = getLocal(HTML);
+//        char[] buf = new char[name.length()];
+//        for (int i = 0; i < name.length(); i++) {
+//            char c = name.charAt(i);
+//            if (c == '-' || c == ':') {
+//                buf[i] = '_';
+//            } else if (c >= 'a' && c <= 'z') {
+//                buf[i] = (char) (c - 0x20);
+//            } else {
+//                buf[i] = c;
+//            }
+//        }
+//        return new String(buf);
+//    }
+//
+//    private int hash() {
+//        String name = getLocal(HTML);
+//        return bufToHash(name.toCharArray(), name.length());
+//    }
+//
+//    /**
+//     * Regenerate self
+//     * 
+//     * @param args
+//     */
+//    public static void main(String[] args) {
+//        Arrays.sort(ATTRIBUTE_NAMES);
+//        for (int i = 1; i < ATTRIBUTE_NAMES.length; i++) {
+//            if (ATTRIBUTE_NAMES[i].hash() == ATTRIBUTE_NAMES[i - 1].hash()) {
+//                System.err.println("Hash collision: "
+//                        + ATTRIBUTE_NAMES[i].getLocal(HTML) + ", "
+//                        + ATTRIBUTE_NAMES[i - 1].getLocal(HTML));
+//                return;
+//            }
+//        }
+//        for (int i = 0; i < ATTRIBUTE_NAMES.length; i++) {
+//            AttributeName att = ATTRIBUTE_NAMES[i];
+//            System.out.println("public static final AttributeName "
+//                    + att.constName() + " = new AttributeName" + att.toString()
+//                    + ";");
+//        }
+//        System.out.println("private final static @NoLength AttributeName[] ATTRIBUTE_NAMES = {");
+//        for (int i = 0; i < ATTRIBUTE_NAMES.length; i++) {
+//            AttributeName att = ATTRIBUTE_NAMES[i];
+//            System.out.println(att.constName() + ",");
+//        }
+//        System.out.println("};");
+//        System.out.println("private final static int[] ATTRIBUTE_HASHES = {");
+//        for (int i = 0; i < ATTRIBUTE_NAMES.length; i++) {
+//            AttributeName att = ATTRIBUTE_NAMES[i];
+//            System.out.println(Integer.toString(att.hash()) + ",");
+//        }
+//        System.out.println("};");
+//    }
 
     // START GENERATED CODE
-    public static final AttributeName D = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("d"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName K = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("k"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName R = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("r"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName X = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("x"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName Y = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("y"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName Z = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("z"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("by"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("cx"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("cy"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("dx"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("dy"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName G2 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("g2"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName G1 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("g1"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fx"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fy"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName K4 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("k4"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName K2 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("k2"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName K3 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("k3"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName K1 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("k1"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ID = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("id"), ALL_NO_PREFIX, ALL_NCNAME, false, "ID");
-
-    public static final AttributeName IN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("in"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName U2 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("u2"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName U1 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("u1"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rt"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rx"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ry"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TO = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("to"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName Y2 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("y2"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName Y1 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("y1"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName X1 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("x1"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName X2 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("x2"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ALT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("alt"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DIR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("dir"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DUR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("dur"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName END = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("end"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("for"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName IN2 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("in2"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MAX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("max"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MIN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("min"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LOW = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("low"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REL = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rel"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REV = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rev"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SRC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("src"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName AXIS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("axis"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ABBR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("abbr"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BBOX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("bbox"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CITE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("cite"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CODE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("code"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BIAS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("bias"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COLS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("cols"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLIP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("clip"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CHAR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("char"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BASE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("base"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName EDGE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("edge"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DATA = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("data"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FILL = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fill"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FROM = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("from"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FORM = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("form"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FACE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("face"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HIGH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("high"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HREF = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("href"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OPEN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("open"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ICON = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("icon"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NAME = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("name"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MODE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("mode"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MASK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("mask"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LINK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("link"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LANG = new AttributeName(LANG_NS,
-            SAME_LOCAL("lang"), LANG_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LIST = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("list"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TYPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("type"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName WHEN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("when"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName WRAP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("wrap"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TEXT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("text"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PATH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("path"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ping"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REFX = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("refx", "refX"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REFY = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("refy", "refY"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("size"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SEED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("seed"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROWS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rows"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SPAN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("span"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STEP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("step"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("role"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName XREF = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("xref"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ASYNC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("async"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ALINK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("alink"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ALIGN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("align"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLOSE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("close"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COLOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("color"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLASS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("class"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLEAR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("clear"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BEGIN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("begin"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DEPTH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("depth"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DEFER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("defer"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FENCE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fence"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FRAME = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("frame"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ISMAP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ismap"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONEND = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onend"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName INDEX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("index"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ORDER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("order"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OTHER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("other"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONCUT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("oncut"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NARGS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("nargs"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MEDIA = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("media"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LABEL = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("label"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LOCAL = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("local"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName WIDTH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("width"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TITLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("title"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VLINK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("vlink"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VALUE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("value"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SLOPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("slope"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SHAPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("shape"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCOPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("scope"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCALE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("scale"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SPEED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("speed"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STYLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("style"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RULES = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rules"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STEMH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("stemh"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STEMV = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("stemv"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName START = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("start"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName XMLNS = new AttributeName(XMLNS_NS,
-            SAME_LOCAL("xmlns"), ALL_NO_PREFIX, new boolean[] { false, false,
-                    false, false }, true);
-
-    public static final AttributeName ACCEPT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("accept"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ACCENT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("accent"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ASCENT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ascent"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ACTIVE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("active"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ALTIMG = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("altimg"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ACTION = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("action"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BORDER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("border"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CURSOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("cursor"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COORDS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("coords"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FILTER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("filter"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FORMAT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("format"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HIDDEN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("hidden"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HSPACE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("hspace"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HEIGHT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("height"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONMOVE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onmove"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONLOAD = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onload"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDRAG = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ondrag"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ORIGIN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("origin"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONZOOM = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onzoom"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONHELP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onhelp"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONSTOP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onstop"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDROP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ondrop"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONBLUR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onblur"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OBJECT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("object"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OFFSET = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("offset"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ORIENT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("orient"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONCOPY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("oncopy"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NOWRAP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("nowrap"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NOHREF = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("nohref"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MACROS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("macros"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName METHOD = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("method"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LOWSRC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("lowsrc"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LSPACE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("lspace"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LQUOTE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("lquote"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName USEMAP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("usemap"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName WIDTHS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("widths"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TARGET = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("target"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VALUES = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("values"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VALIGN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("valign"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VSPACE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("vspace"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName POSTER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("poster"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName POINTS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("points"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PROMPT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("prompt"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCOPED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("scoped"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STRING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("string"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCHEME = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("scheme"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STROKE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("stroke"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RADIUS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("radius"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RESULT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("result"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REPEAT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("repeat"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RSPACE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rspace"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROTATE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rotate"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RQUOTE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rquote"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ALTTEXT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("alttext"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARCHIVE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("archive"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName AZIMUTH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("azimuth"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLOSURE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("closure"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CHECKED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("checked"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLASSID = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("classid"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CHAROFF = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("charoff"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BGCOLOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("bgcolor"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COLSPAN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("colspan"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CHARSET = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("charset"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COMPACT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("compact"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CONTENT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("content"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ENCTYPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("enctype"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DATASRC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("datasrc"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DATAFLD = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("datafld"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DECLARE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("declare"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DISPLAY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("display"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DIVISOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("divisor"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DEFAULT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("default"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DESCENT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("descent"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName KERNING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("kerning"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HANGING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("hanging"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HEADERS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("headers"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONPASTE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onpaste"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONCLICK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onclick"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OPTIMUM = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("optimum"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONBEGIN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onbegin"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONKEYUP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onkeyup"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONFOCUS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onfocus"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONERROR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onerror"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONINPUT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("oninput"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONABORT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onabort"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONSTART = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onstart"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONRESET = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onreset"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OPACITY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("opacity"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NOSHADE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("noshade"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MINSIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("minsize"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MAXSIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("maxsize"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LOOPEND = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("loopend"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LARGEOP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("largeop"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName UNICODE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("unicode"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TARGETX = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("targetx", "targetX"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName TARGETY = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("targety", "targetY"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName VIEWBOX = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("viewbox", "viewBox"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName VERSION = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("version"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PATTERN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("pattern"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PROFILE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("profile"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SPACING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("spacing"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RESTART = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("restart"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROWSPAN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rowspan"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SANDBOX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("sandbox"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SUMMARY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("summary"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STANDBY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("standby"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REPLACE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("replace"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName AUTOPLAY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("autoplay"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ADDITIVE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("additive"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CALCMODE = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("calcmode", "calcMode"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName CODETYPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("codetype"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CODEBASE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("codebase"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CONTROLS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("controls"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BEVELLED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("bevelled"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BASELINE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("baseline"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName EXPONENT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("exponent"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName EDGEMODE = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("edgemode", "edgeMode"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ENCODING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("encoding"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName GLYPHREF = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("glyphref", "glyphRef"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName DATETIME = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("datetime"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DISABLED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("disabled"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONTSIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fontsize"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName KEYTIMES = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("keytimes", "keyTimes"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName PANOSE_1 = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("panose-1"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName HREFLANG = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("hreflang"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONRESIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onresize"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONCHANGE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onchange"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONBOUNCE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onbounce"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONUNLOAD = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onunload"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONFINISH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onfinish"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONSCROLL = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onscroll"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OPERATOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("operator"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OVERFLOW = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("overflow"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONSUBMIT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onsubmit"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONREPEAT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onrepeat"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONSELECT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onselect"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NOTATION = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("notation"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NORESIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("noresize"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MANIFEST = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("manifest"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MATHSIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("mathsize"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MULTIPLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("multiple"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LONGDESC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("longdesc"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LANGUAGE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("language"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TEMPLATE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("template"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TABINDEX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("tabindex"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName READONLY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("readonly"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SELECTED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("selected"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROWLINES = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rowlines"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SEAMLESS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("seamless"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROWALIGN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rowalign"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STRETCHY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("stretchy"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REQUIRED = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("required"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName XML_BASE = new AttributeName(XML_NS,
-            COLONIFIED_LOCAL("xml:base", "base"), XML_PREFIX, new boolean[] {
-                    false, true, true, false }, false);
-
-    public static final AttributeName XML_LANG = new AttributeName(XML_NS,
-            COLONIFIED_LOCAL("xml:lang", "lang"), XML_PREFIX, new boolean[] {
-                    false, true, true, false }, false);
-
-    public static final AttributeName X_HEIGHT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("x-height"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_OWNS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("aria-owns"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName AUTOFOCUS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("autofocus"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_SORT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("aria-sort"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ACCESSKEY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("accesskey"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_BUSY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("aria-busy"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_GRAB = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("aria-grab"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName AMPLITUDE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("amplitude"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_LIVE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("aria-live"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLIP_RULE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("clip-rule"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CLIP_PATH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("clip-path"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName EQUALROWS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("equalrows"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ELEVATION = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("elevation"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DIRECTION = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("direction"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DRAGGABLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("draggable"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FILTERRES = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("filterres", "filterRes"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FILL_RULE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fill-rule"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONTSTYLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fontstyle"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONT_SIZE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("font-size"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName KEYPOINTS = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("keypoints", "keyPoints"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName HIDEFOCUS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("hidefocus"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONMESSAGE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onmessage"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName INTERCEPT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("intercept"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDRAGEND = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ondragend"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONMOVEEND = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onmoveend"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONINVALID = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("oninvalid"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONKEYDOWN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onkeydown"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONFOCUSIN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onfocusin"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONMOUSEUP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onmouseup"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName INPUTMODE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("inputmode"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONROWEXIT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onrowexit"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MATHCOLOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("mathcolor"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MASKUNITS = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("maskunits", "maskUnits"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MAXLENGTH = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("maxlength"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LINEBREAK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("linebreak"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName LOOPSTART = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("loopstart"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TRANSFORM = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("transform"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName V_HANGING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("v-hanging"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VALUETYPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("valuetype"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName POINTSATZ = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("pointsatz", "pointsAtZ"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName POINTSATX = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("pointsatx", "pointsAtX"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName POINTSATY = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("pointsaty", "pointsAtY"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName PLAYCOUNT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("playcount"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SYMMETRIC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("symmetric"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCROLLING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("scrolling"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REPEATDUR = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("repeatdur", "repeatDur"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName SELECTION = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("selection"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SEPARATOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("separator"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName XML_SPACE = new AttributeName(XML_NS,
-            COLONIFIED_LOCAL("xml:space", "space"), XML_PREFIX, new boolean[] {
-                    false, true, true, false }, false);
-
-    public static final AttributeName AUTOSUBMIT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("autosubmit"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ALPHABETIC = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("alphabetic"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ACTIONTYPE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("actiontype"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ACCUMULATE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("accumulate"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_LEVEL = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("aria-level"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COLUMNSPAN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("columnspan"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName CAP_HEIGHT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("cap-height"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName BACKGROUND = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("background"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName GLYPH_NAME = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("glyph-name"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName GROUPALIGN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("groupalign"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONTFAMILY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fontfamily"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONTWEIGHT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("fontweight"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONT_STYLE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("font-style"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName KEYSPLINES = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("keysplines", "keySplines"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName HTTP_EQUIV = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("http-equiv"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONACTIVATE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onactivate"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName OCCURRENCE = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("occurrence"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName IRRELEVANT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("irrelevant"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDBLCLICK = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ondblclick"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDRAGDROP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ondragdrop"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONKEYPRESS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onkeypress"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONROWENTER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onrowenter"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDRAGOVER = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("ondragover"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONFOCUSOUT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onfocusout"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONMOUSEOUT = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("onmouseout"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName NUMOCTAVES = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("numoctaves", "numOctaves"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName MARKER_MID = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("marker-mid"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MARKER_END = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("marker-end"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TEXTLENGTH = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("textlength", "textLength"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName VISIBILITY = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("visibility"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VIEWTARGET = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("viewtarget", "viewTarget"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName VERT_ADV_Y = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("vert-adv-y"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PATHLENGTH = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("pathlength", "pathLength"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName REPEAT_MAX = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("repeat-max"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RADIOGROUP = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("radiogroup"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STOP_COLOR = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("stop-color"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SEPARATORS = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("separators"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REPEAT_MIN = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("repeat-min"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ROWSPACING = new AttributeName(ALL_NO_NS,
-            SAME_LOCAL("rowspacing"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ZOOMANDPAN = new AttributeName(ALL_NO_NS,
-            SVG_DIFFERENT("zoomandpan", "zoomAndPan"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName XLINK_TYPE = new AttributeName(XLINK_NS,
-            COLONIFIED_LOCAL("xlink:type", "type"), XLINK_PREFIX,
-            new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName XLINK_ROLE = new AttributeName(XLINK_NS,
-            COLONIFIED_LOCAL("xlink:role", "role"), XLINK_PREFIX,
-            new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName XLINK_HREF = new AttributeName(XLINK_NS,
-            COLONIFIED_LOCAL("xlink:href", "href"), XLINK_PREFIX,
-            new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName XLINK_SHOW = new AttributeName(XLINK_NS,
-            COLONIFIED_LOCAL("xlink:show", "show"), XLINK_PREFIX,
-            new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName ACCENTUNDER = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("accentunder"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_SECRET = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-secret"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_ATOMIC = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-atomic"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_HIDDEN = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-hidden"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_FLOWTO = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-flowto"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARABIC_FORM = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("arabic-form"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName CELLPADDING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("cellpadding"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName CELLSPACING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("cellspacing"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName COLUMNWIDTH = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("columnwidth"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName COLUMNALIGN = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("columnalign"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName COLUMNLINES = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("columnlines"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName CONTEXTMENU = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("contextmenu"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName BASEPROFILE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("baseprofile", "baseProfile"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONT_FAMILY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("font-family"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FRAMEBORDER = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("frameborder"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FILTERUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("filterunits", "filterUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FLOOD_COLOR = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("flood-color"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FONT_WEIGHT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("font-weight"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName HORIZ_ADV_X = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("horiz-adv-x"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONDRAGLEAVE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondragleave"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOUSEMOVE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmousemove"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ORIENTATION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("orientation"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOUSEDOWN = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmousedown"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOUSEOVER = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmouseover"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONDRAGENTER = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondragenter"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName IDEOGRAPHIC = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ideographic"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONBEFORECUT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforecut"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONFORMINPUT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onforminput"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONDRAGSTART = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondragstart"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOVESTART = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmovestart"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MARKERUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("markerunits", "markerUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MATHVARIANT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("mathvariant"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MARGINWIDTH = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("marginwidth"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MARKERWIDTH = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("markerwidth", "markerWidth"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName TEXT_ANCHOR = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("text-anchor"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName TABLEVALUES = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("tablevalues", "tableValues"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCRIPTLEVEL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("scriptlevel"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName REPEATCOUNT = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("repeatcount", "repeatCount"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STITCHTILES = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("stitchtiles", "stitchTiles"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STARTOFFSET = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("startoffset", "startOffset"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCROLLDELAY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("scrolldelay"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName XMLNS_XLINK = new AttributeName(XMLNS_NS,
-            COLONIFIED_LOCAL("xmlns:xlink", "xlink"), XMLNS_PREFIX,
-            new boolean[] { false, false, false, false }, true);
-
-    public static final AttributeName XLINK_TITLE = new AttributeName(XLINK_NS,
-            COLONIFIED_LOCAL("xlink:title", "title"), XLINK_PREFIX,
-            new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName ARIA_INVALID = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-invalid"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_PRESSED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-pressed"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_CHECKED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-checked"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName AUTOCOMPLETE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("autocomplete"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_SETSIZE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-setsize"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_CHANNEL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-channel"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName EQUALCOLUMNS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("equalcolumns"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName DISPLAYSTYLE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("displaystyle"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName DATAFORMATAS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("dataformatas"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FILL_OPACITY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("fill-opacity"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FONT_VARIANT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("font-variant"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FONT_STRETCH = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("font-stretch"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName FRAMESPACING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("framespacing"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName KERNELMATRIX = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("kernelmatrix", "kernelMatrix"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDEACTIVATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondeactivate"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONROWSDELETE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onrowsdelete"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOUSELEAVE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmouseleave"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONFORMCHANGE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onformchange"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONCELLCHANGE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("oncellchange"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOUSEWHEEL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmousewheel"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONMOUSEENTER = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onmouseenter"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONAFTERPRINT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onafterprint"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONBEFORECOPY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforecopy"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MARGINHEIGHT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("marginheight"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MARKERHEIGHT = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("markerheight", "markerHeight"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName MARKER_START = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("marker-start"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MATHEMATICAL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("mathematical"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName LENGTHADJUST = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("lengthadjust", "lengthAdjust"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName UNSELECTABLE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("unselectable"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName UNICODE_BIDI = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("unicode-bidi"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName UNITS_PER_EM = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("units-per-em"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName WORD_SPACING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("word-spacing"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName WRITING_MODE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("writing-mode"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName V_ALPHABETIC = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("v-alphabetic"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName PATTERNUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("patternunits", "patternUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SPREADMETHOD = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("spreadmethod", "spreadMethod"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SURFACESCALE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("surfacescale", "surfaceScale"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STROKE_WIDTH = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-width"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName REPEAT_START = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("repeat-start"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName STDDEVIATION = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("stddeviation", "stdDeviation"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STOP_OPACITY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stop-opacity"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_CONTROLS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-controls"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_HASPOPUP = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-haspopup"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ACCENT_HEIGHT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("accent-height"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_VALUENOW = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-valuenow"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_RELEVANT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-relevant"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_POSINSET = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-posinset"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_VALUEMAX = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-valuemax"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_READONLY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-readonly"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_SELECTED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-selected"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_REQUIRED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-required"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_EXPANDED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-expanded"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_DISABLED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-disabled"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ATTRIBUTETYPE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("attributetype", "attributeType"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ATTRIBUTENAME = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("attributename", "attributeName"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_DATATYPE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-datatype"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_VALUEMIN = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-valuemin"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName BASEFREQUENCY = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("basefrequency", "baseFrequency"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COLUMNSPACING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("columnspacing"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName COLOR_PROFILE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("color-profile"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName CLIPPATHUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("clippathunits", "clipPathUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName DEFINITIONURL = new AttributeName(
-            ALL_NO_NS, MATH_DIFFERENT("definitionurl", "definitionURL"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName GRADIENTUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("gradientunits", "gradientUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FLOOD_OPACITY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("flood-opacity"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONAFTERUPDATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onafterupdate"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONERRORUPDATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onerrorupdate"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONBEFOREPASTE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforepaste"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONLOSECAPTURE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onlosecapture"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONCONTEXTMENU = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("oncontextmenu"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONSELECTSTART = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onselectstart"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONBEFOREPRINT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforeprint"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MOVABLELIMITS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("movablelimits"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName LINETHICKNESS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("linethickness"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName UNICODE_RANGE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("unicode-range"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName THINMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("thinmathspace"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName VERT_ORIGIN_X = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("vert-origin-x"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName VERT_ORIGIN_Y = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("vert-origin-y"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName V_IDEOGRAPHIC = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("v-ideographic"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName PRESERVEALPHA = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("preservealpha", "preserveAlpha"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SCRIPTMINSIZE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("scriptminsize"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName SPECIFICATION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("specification"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName XLINK_ACTUATE = new AttributeName(
-            XLINK_NS, COLONIFIED_LOCAL("xlink:actuate", "actuate"),
-            XLINK_PREFIX, new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName XLINK_ARCROLE = new AttributeName(
-            XLINK_NS, COLONIFIED_LOCAL("xlink:arcrole", "arcrole"),
-            XLINK_PREFIX, new boolean[] { false, true, true, false }, false);
-
-    public static final AttributeName ACCEPT_CHARSET = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("accept-charset"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ALIGNMENTSCOPE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("alignmentscope"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_MULTILINE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-multiline"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName BASELINE_SHIFT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("baseline-shift"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName HORIZ_ORIGIN_X = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("horiz-origin-x"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName HORIZ_ORIGIN_Y = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("horiz-origin-y"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONBEFOREUPDATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforeupdate"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONFILTERCHANGE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onfilterchange"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONROWSINSERTED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onrowsinserted"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ONBEFOREUNLOAD = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforeunload"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName MATHBACKGROUND = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("mathbackground"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName LETTER_SPACING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("letter-spacing"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName LIGHTING_COLOR = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("lighting-color"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName THICKMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("thickmathspace"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName TEXT_RENDERING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("text-rendering"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName V_MATHEMATICAL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("v-mathematical"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName POINTER_EVENTS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("pointer-events"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName PRIMITIVEUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("primitiveunits", "primitiveUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SYSTEMLANGUAGE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("systemlanguage", "systemLanguage"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName STROKE_LINECAP = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-linecap"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName SUBSCRIPTSHIFT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("subscriptshift"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName STROKE_OPACITY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-opacity"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName ARIA_DROPEFFECT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-dropeffect"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_LABELLEDBY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-labelledby"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_TEMPLATEID = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-templateid"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName COLOR_RENDERING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("color-rendering"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName CONTENTEDITABLE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("contenteditable"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName DIFFUSECONSTANT = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("diffuseconstant", "diffuseConstant"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONDATAAVAILABLE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondataavailable"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ONCONTROLSELECT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("oncontrolselect"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName IMAGE_RENDERING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("image-rendering"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName MEDIUMMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("mediummathspace"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName TEXT_DECORATION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("text-decoration"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName SHAPE_RENDERING = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("shape-rendering"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName STROKE_LINEJOIN = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-linejoin"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName REPEAT_TEMPLATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("repeat-template"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_DESCRIBEDBY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-describedby"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName CONTENTSTYLETYPE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("contentstyletype", "contentStyleType"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName FONT_SIZE_ADJUST = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("font-size-adjust"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName KERNELUNITLENGTH = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("kernelunitlength", "kernelUnitLength"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONBEFOREACTIVATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforeactivate"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ONPROPERTYCHANGE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onpropertychange"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ONDATASETCHANGED = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondatasetchanged"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName MASKCONTENTUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("maskcontentunits", "maskContentUnits"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PATTERNTRANSFORM = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("patterntransform", "patternTransform"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName REQUIREDFEATURES = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("requiredfeatures", "requiredFeatures"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName RENDERING_INTENT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("rendering-intent"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName SPECULAREXPONENT = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("specularexponent", "specularExponent"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SPECULARCONSTANT = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("specularconstant", "specularConstant"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName SUPERSCRIPTSHIFT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("superscriptshift"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName STROKE_DASHARRAY = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-dasharray"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName XCHANNELSELECTOR = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("xchannelselector", "xChannelSelector"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName YCHANNELSELECTOR = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("ychannelselector", "yChannelSelector"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_AUTOCOMPLETE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-autocomplete"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName CONTENTSCRIPTTYPE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("contentscripttype", "contentScriptType"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ENABLE_BACKGROUND = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("enable-background"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName DOMINANT_BASELINE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("dominant-baseline"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName GRADIENTTRANSFORM = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("gradienttransform", "gradientTransform"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ONBEFORDEACTIVATE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbefordeactivate"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ONDATASETCOMPLETE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("ondatasetcomplete"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName OVERLINE_POSITION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("overline-position"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ONBEFOREEDITFOCUS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onbeforeeditfocus"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName LIMITINGCONEANGLE = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("limitingconeangle", "limitingConeAngle"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName VERYTHINMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("verythinmathspace"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName STROKE_DASHOFFSET = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-dashoffset"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName STROKE_MITERLIMIT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("stroke-miterlimit"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ALIGNMENT_BASELINE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("alignment-baseline"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ONREADYSTATECHANGE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("onreadystatechange"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName OVERLINE_THICKNESS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("overline-thickness"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName UNDERLINE_POSITION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("underline-position"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName VERYTHICKMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("verythickmathspace"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName REQUIREDEXTENSIONS = new AttributeName(
-            ALL_NO_NS,
-            SVG_DIFFERENT("requiredextensions", "requiredExtensions"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName COLOR_INTERPOLATION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("color-interpolation"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName UNDERLINE_THICKNESS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("underline-thickness"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName PRESERVEASPECTRATIO = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("preserveaspectratio",
-                    "preserveAspectRatio"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName PATTERNCONTENTUNITS = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("patterncontentunits",
-                    "patternContentUnits"), ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_MULTISELECTABLE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-multiselectable"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName SCRIPTSIZEMULTIPLIER = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("scriptsizemultiplier"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName ARIA_ACTIVEDESCENDANT = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("aria-activedescendant"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName VERYVERYTHINMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("veryverythinmathspace"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName VERYVERYTHICKMATHSPACE = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("veryverythickmathspace"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName STRIKETHROUGH_POSITION = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("strikethrough-position"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName STRIKETHROUGH_THICKNESS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("strikethrough-thickness"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName EXTERNALRESOURCESREQUIRED = new AttributeName(
-            ALL_NO_NS, SVG_DIFFERENT("externalresourcesrequired",
-                    "externalResourcesRequired"), ALL_NO_PREFIX, ALL_NCNAME,
-            false);
-
-    public static final AttributeName GLYPH_ORIENTATION_VERTICAL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("glyph-orientation-vertical"), ALL_NO_PREFIX,
-            ALL_NCNAME, false);
-
-    public static final AttributeName COLOR_INTERPOLATION_FILTERS = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("color-interpolation-filters"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    public static final AttributeName GLYPH_ORIENTATION_HORIZONTAL = new AttributeName(
-            ALL_NO_NS, SAME_LOCAL("glyph-orientation-horizontal"),
-            ALL_NO_PREFIX, ALL_NCNAME, false);
-
-    private final static @NoLength AttributeName[] ATTRIBUTE_NAMES = { D, K, R,
-            X, Y, Z, BY, CX, CY, DX, DY, G2, G1, FX, FY, K4, K2, K3, K1, ID,
-            IN, U2, U1, RT, RX, RY, TO, Y2, Y1, X1, X2, ALT, DIR, DUR, END,
-            FOR, IN2, MAX, MIN, LOW, REL, REV, SRC, AXIS, ABBR, BBOX, CITE,
-            CODE, BIAS, COLS, CLIP, CHAR, BASE, EDGE, DATA, FILL, FROM, FORM,
-            FACE, HIGH, HREF, OPEN, ICON, NAME, MODE, MASK, LINK, LANG, LIST,
-            TYPE, WHEN, WRAP, TEXT, PATH, PING, REFX, REFY, SIZE, SEED, ROWS,
-            SPAN, STEP, ROLE, XREF, ASYNC, ALINK, ALIGN, CLOSE, COLOR, CLASS,
-            CLEAR, BEGIN, DEPTH, DEFER, FENCE, FRAME, ISMAP, ONEND, INDEX,
-            ORDER, OTHER, ONCUT, NARGS, MEDIA, LABEL, LOCAL, WIDTH, TITLE,
-            VLINK, VALUE, SLOPE, SHAPE, SCOPE, SCALE, SPEED, STYLE, RULES,
-            STEMH, STEMV, START, XMLNS, ACCEPT, ACCENT, ASCENT, ACTIVE, ALTIMG,
-            ACTION, BORDER, CURSOR, COORDS, FILTER, FORMAT, HIDDEN, HSPACE,
-            HEIGHT, ONMOVE, ONLOAD, ONDRAG, ORIGIN, ONZOOM, ONHELP, ONSTOP,
-            ONDROP, ONBLUR, OBJECT, OFFSET, ORIENT, ONCOPY, NOWRAP, NOHREF,
-            MACROS, METHOD, LOWSRC, LSPACE, LQUOTE, USEMAP, WIDTHS, TARGET,
-            VALUES, VALIGN, VSPACE, POSTER, POINTS, PROMPT, SCOPED, STRING,
-            SCHEME, STROKE, RADIUS, RESULT, REPEAT, RSPACE, ROTATE, RQUOTE,
-            ALTTEXT, ARCHIVE, AZIMUTH, CLOSURE, CHECKED, CLASSID, CHAROFF,
-            BGCOLOR, COLSPAN, CHARSET, COMPACT, CONTENT, ENCTYPE, DATASRC,
-            DATAFLD, DECLARE, DISPLAY, DIVISOR, DEFAULT, DESCENT, KERNING,
-            HANGING, HEADERS, ONPASTE, ONCLICK, OPTIMUM, ONBEGIN, ONKEYUP,
-            ONFOCUS, ONERROR, ONINPUT, ONABORT, ONSTART, ONRESET, OPACITY,
-            NOSHADE, MINSIZE, MAXSIZE, LOOPEND, LARGEOP, UNICODE, TARGETX,
-            TARGETY, VIEWBOX, VERSION, PATTERN, PROFILE, SPACING, RESTART,
-            ROWSPAN, SANDBOX, SUMMARY, STANDBY, REPLACE, AUTOPLAY, ADDITIVE,
-            CALCMODE, CODETYPE, CODEBASE, CONTROLS, BEVELLED, BASELINE,
-            EXPONENT, EDGEMODE, ENCODING, GLYPHREF, DATETIME, DISABLED,
-            FONTSIZE, KEYTIMES, PANOSE_1, HREFLANG, ONRESIZE, ONCHANGE,
-            ONBOUNCE, ONUNLOAD, ONFINISH, ONSCROLL, OPERATOR, OVERFLOW,
-            ONSUBMIT, ONREPEAT, ONSELECT, NOTATION, NORESIZE, MANIFEST,
-            MATHSIZE, MULTIPLE, LONGDESC, LANGUAGE, TEMPLATE, TABINDEX,
-            READONLY, SELECTED, ROWLINES, SEAMLESS, ROWALIGN, STRETCHY,
-            REQUIRED, XML_BASE, XML_LANG, X_HEIGHT, ARIA_OWNS, AUTOFOCUS,
-            ARIA_SORT, ACCESSKEY, ARIA_BUSY, ARIA_GRAB, AMPLITUDE, ARIA_LIVE,
-            CLIP_RULE, CLIP_PATH, EQUALROWS, ELEVATION, DIRECTION, DRAGGABLE,
-            FILTERRES, FILL_RULE, FONTSTYLE, FONT_SIZE, KEYPOINTS, HIDEFOCUS,
-            ONMESSAGE, INTERCEPT, ONDRAGEND, ONMOVEEND, ONINVALID, ONKEYDOWN,
-            ONFOCUSIN, ONMOUSEUP, INPUTMODE, ONROWEXIT, MATHCOLOR, MASKUNITS,
-            MAXLENGTH, LINEBREAK, LOOPSTART, TRANSFORM, V_HANGING, VALUETYPE,
-            POINTSATZ, POINTSATX, POINTSATY, PLAYCOUNT, SYMMETRIC, SCROLLING,
-            REPEATDUR, SELECTION, SEPARATOR, XML_SPACE, AUTOSUBMIT, ALPHABETIC,
-            ACTIONTYPE, ACCUMULATE, ARIA_LEVEL, COLUMNSPAN, CAP_HEIGHT,
-            BACKGROUND, GLYPH_NAME, GROUPALIGN, FONTFAMILY, FONTWEIGHT,
-            FONT_STYLE, KEYSPLINES, HTTP_EQUIV, ONACTIVATE, OCCURRENCE,
-            IRRELEVANT, ONDBLCLICK, ONDRAGDROP, ONKEYPRESS, ONROWENTER,
-            ONDRAGOVER, ONFOCUSOUT, ONMOUSEOUT, NUMOCTAVES, MARKER_MID,
-            MARKER_END, TEXTLENGTH, VISIBILITY, VIEWTARGET, VERT_ADV_Y,
-            PATHLENGTH, REPEAT_MAX, RADIOGROUP, STOP_COLOR, SEPARATORS,
-            REPEAT_MIN, ROWSPACING, ZOOMANDPAN, XLINK_TYPE, XLINK_ROLE,
-            XLINK_HREF, XLINK_SHOW, ACCENTUNDER, ARIA_SECRET, ARIA_ATOMIC,
-            ARIA_HIDDEN, ARIA_FLOWTO, ARABIC_FORM, CELLPADDING, CELLSPACING,
-            COLUMNWIDTH, COLUMNALIGN, COLUMNLINES, CONTEXTMENU, BASEPROFILE,
-            FONT_FAMILY, FRAMEBORDER, FILTERUNITS, FLOOD_COLOR, FONT_WEIGHT,
-            HORIZ_ADV_X, ONDRAGLEAVE, ONMOUSEMOVE, ORIENTATION, ONMOUSEDOWN,
-            ONMOUSEOVER, ONDRAGENTER, IDEOGRAPHIC, ONBEFORECUT, ONFORMINPUT,
-            ONDRAGSTART, ONMOVESTART, MARKERUNITS, MATHVARIANT, MARGINWIDTH,
-            MARKERWIDTH, TEXT_ANCHOR, TABLEVALUES, SCRIPTLEVEL, REPEATCOUNT,
-            STITCHTILES, STARTOFFSET, SCROLLDELAY, XMLNS_XLINK, XLINK_TITLE,
-            ARIA_INVALID, ARIA_PRESSED, ARIA_CHECKED, AUTOCOMPLETE,
-            ARIA_SETSIZE, ARIA_CHANNEL, EQUALCOLUMNS, DISPLAYSTYLE,
-            DATAFORMATAS, FILL_OPACITY, FONT_VARIANT, FONT_STRETCH,
-            FRAMESPACING, KERNELMATRIX, ONDEACTIVATE, ONROWSDELETE,
-            ONMOUSELEAVE, ONFORMCHANGE, ONCELLCHANGE, ONMOUSEWHEEL,
-            ONMOUSEENTER, ONAFTERPRINT, ONBEFORECOPY, MARGINHEIGHT,
-            MARKERHEIGHT, MARKER_START, MATHEMATICAL, LENGTHADJUST,
-            UNSELECTABLE, UNICODE_BIDI, UNITS_PER_EM, WORD_SPACING,
-            WRITING_MODE, V_ALPHABETIC, PATTERNUNITS, SPREADMETHOD,
-            SURFACESCALE, STROKE_WIDTH, REPEAT_START, STDDEVIATION,
-            STOP_OPACITY, ARIA_CONTROLS, ARIA_HASPOPUP, ACCENT_HEIGHT,
-            ARIA_VALUENOW, ARIA_RELEVANT, ARIA_POSINSET, ARIA_VALUEMAX,
-            ARIA_READONLY, ARIA_SELECTED, ARIA_REQUIRED, ARIA_EXPANDED,
-            ARIA_DISABLED, ATTRIBUTETYPE, ATTRIBUTENAME, ARIA_DATATYPE,
-            ARIA_VALUEMIN, BASEFREQUENCY, COLUMNSPACING, COLOR_PROFILE,
-            CLIPPATHUNITS, DEFINITIONURL, GRADIENTUNITS, FLOOD_OPACITY,
-            ONAFTERUPDATE, ONERRORUPDATE, ONBEFOREPASTE, ONLOSECAPTURE,
-            ONCONTEXTMENU, ONSELECTSTART, ONBEFOREPRINT, MOVABLELIMITS,
-            LINETHICKNESS, UNICODE_RANGE, THINMATHSPACE, VERT_ORIGIN_X,
-            VERT_ORIGIN_Y, V_IDEOGRAPHIC, PRESERVEALPHA, SCRIPTMINSIZE,
-            SPECIFICATION, XLINK_ACTUATE, XLINK_ARCROLE, ACCEPT_CHARSET,
-            ALIGNMENTSCOPE, ARIA_MULTILINE, BASELINE_SHIFT, HORIZ_ORIGIN_X,
-            HORIZ_ORIGIN_Y, ONBEFOREUPDATE, ONFILTERCHANGE, ONROWSINSERTED,
-            ONBEFOREUNLOAD, MATHBACKGROUND, LETTER_SPACING, LIGHTING_COLOR,
-            THICKMATHSPACE, TEXT_RENDERING, V_MATHEMATICAL, POINTER_EVENTS,
-            PRIMITIVEUNITS, SYSTEMLANGUAGE, STROKE_LINECAP, SUBSCRIPTSHIFT,
-            STROKE_OPACITY, ARIA_DROPEFFECT, ARIA_LABELLEDBY, ARIA_TEMPLATEID,
-            COLOR_RENDERING, CONTENTEDITABLE, DIFFUSECONSTANT, ONDATAAVAILABLE,
-            ONCONTROLSELECT, IMAGE_RENDERING, MEDIUMMATHSPACE, TEXT_DECORATION,
-            SHAPE_RENDERING, STROKE_LINEJOIN, REPEAT_TEMPLATE,
-            ARIA_DESCRIBEDBY, CONTENTSTYLETYPE, FONT_SIZE_ADJUST,
-            KERNELUNITLENGTH, ONBEFOREACTIVATE, ONPROPERTYCHANGE,
-            ONDATASETCHANGED, MASKCONTENTUNITS, PATTERNTRANSFORM,
-            REQUIREDFEATURES, RENDERING_INTENT, SPECULAREXPONENT,
-            SPECULARCONSTANT, SUPERSCRIPTSHIFT, STROKE_DASHARRAY,
-            XCHANNELSELECTOR, YCHANNELSELECTOR, ARIA_AUTOCOMPLETE,
-            CONTENTSCRIPTTYPE, ENABLE_BACKGROUND, DOMINANT_BASELINE,
-            GRADIENTTRANSFORM, ONBEFORDEACTIVATE, ONDATASETCOMPLETE,
-            OVERLINE_POSITION, ONBEFOREEDITFOCUS, LIMITINGCONEANGLE,
-            VERYTHINMATHSPACE, STROKE_DASHOFFSET, STROKE_MITERLIMIT,
-            ALIGNMENT_BASELINE, ONREADYSTATECHANGE, OVERLINE_THICKNESS,
-            UNDERLINE_POSITION, VERYTHICKMATHSPACE, REQUIREDEXTENSIONS,
-            COLOR_INTERPOLATION, UNDERLINE_THICKNESS, PRESERVEASPECTRATIO,
-            PATTERNCONTENTUNITS, ARIA_MULTISELECTABLE, SCRIPTSIZEMULTIPLIER,
-            ARIA_ACTIVEDESCENDANT, VERYVERYTHINMATHSPACE,
-            VERYVERYTHICKMATHSPACE, STRIKETHROUGH_POSITION,
-            STRIKETHROUGH_THICKNESS, EXTERNALRESOURCESREQUIRED,
-            GLYPH_ORIENTATION_VERTICAL, COLOR_INTERPOLATION_FILTERS,
-            GLYPH_ORIENTATION_HORIZONTAL, };
-
-    private final static int[] ATTRIBUTE_HASHES = { 1153, 1383, 1601, 1793,
-            1827, 1857, 68600, 69146, 69177, 70237, 70270, 71572, 71669, 72415,
-            72444, 74846, 74904, 74943, 75001, 75276, 75590, 84742, 84839,
-            85575, 85963, 85992, 87204, 88074, 88171, 89130, 89163, 3207892,
-            3283895, 3284791, 3338752, 3358197, 3369562, 3539124, 3562402,
-            3574260, 3670335, 3696933, 3721879, 135280021, 135346322,
-            136317019, 136475749, 136548517, 136652214, 136884919, 136902418,
-            136942992, 137292068, 139120259, 139785574, 142250603, 142314056,
-            142331176, 142519584, 144752417, 145106895, 146147200, 146765926,
-            148805544, 149655723, 149809441, 150018784, 150445028, 150923321,
-            152528754, 152536216, 152647366, 152962785, 155219321, 155654904,
-            157317483, 157350248, 157437941, 157447478, 157604838, 157685404,
-            157894402, 158315188, 166078431, 169409980, 169700259, 169856932,
-            170007032, 170409695, 170466488, 170513710, 170608367, 173028944,
-            173896963, 176090625, 176129212, 179390001, 179489057, 179627464,
-            179840468, 179849042, 180004216, 181779081, 183027151, 183645319,
-            183698797, 185922012, 185997252, 188312483, 188675799, 190977533,
-            190992569, 191006194, 191033518, 191038774, 191096249, 191166163,
-            191194426, 191522106, 191568039, 200104642, 202506661, 202537381,
-            202602917, 203070590, 203120766, 203389054, 203690071, 203971238,
-            203986524, 209040857, 209125756, 212055489, 212322418, 212746849,
-            213002877, 213055164, 213088023, 213259873, 213273386, 213435118,
-            213437318, 213438231, 213493071, 213532268, 213542834, 213584431,
-            213659891, 215285828, 215880731, 216112976, 216684637, 217369699,
-            217565298, 217576549, 218186795, 219743185, 220082234, 221623802,
-            221986406, 222283890, 223089542, 223138630, 223311265, 224547358,
-            224587256, 224589550, 224655650, 224785518, 224810917, 224813302,
-            225429618, 225432950, 225440869, 236107233, 236709921, 236838947,
-            237117095, 237143271, 237172455, 237209953, 237354143, 237372743,
-            237668065, 237703073, 237714273, 239743521, 240512803, 240522627,
-            240560417, 240656513, 241015715, 241062755, 241065383, 243523041,
-            245865199, 246261793, 246556195, 246774817, 246923491, 246928419,
-            246981667, 247014847, 247058369, 247112833, 247118177, 247119137,
-            247128739, 247316903, 249533729, 250235623, 250269543, 251083937,
-            251402351, 252339047, 253260911, 253293679, 254844367, 255547879,
-            256077281, 256345377, 258124199, 258354465, 258605063, 258744193,
-            258845603, 258856961, 258926689, 269869248, 270174334, 270709417,
-            270778994, 270781796, 271102503, 271478858, 271490090, 272870654,
-            273335275, 273369140, 273924313, 274108530, 274116736, 276818662,
-            277476156, 279156579, 279349675, 280108533, 280128712, 280132869,
-            280162403, 280280292, 280413430, 280506130, 280677397, 280678580,
-            280686710, 280689066, 282736758, 283110901, 283275116, 283823226,
-            283890012, 284479340, 284606461, 286700477, 286798916, 291557706,
-            291665349, 291804100, 292138018, 292166446, 292418738, 292451039,
-            300298041, 300374839, 300597935, 303073389, 303083839, 303266673,
-            303354997, 303430688, 303576261, 303724281, 303819694, 304242723,
-            304382625, 306247792, 307227811, 307468786, 307724489, 309671175,
-            310252031, 310358241, 310373094, 311015256, 313357609, 313683893,
-            313701861, 313706996, 313707317, 313710350, 314027746, 314038181,
-            314091299, 314205627, 314233813, 316741830, 316797986, 317486755,
-            317794164, 318721061, 320076137, 322657125, 322887778, 323506876,
-            323572412, 323605180, 323938869, 325060058, 325320188, 325398738,
-            325541490, 325671619, 333868843, 336806130, 337212108, 337282686,
-            337285434, 337585223, 338036037, 338298087, 338566051, 340943551,
-            341190970, 342995704, 343352124, 343912673, 344585053, 346977248,
-            347218098, 347262163, 347278576, 347438191, 347655959, 347684788,
-            347726430, 347727772, 347776035, 347776629, 349500753, 350880161,
-            350887073, 353384123, 355496998, 355906922, 355979793, 356545959,
-            358637867, 358905016, 359164318, 359247286, 359350571, 359579447,
-            365560330, 367399355, 367420285, 367510727, 368013212, 370234760,
-            370353345, 370710317, 371074566, 371122285, 371194213, 371448425,
-            371448430, 371545055, 371596922, 371758751, 371964792, 372151328,
-            376550136, 376710172, 376795771, 376826271, 376906556, 380514830,
-            380774774, 380775037, 381030322, 381136500, 381281631, 381282269,
-            381285504, 381330595, 381331422, 381335911, 381336484, 383907298,
-            383917408, 384595009, 384595013, 387799894, 387823201, 392581647,
-            392584937, 392742684, 392906485, 393003349, 400644707, 400973830,
-            404428547, 404432113, 404432865, 404469244, 404478897, 404694860,
-            406887479, 408294949, 408789955, 410022510, 410467324, 410586448,
-            410945965, 411845275, 414327152, 414327932, 414329781, 414346257,
-            414346439, 414639928, 414835998, 414894517, 414986533, 417465377,
-            417465381, 417492216, 418259232, 419310946, 420103495, 420242342,
-            420380455, 420658662, 420717432, 423183880, 424539259, 425929170,
-            425972964, 426050649, 426126450, 426142833, 426607922, 437289840,
-            437347469, 437412335, 437423943, 437455540, 437462252, 437597991,
-            437617485, 437986305, 437986507, 437986828, 437987072, 438015591,
-            438034813, 438038966, 438179623, 438347971, 438483573, 438547062,
-            438895551, 441592676, 442032555, 443548979, 447881379, 447881655,
-            447881895, 447887844, 448416189, 448445746, 448449012, 450942191,
-            452816744, 453668677, 454434495, 456610076, 456642844, 456738709,
-            457544600, 459451897, 459680944, 468058810, 468083581, 470964084,
-            471470955, 471567278, 472267822, 481177859, 481210627, 481435874,
-            481455115, 481485378, 481490218, 485105638, 486005878, 486383494,
-            487988916, 488103783, 490661867, 491574090, 491578272, 493041952,
-            493441205, 493582844, 493716979, 504577572, 504740359, 505091638,
-            505592418, 505656212, 509516275, 514998531, 515571132, 515594682,
-            518712698, 521362273, 526592419, 526807354, 527348842, 538294791,
-            539214049, 544689535, 545535009, 548544752, 548563346, 548595116,
-            551679010, 558034099, 560329411, 560356209, 560671018, 560671152,
-            560692590, 560845442, 569212097, 569474241, 572252718, 572768481,
-            575326764, 576174758, 576190819, 582099184, 582099438, 582372519,
-            582558889, 586552164, 591325418, 594231990, 594243961, 605711268,
-            615672071, 616086845, 621792370, 624879850, 627432831, 640040548,
-            654392808, 658675477, 659420283, 672891587, 694768102, 705890982,
-            725543146, 759097578, 761686526, 795383908, 843809551, 878105336,
-            908643300, 945213471, };
+    public static final AttributeName D = new AttributeName(ALL_NO_NS, SAME_LOCAL("d"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName K = new AttributeName(ALL_NO_NS, SAME_LOCAL("k"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName R = new AttributeName(ALL_NO_NS, SAME_LOCAL("r"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName X = new AttributeName(ALL_NO_NS, SAME_LOCAL("x"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName Y = new AttributeName(ALL_NO_NS, SAME_LOCAL("y"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName Z = new AttributeName(ALL_NO_NS, SAME_LOCAL("z"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BY = new AttributeName(ALL_NO_NS, SAME_LOCAL("by"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CX = new AttributeName(ALL_NO_NS, SAME_LOCAL("cx"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CY = new AttributeName(ALL_NO_NS, SAME_LOCAL("cy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DX = new AttributeName(ALL_NO_NS, SAME_LOCAL("dx"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DY = new AttributeName(ALL_NO_NS, SAME_LOCAL("dy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName G2 = new AttributeName(ALL_NO_NS, SAME_LOCAL("g2"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName G1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("g1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FX = new AttributeName(ALL_NO_NS, SAME_LOCAL("fx"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FY = new AttributeName(ALL_NO_NS, SAME_LOCAL("fy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName K4 = new AttributeName(ALL_NO_NS, SAME_LOCAL("k4"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName K2 = new AttributeName(ALL_NO_NS, SAME_LOCAL("k2"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName K3 = new AttributeName(ALL_NO_NS, SAME_LOCAL("k3"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName K1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("k1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ID = new AttributeName(ALL_NO_NS, SAME_LOCAL("id"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName IN = new AttributeName(ALL_NO_NS, SAME_LOCAL("in"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName U2 = new AttributeName(ALL_NO_NS, SAME_LOCAL("u2"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName U1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("u1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RT = new AttributeName(ALL_NO_NS, SAME_LOCAL("rt"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RX = new AttributeName(ALL_NO_NS, SAME_LOCAL("rx"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RY = new AttributeName(ALL_NO_NS, SAME_LOCAL("ry"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TO = new AttributeName(ALL_NO_NS, SAME_LOCAL("to"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName Y2 = new AttributeName(ALL_NO_NS, SAME_LOCAL("y2"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName Y1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("y1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName X1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("x1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName X2 = new AttributeName(ALL_NO_NS, SAME_LOCAL("x2"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ALT = new AttributeName(ALL_NO_NS, SAME_LOCAL("alt"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DIR = new AttributeName(ALL_NO_NS, SAME_LOCAL("dir"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName DUR = new AttributeName(ALL_NO_NS, SAME_LOCAL("dur"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName END = new AttributeName(ALL_NO_NS, SAME_LOCAL("end"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("for"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName IN2 = new AttributeName(ALL_NO_NS, SAME_LOCAL("in2"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MAX = new AttributeName(ALL_NO_NS, SAME_LOCAL("max"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("min"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LOW = new AttributeName(ALL_NO_NS, SAME_LOCAL("low"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REL = new AttributeName(ALL_NO_NS, SAME_LOCAL("rel"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REV = new AttributeName(ALL_NO_NS, SAME_LOCAL("rev"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SRC = new AttributeName(ALL_NO_NS, SAME_LOCAL("src"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName AXIS = new AttributeName(ALL_NO_NS, SAME_LOCAL("axis"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ABBR = new AttributeName(ALL_NO_NS, SAME_LOCAL("abbr"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BBOX = new AttributeName(ALL_NO_NS, SAME_LOCAL("bbox"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CITE = new AttributeName(ALL_NO_NS, SAME_LOCAL("cite"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CODE = new AttributeName(ALL_NO_NS, SAME_LOCAL("code"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BIAS = new AttributeName(ALL_NO_NS, SAME_LOCAL("bias"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLS = new AttributeName(ALL_NO_NS, SAME_LOCAL("cols"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLIP = new AttributeName(ALL_NO_NS, SAME_LOCAL("clip"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CHAR = new AttributeName(ALL_NO_NS, SAME_LOCAL("char"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BASE = new AttributeName(ALL_NO_NS, SAME_LOCAL("base"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName EDGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("edge"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DATA = new AttributeName(ALL_NO_NS, SAME_LOCAL("data"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FILL = new AttributeName(ALL_NO_NS, SAME_LOCAL("fill"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FROM = new AttributeName(ALL_NO_NS, SAME_LOCAL("from"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FORM = new AttributeName(ALL_NO_NS, SAME_LOCAL("form"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("face"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HIGH = new AttributeName(ALL_NO_NS, SAME_LOCAL("high"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HREF = new AttributeName(ALL_NO_NS, SAME_LOCAL("href"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OPEN = new AttributeName(ALL_NO_NS, SAME_LOCAL("open"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ICON = new AttributeName(ALL_NO_NS, SAME_LOCAL("icon"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NAME = new AttributeName(ALL_NO_NS, SAME_LOCAL("name"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MODE = new AttributeName(ALL_NO_NS, SAME_LOCAL("mode"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MASK = new AttributeName(ALL_NO_NS, SAME_LOCAL("mask"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LINK = new AttributeName(ALL_NO_NS, SAME_LOCAL("link"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LANG = new AttributeName(LANG_NS, SAME_LOCAL("lang"), LANG_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LIST = new AttributeName(ALL_NO_NS, SAME_LOCAL("list"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TYPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("type"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName WHEN = new AttributeName(ALL_NO_NS, SAME_LOCAL("when"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName WRAP = new AttributeName(ALL_NO_NS, SAME_LOCAL("wrap"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TEXT = new AttributeName(ALL_NO_NS, SAME_LOCAL("text"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PATH = new AttributeName(ALL_NO_NS, SAME_LOCAL("path"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PING = new AttributeName(ALL_NO_NS, SAME_LOCAL("ping"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REFX = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("refx", "refX"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REFY = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("refy", "refY"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("size"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SEED = new AttributeName(ALL_NO_NS, SAME_LOCAL("seed"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ROWS = new AttributeName(ALL_NO_NS, SAME_LOCAL("rows"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPAN = new AttributeName(ALL_NO_NS, SAME_LOCAL("span"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STEP = new AttributeName(ALL_NO_NS, SAME_LOCAL("step"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName ROLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("role"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XREF = new AttributeName(ALL_NO_NS, SAME_LOCAL("xref"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ASYNC = new AttributeName(ALL_NO_NS, SAME_LOCAL("async"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName ALINK = new AttributeName(ALL_NO_NS, SAME_LOCAL("alink"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ALIGN = new AttributeName(ALL_NO_NS, SAME_LOCAL("align"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName CLOSE = new AttributeName(ALL_NO_NS, SAME_LOCAL("close"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("color"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLASS = new AttributeName(ALL_NO_NS, SAME_LOCAL("class"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLEAR = new AttributeName(ALL_NO_NS, SAME_LOCAL("clear"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName BEGIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("begin"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DEPTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("depth"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DEFER = new AttributeName(ALL_NO_NS, SAME_LOCAL("defer"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName FENCE = new AttributeName(ALL_NO_NS, SAME_LOCAL("fence"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FRAME = new AttributeName(ALL_NO_NS, SAME_LOCAL("frame"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName ISMAP = new AttributeName(ALL_NO_NS, SAME_LOCAL("ismap"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName ONEND = new AttributeName(ALL_NO_NS, SAME_LOCAL("onend"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName INDEX = new AttributeName(ALL_NO_NS, SAME_LOCAL("index"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ORDER = new AttributeName(ALL_NO_NS, SAME_LOCAL("order"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OTHER = new AttributeName(ALL_NO_NS, SAME_LOCAL("other"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCUT = new AttributeName(ALL_NO_NS, SAME_LOCAL("oncut"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NARGS = new AttributeName(ALL_NO_NS, SAME_LOCAL("nargs"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MEDIA = new AttributeName(ALL_NO_NS, SAME_LOCAL("media"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LABEL = new AttributeName(ALL_NO_NS, SAME_LOCAL("label"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LOCAL = new AttributeName(ALL_NO_NS, SAME_LOCAL("local"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName WIDTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("width"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TITLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("title"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VLINK = new AttributeName(ALL_NO_NS, SAME_LOCAL("vlink"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VALUE = new AttributeName(ALL_NO_NS, SAME_LOCAL("value"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SLOPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("slope"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SHAPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("shape"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName SCOPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("scope"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName SCALE = new AttributeName(ALL_NO_NS, SAME_LOCAL("scale"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPEED = new AttributeName(ALL_NO_NS, SAME_LOCAL("speed"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STYLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("style"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RULES = new AttributeName(ALL_NO_NS, SAME_LOCAL("rules"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName STEMH = new AttributeName(ALL_NO_NS, SAME_LOCAL("stemh"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STEMV = new AttributeName(ALL_NO_NS, SAME_LOCAL("stemv"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName START = new AttributeName(ALL_NO_NS, SAME_LOCAL("start"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XMLNS = new AttributeName(XMLNS_NS, SAME_LOCAL("xmlns"), ALL_NO_PREFIX, IS_XMLNS);
+    public static final AttributeName ACCEPT = new AttributeName(ALL_NO_NS, SAME_LOCAL("accept"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACCENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("accent"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ASCENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("ascent"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACTIVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("active"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName ALTIMG = new AttributeName(ALL_NO_NS, SAME_LOCAL("altimg"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACTION = new AttributeName(ALL_NO_NS, SAME_LOCAL("action"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BORDER = new AttributeName(ALL_NO_NS, SAME_LOCAL("border"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CURSOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("cursor"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COORDS = new AttributeName(ALL_NO_NS, SAME_LOCAL("coords"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FILTER = new AttributeName(ALL_NO_NS, SAME_LOCAL("filter"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FORMAT = new AttributeName(ALL_NO_NS, SAME_LOCAL("format"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HIDDEN = new AttributeName(ALL_NO_NS, SAME_LOCAL("hidden"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("hspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("height"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmove"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONLOAD = new AttributeName(ALL_NO_NS, SAME_LOCAL("onload"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAG = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondrag"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ORIGIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("origin"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONZOOM = new AttributeName(ALL_NO_NS, SAME_LOCAL("onzoom"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONHELP = new AttributeName(ALL_NO_NS, SAME_LOCAL("onhelp"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONSTOP = new AttributeName(ALL_NO_NS, SAME_LOCAL("onstop"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDROP = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondrop"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBLUR = new AttributeName(ALL_NO_NS, SAME_LOCAL("onblur"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OBJECT = new AttributeName(ALL_NO_NS, SAME_LOCAL("object"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OFFSET = new AttributeName(ALL_NO_NS, SAME_LOCAL("offset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ORIENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("orient"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCOPY = new AttributeName(ALL_NO_NS, SAME_LOCAL("oncopy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NOWRAP = new AttributeName(ALL_NO_NS, SAME_LOCAL("nowrap"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName NOHREF = new AttributeName(ALL_NO_NS, SAME_LOCAL("nohref"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName MACROS = new AttributeName(ALL_NO_NS, SAME_LOCAL("macros"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName METHOD = new AttributeName(ALL_NO_NS, SAME_LOCAL("method"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName LOWSRC = new AttributeName(ALL_NO_NS, SAME_LOCAL("lowsrc"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("lspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LQUOTE = new AttributeName(ALL_NO_NS, SAME_LOCAL("lquote"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName USEMAP = new AttributeName(ALL_NO_NS, SAME_LOCAL("usemap"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName WIDTHS = new AttributeName(ALL_NO_NS, SAME_LOCAL("widths"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TARGET = new AttributeName(ALL_NO_NS, SAME_LOCAL("target"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VALUES = new AttributeName(ALL_NO_NS, SAME_LOCAL("values"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VALIGN = new AttributeName(ALL_NO_NS, SAME_LOCAL("valign"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName VSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("vspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName POSTER = new AttributeName(ALL_NO_NS, SAME_LOCAL("poster"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName POINTS = new AttributeName(ALL_NO_NS, SAME_LOCAL("points"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PROMPT = new AttributeName(ALL_NO_NS, SAME_LOCAL("prompt"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCOPED = new AttributeName(ALL_NO_NS, SAME_LOCAL("scoped"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STRING = new AttributeName(ALL_NO_NS, SAME_LOCAL("string"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCHEME = new AttributeName(ALL_NO_NS, SAME_LOCAL("scheme"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RADIUS = new AttributeName(ALL_NO_NS, SAME_LOCAL("radius"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RESULT = new AttributeName(ALL_NO_NS, SAME_LOCAL("result"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPEAT = new AttributeName(ALL_NO_NS, SAME_LOCAL("repeat"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("rspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ROTATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("rotate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RQUOTE = new AttributeName(ALL_NO_NS, SAME_LOCAL("rquote"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ALTTEXT = new AttributeName(ALL_NO_NS, SAME_LOCAL("alttext"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARCHIVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("archive"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName AZIMUTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("azimuth"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLOSURE = new AttributeName(ALL_NO_NS, SAME_LOCAL("closure"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CHECKED = new AttributeName(ALL_NO_NS, SAME_LOCAL("checked"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName CLASSID = new AttributeName(ALL_NO_NS, SAME_LOCAL("classid"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CHAROFF = new AttributeName(ALL_NO_NS, SAME_LOCAL("charoff"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BGCOLOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("bgcolor"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLSPAN = new AttributeName(ALL_NO_NS, SAME_LOCAL("colspan"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CHARSET = new AttributeName(ALL_NO_NS, SAME_LOCAL("charset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COMPACT = new AttributeName(ALL_NO_NS, SAME_LOCAL("compact"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName CONTENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("content"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ENCTYPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("enctype"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName DATASRC = new AttributeName(ALL_NO_NS, SAME_LOCAL("datasrc"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DATAFLD = new AttributeName(ALL_NO_NS, SAME_LOCAL("datafld"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DECLARE = new AttributeName(ALL_NO_NS, SAME_LOCAL("declare"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName DISPLAY = new AttributeName(ALL_NO_NS, SAME_LOCAL("display"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DIVISOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("divisor"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DEFAULT = new AttributeName(ALL_NO_NS, SAME_LOCAL("default"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName DESCENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("descent"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName KERNING = new AttributeName(ALL_NO_NS, SAME_LOCAL("kerning"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HANGING = new AttributeName(ALL_NO_NS, SAME_LOCAL("hanging"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HEADERS = new AttributeName(ALL_NO_NS, SAME_LOCAL("headers"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONPASTE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onpaste"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCLICK = new AttributeName(ALL_NO_NS, SAME_LOCAL("onclick"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OPTIMUM = new AttributeName(ALL_NO_NS, SAME_LOCAL("optimum"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEGIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbegin"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONKEYUP = new AttributeName(ALL_NO_NS, SAME_LOCAL("onkeyup"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFOCUS = new AttributeName(ALL_NO_NS, SAME_LOCAL("onfocus"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONERROR = new AttributeName(ALL_NO_NS, SAME_LOCAL("onerror"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONINPUT = new AttributeName(ALL_NO_NS, SAME_LOCAL("oninput"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONABORT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onabort"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONSTART = new AttributeName(ALL_NO_NS, SAME_LOCAL("onstart"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONRESET = new AttributeName(ALL_NO_NS, SAME_LOCAL("onreset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OPACITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("opacity"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NOSHADE = new AttributeName(ALL_NO_NS, SAME_LOCAL("noshade"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName MINSIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("minsize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MAXSIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("maxsize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LOOPEND = new AttributeName(ALL_NO_NS, SAME_LOCAL("loopend"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LARGEOP = new AttributeName(ALL_NO_NS, SAME_LOCAL("largeop"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNICODE = new AttributeName(ALL_NO_NS, SAME_LOCAL("unicode"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TARGETX = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("targetx", "targetX"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TARGETY = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("targety", "targetY"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VIEWBOX = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("viewbox", "viewBox"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERSION = new AttributeName(ALL_NO_NS, SAME_LOCAL("version"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PATTERN = new AttributeName(ALL_NO_NS, SAME_LOCAL("pattern"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PROFILE = new AttributeName(ALL_NO_NS, SAME_LOCAL("profile"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("spacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RESTART = new AttributeName(ALL_NO_NS, SAME_LOCAL("restart"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ROWSPAN = new AttributeName(ALL_NO_NS, SAME_LOCAL("rowspan"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SANDBOX = new AttributeName(ALL_NO_NS, SAME_LOCAL("sandbox"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SUMMARY = new AttributeName(ALL_NO_NS, SAME_LOCAL("summary"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STANDBY = new AttributeName(ALL_NO_NS, SAME_LOCAL("standby"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPLACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("replace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName AUTOPLAY = new AttributeName(ALL_NO_NS, SAME_LOCAL("autoplay"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ADDITIVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("additive"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CALCMODE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("calcmode", "calcMode"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CODETYPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("codetype"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CODEBASE = new AttributeName(ALL_NO_NS, SAME_LOCAL("codebase"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CONTROLS = new AttributeName(ALL_NO_NS, SAME_LOCAL("controls"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BEVELLED = new AttributeName(ALL_NO_NS, SAME_LOCAL("bevelled"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BASELINE = new AttributeName(ALL_NO_NS, SAME_LOCAL("baseline"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName EXPONENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("exponent"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName EDGEMODE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("edgemode", "edgeMode"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ENCODING = new AttributeName(ALL_NO_NS, SAME_LOCAL("encoding"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GLYPHREF = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("glyphref", "glyphRef"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DATETIME = new AttributeName(ALL_NO_NS, SAME_LOCAL("datetime"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DISABLED = new AttributeName(ALL_NO_NS, SAME_LOCAL("disabled"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName FONTSIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("fontsize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName KEYTIMES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("keytimes", "keyTimes"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PANOSE_1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("panose-1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HREFLANG = new AttributeName(ALL_NO_NS, SAME_LOCAL("hreflang"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONRESIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onresize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCHANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onchange"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBOUNCE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbounce"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONUNLOAD = new AttributeName(ALL_NO_NS, SAME_LOCAL("onunload"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFINISH = new AttributeName(ALL_NO_NS, SAME_LOCAL("onfinish"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONSCROLL = new AttributeName(ALL_NO_NS, SAME_LOCAL("onscroll"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OPERATOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("operator"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OVERFLOW = new AttributeName(ALL_NO_NS, SAME_LOCAL("overflow"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONSUBMIT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onsubmit"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONREPEAT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onrepeat"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONSELECT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onselect"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NOTATION = new AttributeName(ALL_NO_NS, SAME_LOCAL("notation"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NORESIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("noresize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName MANIFEST = new AttributeName(ALL_NO_NS, SAME_LOCAL("manifest"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MATHSIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("mathsize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MULTIPLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("multiple"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName LONGDESC = new AttributeName(ALL_NO_NS, SAME_LOCAL("longdesc"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LANGUAGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("language"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TEMPLATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("template"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TABINDEX = new AttributeName(ALL_NO_NS, SAME_LOCAL("tabindex"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName READONLY = new AttributeName(ALL_NO_NS, SAME_LOCAL("readonly"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName SELECTED = new AttributeName(ALL_NO_NS, SAME_LOCAL("selected"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName ROWLINES = new AttributeName(ALL_NO_NS, SAME_LOCAL("rowlines"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SEAMLESS = new AttributeName(ALL_NO_NS, SAME_LOCAL("seamless"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ROWALIGN = new AttributeName(ALL_NO_NS, SAME_LOCAL("rowalign"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STRETCHY = new AttributeName(ALL_NO_NS, SAME_LOCAL("stretchy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REQUIRED = new AttributeName(ALL_NO_NS, SAME_LOCAL("required"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName XML_BASE = new AttributeName(XML_NS, COLONIFIED_LOCAL("xml:base", "base"), XML_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName XML_LANG = new AttributeName(XML_NS, COLONIFIED_LOCAL("xml:lang", "lang"), XML_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName X_HEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("x-height"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_OWNS = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-owns"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName AUTOFOCUS = new AttributeName(ALL_NO_NS, SAME_LOCAL("autofocus"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName ARIA_SORT = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-sort"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACCESSKEY = new AttributeName(ALL_NO_NS, SAME_LOCAL("accesskey"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_BUSY = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-busy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_GRAB = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-grab"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName AMPLITUDE = new AttributeName(ALL_NO_NS, SAME_LOCAL("amplitude"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_LIVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-live"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLIP_RULE = new AttributeName(ALL_NO_NS, SAME_LOCAL("clip-rule"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLIP_PATH = new AttributeName(ALL_NO_NS, SAME_LOCAL("clip-path"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName EQUALROWS = new AttributeName(ALL_NO_NS, SAME_LOCAL("equalrows"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ELEVATION = new AttributeName(ALL_NO_NS, SAME_LOCAL("elevation"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DIRECTION = new AttributeName(ALL_NO_NS, SAME_LOCAL("direction"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DRAGGABLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("draggable"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FILTERRES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("filterres", "filterRes"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FILL_RULE = new AttributeName(ALL_NO_NS, SAME_LOCAL("fill-rule"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONTSTYLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("fontstyle"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_SIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-size"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName KEYPOINTS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("keypoints", "keyPoints"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HIDEFOCUS = new AttributeName(ALL_NO_NS, SAME_LOCAL("hidefocus"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMESSAGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmessage"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName INTERCEPT = new AttributeName(ALL_NO_NS, SAME_LOCAL("intercept"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAGEND = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondragend"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOVEEND = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmoveend"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONINVALID = new AttributeName(ALL_NO_NS, SAME_LOCAL("oninvalid"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONKEYDOWN = new AttributeName(ALL_NO_NS, SAME_LOCAL("onkeydown"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFOCUSIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("onfocusin"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEUP = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmouseup"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName INPUTMODE = new AttributeName(ALL_NO_NS, SAME_LOCAL("inputmode"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONROWEXIT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onrowexit"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MATHCOLOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("mathcolor"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MASKUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("maskunits", "maskUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MAXLENGTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("maxlength"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LINEBREAK = new AttributeName(ALL_NO_NS, SAME_LOCAL("linebreak"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LOOPSTART = new AttributeName(ALL_NO_NS, SAME_LOCAL("loopstart"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TRANSFORM = new AttributeName(ALL_NO_NS, SAME_LOCAL("transform"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName V_HANGING = new AttributeName(ALL_NO_NS, SAME_LOCAL("v-hanging"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VALUETYPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("valuetype"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName POINTSATZ = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("pointsatz", "pointsAtZ"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName POINTSATX = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("pointsatx", "pointsAtX"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName POINTSATY = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("pointsaty", "pointsAtY"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PLAYCOUNT = new AttributeName(ALL_NO_NS, SAME_LOCAL("playcount"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SYMMETRIC = new AttributeName(ALL_NO_NS, SAME_LOCAL("symmetric"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCROLLING = new AttributeName(ALL_NO_NS, SAME_LOCAL("scrolling"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName REPEATDUR = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("repeatdur", "repeatDur"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SELECTION = new AttributeName(ALL_NO_NS, SAME_LOCAL("selection"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SEPARATOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("separator"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XML_SPACE = new AttributeName(XML_NS, COLONIFIED_LOCAL("xml:space", "space"), XML_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName AUTOSUBMIT = new AttributeName(ALL_NO_NS, SAME_LOCAL("autosubmit"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
+    public static final AttributeName ALPHABETIC = new AttributeName(ALL_NO_NS, SAME_LOCAL("alphabetic"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACTIONTYPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("actiontype"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACCUMULATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("accumulate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_LEVEL = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-level"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLUMNSPAN = new AttributeName(ALL_NO_NS, SAME_LOCAL("columnspan"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CAP_HEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("cap-height"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BACKGROUND = new AttributeName(ALL_NO_NS, SAME_LOCAL("background"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GLYPH_NAME = new AttributeName(ALL_NO_NS, SAME_LOCAL("glyph-name"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GROUPALIGN = new AttributeName(ALL_NO_NS, SAME_LOCAL("groupalign"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONTFAMILY = new AttributeName(ALL_NO_NS, SAME_LOCAL("fontfamily"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONTWEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("fontweight"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_STYLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-style"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName KEYSPLINES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("keysplines", "keySplines"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HTTP_EQUIV = new AttributeName(ALL_NO_NS, SAME_LOCAL("http-equiv"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONACTIVATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onactivate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OCCURRENCE = new AttributeName(ALL_NO_NS, SAME_LOCAL("occurrence"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName IRRELEVANT = new AttributeName(ALL_NO_NS, SAME_LOCAL("irrelevant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDBLCLICK = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondblclick"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAGDROP = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondragdrop"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONKEYPRESS = new AttributeName(ALL_NO_NS, SAME_LOCAL("onkeypress"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONROWENTER = new AttributeName(ALL_NO_NS, SAME_LOCAL("onrowenter"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAGOVER = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondragover"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFOCUSOUT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onfocusout"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEOUT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmouseout"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName NUMOCTAVES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("numoctaves", "numOctaves"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARKER_MID = new AttributeName(ALL_NO_NS, SAME_LOCAL("marker-mid"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARKER_END = new AttributeName(ALL_NO_NS, SAME_LOCAL("marker-end"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TEXTLENGTH = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("textlength", "textLength"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VISIBILITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("visibility"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VIEWTARGET = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("viewtarget", "viewTarget"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERT_ADV_Y = new AttributeName(ALL_NO_NS, SAME_LOCAL("vert-adv-y"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PATHLENGTH = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("pathlength", "pathLength"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPEAT_MAX = new AttributeName(ALL_NO_NS, SAME_LOCAL("repeat-max"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RADIOGROUP = new AttributeName(ALL_NO_NS, SAME_LOCAL("radiogroup"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STOP_COLOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("stop-color"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SEPARATORS = new AttributeName(ALL_NO_NS, SAME_LOCAL("separators"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPEAT_MIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("repeat-min"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ROWSPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("rowspacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ZOOMANDPAN = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("zoomandpan", "zoomAndPan"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XLINK_TYPE = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:type", "type"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName XLINK_ROLE = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:role", "role"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName XLINK_HREF = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:href", "href"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName XLINK_SHOW = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:show", "show"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName ACCENTUNDER = new AttributeName(ALL_NO_NS, SAME_LOCAL("accentunder"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_SECRET = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-secret"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_ATOMIC = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-atomic"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_HIDDEN = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-hidden"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_FLOWTO = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-flowto"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARABIC_FORM = new AttributeName(ALL_NO_NS, SAME_LOCAL("arabic-form"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CELLPADDING = new AttributeName(ALL_NO_NS, SAME_LOCAL("cellpadding"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CELLSPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("cellspacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLUMNWIDTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("columnwidth"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLUMNALIGN = new AttributeName(ALL_NO_NS, SAME_LOCAL("columnalign"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLUMNLINES = new AttributeName(ALL_NO_NS, SAME_LOCAL("columnlines"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CONTEXTMENU = new AttributeName(ALL_NO_NS, SAME_LOCAL("contextmenu"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BASEPROFILE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("baseprofile", "baseProfile"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_FAMILY = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-family"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FRAMEBORDER = new AttributeName(ALL_NO_NS, SAME_LOCAL("frameborder"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FILTERUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("filterunits", "filterUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FLOOD_COLOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("flood-color"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_WEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-weight"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HORIZ_ADV_X = new AttributeName(ALL_NO_NS, SAME_LOCAL("horiz-adv-x"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAGLEAVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondragleave"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEMOVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmousemove"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ORIENTATION = new AttributeName(ALL_NO_NS, SAME_LOCAL("orientation"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEDOWN = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmousedown"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEOVER = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmouseover"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAGENTER = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondragenter"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName IDEOGRAPHIC = new AttributeName(ALL_NO_NS, SAME_LOCAL("ideographic"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFORECUT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforecut"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFORMINPUT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onforminput"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDRAGSTART = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondragstart"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOVESTART = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmovestart"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARKERUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("markerunits", "markerUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MATHVARIANT = new AttributeName(ALL_NO_NS, SAME_LOCAL("mathvariant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARGINWIDTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("marginwidth"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARKERWIDTH = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("markerwidth", "markerWidth"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TEXT_ANCHOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("text-anchor"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TABLEVALUES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("tablevalues", "tableValues"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCRIPTLEVEL = new AttributeName(ALL_NO_NS, SAME_LOCAL("scriptlevel"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPEATCOUNT = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("repeatcount", "repeatCount"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STITCHTILES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("stitchtiles", "stitchTiles"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STARTOFFSET = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("startoffset", "startOffset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCROLLDELAY = new AttributeName(ALL_NO_NS, SAME_LOCAL("scrolldelay"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XMLNS_XLINK = new AttributeName(XMLNS_NS, COLONIFIED_LOCAL("xmlns:xlink", "xlink"), XMLNS_PREFIX, IS_XMLNS);
+    public static final AttributeName XLINK_TITLE = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:title", "title"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName ARIA_INVALID = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-invalid"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_PRESSED = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-pressed"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_CHECKED = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-checked"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName AUTOCOMPLETE = new AttributeName(ALL_NO_NS, SAME_LOCAL("autocomplete"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName ARIA_SETSIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-setsize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_CHANNEL = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-channel"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName EQUALCOLUMNS = new AttributeName(ALL_NO_NS, SAME_LOCAL("equalcolumns"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DISPLAYSTYLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("displaystyle"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DATAFORMATAS = new AttributeName(ALL_NO_NS, SAME_LOCAL("dataformatas"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED);
+    public static final AttributeName FILL_OPACITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("fill-opacity"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_VARIANT = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-variant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_STRETCH = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-stretch"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FRAMESPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("framespacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName KERNELMATRIX = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("kernelmatrix", "kernelMatrix"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDEACTIVATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondeactivate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONROWSDELETE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onrowsdelete"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSELEAVE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmouseleave"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFORMCHANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onformchange"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCELLCHANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("oncellchange"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEWHEEL = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmousewheel"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONMOUSEENTER = new AttributeName(ALL_NO_NS, SAME_LOCAL("onmouseenter"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONAFTERPRINT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onafterprint"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFORECOPY = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforecopy"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARGINHEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("marginheight"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARKERHEIGHT = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("markerheight", "markerHeight"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MARKER_START = new AttributeName(ALL_NO_NS, SAME_LOCAL("marker-start"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MATHEMATICAL = new AttributeName(ALL_NO_NS, SAME_LOCAL("mathematical"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LENGTHADJUST = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("lengthadjust", "lengthAdjust"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNSELECTABLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("unselectable"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNICODE_BIDI = new AttributeName(ALL_NO_NS, SAME_LOCAL("unicode-bidi"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNITS_PER_EM = new AttributeName(ALL_NO_NS, SAME_LOCAL("units-per-em"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName WORD_SPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("word-spacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName WRITING_MODE = new AttributeName(ALL_NO_NS, SAME_LOCAL("writing-mode"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName V_ALPHABETIC = new AttributeName(ALL_NO_NS, SAME_LOCAL("v-alphabetic"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PATTERNUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("patternunits", "patternUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPREADMETHOD = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("spreadmethod", "spreadMethod"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SURFACESCALE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("surfacescale", "surfaceScale"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_WIDTH = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-width"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPEAT_START = new AttributeName(ALL_NO_NS, SAME_LOCAL("repeat-start"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STDDEVIATION = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("stddeviation", "stdDeviation"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STOP_OPACITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("stop-opacity"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_CONTROLS = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-controls"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_HASPOPUP = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-haspopup"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ACCENT_HEIGHT = new AttributeName(ALL_NO_NS, SAME_LOCAL("accent-height"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_VALUENOW = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-valuenow"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_RELEVANT = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-relevant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_POSINSET = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-posinset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_VALUEMAX = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-valuemax"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_READONLY = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-readonly"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_SELECTED = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-selected"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_REQUIRED = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-required"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_EXPANDED = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-expanded"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_DISABLED = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-disabled"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ATTRIBUTETYPE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("attributetype", "attributeType"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ATTRIBUTENAME = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("attributename", "attributeName"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_DATATYPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-datatype"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_VALUEMIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-valuemin"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BASEFREQUENCY = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("basefrequency", "baseFrequency"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLUMNSPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("columnspacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLOR_PROFILE = new AttributeName(ALL_NO_NS, SAME_LOCAL("color-profile"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CLIPPATHUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("clippathunits", "clipPathUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DEFINITIONURL = new AttributeName(ALL_NO_NS, MATH_DIFFERENT("definitionurl", "definitionURL"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GRADIENTUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("gradientunits", "gradientUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FLOOD_OPACITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("flood-opacity"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONAFTERUPDATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onafterupdate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONERRORUPDATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onerrorupdate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFOREPASTE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforepaste"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONLOSECAPTURE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onlosecapture"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCONTEXTMENU = new AttributeName(ALL_NO_NS, SAME_LOCAL("oncontextmenu"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONSELECTSTART = new AttributeName(ALL_NO_NS, SAME_LOCAL("onselectstart"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFOREPRINT = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforeprint"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MOVABLELIMITS = new AttributeName(ALL_NO_NS, SAME_LOCAL("movablelimits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LINETHICKNESS = new AttributeName(ALL_NO_NS, SAME_LOCAL("linethickness"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNICODE_RANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("unicode-range"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName THINMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("thinmathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERT_ORIGIN_X = new AttributeName(ALL_NO_NS, SAME_LOCAL("vert-origin-x"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERT_ORIGIN_Y = new AttributeName(ALL_NO_NS, SAME_LOCAL("vert-origin-y"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName V_IDEOGRAPHIC = new AttributeName(ALL_NO_NS, SAME_LOCAL("v-ideographic"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PRESERVEALPHA = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("preservealpha", "preserveAlpha"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCRIPTMINSIZE = new AttributeName(ALL_NO_NS, SAME_LOCAL("scriptminsize"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPECIFICATION = new AttributeName(ALL_NO_NS, SAME_LOCAL("specification"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XLINK_ACTUATE = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:actuate", "actuate"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName XLINK_ARCROLE = new AttributeName(XLINK_NS, COLONIFIED_LOCAL("xlink:arcrole", "arcrole"), XLINK_PREFIX, NCNAME_FOREIGN);
+    public static final AttributeName ACCEPT_CHARSET = new AttributeName(ALL_NO_NS, SAME_LOCAL("accept-charset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ALIGNMENTSCOPE = new AttributeName(ALL_NO_NS, SAME_LOCAL("alignmentscope"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_MULTILINE = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-multiline"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName BASELINE_SHIFT = new AttributeName(ALL_NO_NS, SAME_LOCAL("baseline-shift"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HORIZ_ORIGIN_X = new AttributeName(ALL_NO_NS, SAME_LOCAL("horiz-origin-x"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName HORIZ_ORIGIN_Y = new AttributeName(ALL_NO_NS, SAME_LOCAL("horiz-origin-y"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFOREUPDATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforeupdate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONFILTERCHANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onfilterchange"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONROWSINSERTED = new AttributeName(ALL_NO_NS, SAME_LOCAL("onrowsinserted"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFOREUNLOAD = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforeunload"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MATHBACKGROUND = new AttributeName(ALL_NO_NS, SAME_LOCAL("mathbackground"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LETTER_SPACING = new AttributeName(ALL_NO_NS, SAME_LOCAL("letter-spacing"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LIGHTING_COLOR = new AttributeName(ALL_NO_NS, SAME_LOCAL("lighting-color"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName THICKMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("thickmathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TEXT_RENDERING = new AttributeName(ALL_NO_NS, SAME_LOCAL("text-rendering"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName V_MATHEMATICAL = new AttributeName(ALL_NO_NS, SAME_LOCAL("v-mathematical"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName POINTER_EVENTS = new AttributeName(ALL_NO_NS, SAME_LOCAL("pointer-events"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PRIMITIVEUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("primitiveunits", "primitiveUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SYSTEMLANGUAGE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("systemlanguage", "systemLanguage"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_LINECAP = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-linecap"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SUBSCRIPTSHIFT = new AttributeName(ALL_NO_NS, SAME_LOCAL("subscriptshift"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_OPACITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-opacity"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_DROPEFFECT = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-dropeffect"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_LABELLEDBY = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-labelledby"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_TEMPLATEID = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-templateid"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLOR_RENDERING = new AttributeName(ALL_NO_NS, SAME_LOCAL("color-rendering"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CONTENTEDITABLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("contenteditable"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DIFFUSECONSTANT = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("diffuseconstant", "diffuseConstant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDATAAVAILABLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondataavailable"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONCONTROLSELECT = new AttributeName(ALL_NO_NS, SAME_LOCAL("oncontrolselect"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName IMAGE_RENDERING = new AttributeName(ALL_NO_NS, SAME_LOCAL("image-rendering"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MEDIUMMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("mediummathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName TEXT_DECORATION = new AttributeName(ALL_NO_NS, SAME_LOCAL("text-decoration"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SHAPE_RENDERING = new AttributeName(ALL_NO_NS, SAME_LOCAL("shape-rendering"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_LINEJOIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-linejoin"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REPEAT_TEMPLATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("repeat-template"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_DESCRIBEDBY = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-describedby"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CONTENTSTYLETYPE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("contentstyletype", "contentStyleType"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName FONT_SIZE_ADJUST = new AttributeName(ALL_NO_NS, SAME_LOCAL("font-size-adjust"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName KERNELUNITLENGTH = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("kernelunitlength", "kernelUnitLength"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFOREACTIVATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforeactivate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONPROPERTYCHANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onpropertychange"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDATASETCHANGED = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondatasetchanged"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName MASKCONTENTUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("maskcontentunits", "maskContentUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PATTERNTRANSFORM = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("patterntransform", "patternTransform"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REQUIREDFEATURES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("requiredfeatures", "requiredFeatures"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName RENDERING_INTENT = new AttributeName(ALL_NO_NS, SAME_LOCAL("rendering-intent"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPECULAREXPONENT = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("specularexponent", "specularExponent"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SPECULARCONSTANT = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("specularconstant", "specularConstant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SUPERSCRIPTSHIFT = new AttributeName(ALL_NO_NS, SAME_LOCAL("superscriptshift"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_DASHARRAY = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-dasharray"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName XCHANNELSELECTOR = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("xchannelselector", "xChannelSelector"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName YCHANNELSELECTOR = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("ychannelselector", "yChannelSelector"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_AUTOCOMPLETE = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-autocomplete"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName CONTENTSCRIPTTYPE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("contentscripttype", "contentScriptType"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ENABLE_BACKGROUND = new AttributeName(ALL_NO_NS, SAME_LOCAL("enable-background"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName DOMINANT_BASELINE = new AttributeName(ALL_NO_NS, SAME_LOCAL("dominant-baseline"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GRADIENTTRANSFORM = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("gradienttransform", "gradientTransform"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFORDEACTIVATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbefordeactivate"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONDATASETCOMPLETE = new AttributeName(ALL_NO_NS, SAME_LOCAL("ondatasetcomplete"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OVERLINE_POSITION = new AttributeName(ALL_NO_NS, SAME_LOCAL("overline-position"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONBEFOREEDITFOCUS = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbeforeeditfocus"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName LIMITINGCONEANGLE = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("limitingconeangle", "limitingConeAngle"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERYTHINMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("verythinmathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_DASHOFFSET = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-dashoffset"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STROKE_MITERLIMIT = new AttributeName(ALL_NO_NS, SAME_LOCAL("stroke-miterlimit"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ALIGNMENT_BASELINE = new AttributeName(ALL_NO_NS, SAME_LOCAL("alignment-baseline"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ONREADYSTATECHANGE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onreadystatechange"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName OVERLINE_THICKNESS = new AttributeName(ALL_NO_NS, SAME_LOCAL("overline-thickness"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNDERLINE_POSITION = new AttributeName(ALL_NO_NS, SAME_LOCAL("underline-position"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERYTHICKMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("verythickmathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName REQUIREDEXTENSIONS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("requiredextensions", "requiredExtensions"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLOR_INTERPOLATION = new AttributeName(ALL_NO_NS, SAME_LOCAL("color-interpolation"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName UNDERLINE_THICKNESS = new AttributeName(ALL_NO_NS, SAME_LOCAL("underline-thickness"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PRESERVEASPECTRATIO = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("preserveaspectratio", "preserveAspectRatio"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName PATTERNCONTENTUNITS = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("patterncontentunits", "patternContentUnits"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_MULTISELECTABLE = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-multiselectable"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName SCRIPTSIZEMULTIPLIER = new AttributeName(ALL_NO_NS, SAME_LOCAL("scriptsizemultiplier"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName ARIA_ACTIVEDESCENDANT = new AttributeName(ALL_NO_NS, SAME_LOCAL("aria-activedescendant"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERYVERYTHINMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("veryverythinmathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName VERYVERYTHICKMATHSPACE = new AttributeName(ALL_NO_NS, SAME_LOCAL("veryverythickmathspace"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STRIKETHROUGH_POSITION = new AttributeName(ALL_NO_NS, SAME_LOCAL("strikethrough-position"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName STRIKETHROUGH_THICKNESS = new AttributeName(ALL_NO_NS, SAME_LOCAL("strikethrough-thickness"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName EXTERNALRESOURCESREQUIRED = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("externalresourcesrequired", "externalResourcesRequired"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GLYPH_ORIENTATION_VERTICAL = new AttributeName(ALL_NO_NS, SAME_LOCAL("glyph-orientation-vertical"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName COLOR_INTERPOLATION_FILTERS = new AttributeName(ALL_NO_NS, SAME_LOCAL("color-interpolation-filters"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    public static final AttributeName GLYPH_ORIENTATION_HORIZONTAL = new AttributeName(ALL_NO_NS, SAME_LOCAL("glyph-orientation-horizontal"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+    private final static @NoLength AttributeName[] ATTRIBUTE_NAMES = {
+    D,
+    K,
+    R,
+    X,
+    Y,
+    Z,
+    BY,
+    CX,
+    CY,
+    DX,
+    DY,
+    G2,
+    G1,
+    FX,
+    FY,
+    K4,
+    K2,
+    K3,
+    K1,
+    ID,
+    IN,
+    U2,
+    U1,
+    RT,
+    RX,
+    RY,
+    TO,
+    Y2,
+    Y1,
+    X1,
+    X2,
+    ALT,
+    DIR,
+    DUR,
+    END,
+    FOR,
+    IN2,
+    MAX,
+    MIN,
+    LOW,
+    REL,
+    REV,
+    SRC,
+    AXIS,
+    ABBR,
+    BBOX,
+    CITE,
+    CODE,
+    BIAS,
+    COLS,
+    CLIP,
+    CHAR,
+    BASE,
+    EDGE,
+    DATA,
+    FILL,
+    FROM,
+    FORM,
+    FACE,
+    HIGH,
+    HREF,
+    OPEN,
+    ICON,
+    NAME,
+    MODE,
+    MASK,
+    LINK,
+    LANG,
+    LIST,
+    TYPE,
+    WHEN,
+    WRAP,
+    TEXT,
+    PATH,
+    PING,
+    REFX,
+    REFY,
+    SIZE,
+    SEED,
+    ROWS,
+    SPAN,
+    STEP,
+    ROLE,
+    XREF,
+    ASYNC,
+    ALINK,
+    ALIGN,
+    CLOSE,
+    COLOR,
+    CLASS,
+    CLEAR,
+    BEGIN,
+    DEPTH,
+    DEFER,
+    FENCE,
+    FRAME,
+    ISMAP,
+    ONEND,
+    INDEX,
+    ORDER,
+    OTHER,
+    ONCUT,
+    NARGS,
+    MEDIA,
+    LABEL,
+    LOCAL,
+    WIDTH,
+    TITLE,
+    VLINK,
+    VALUE,
+    SLOPE,
+    SHAPE,
+    SCOPE,
+    SCALE,
+    SPEED,
+    STYLE,
+    RULES,
+    STEMH,
+    STEMV,
+    START,
+    XMLNS,
+    ACCEPT,
+    ACCENT,
+    ASCENT,
+    ACTIVE,
+    ALTIMG,
+    ACTION,
+    BORDER,
+    CURSOR,
+    COORDS,
+    FILTER,
+    FORMAT,
+    HIDDEN,
+    HSPACE,
+    HEIGHT,
+    ONMOVE,
+    ONLOAD,
+    ONDRAG,
+    ORIGIN,
+    ONZOOM,
+    ONHELP,
+    ONSTOP,
+    ONDROP,
+    ONBLUR,
+    OBJECT,
+    OFFSET,
+    ORIENT,
+    ONCOPY,
+    NOWRAP,
+    NOHREF,
+    MACROS,
+    METHOD,
+    LOWSRC,
+    LSPACE,
+    LQUOTE,
+    USEMAP,
+    WIDTHS,
+    TARGET,
+    VALUES,
+    VALIGN,
+    VSPACE,
+    POSTER,
+    POINTS,
+    PROMPT,
+    SCOPED,
+    STRING,
+    SCHEME,
+    STROKE,
+    RADIUS,
+    RESULT,
+    REPEAT,
+    RSPACE,
+    ROTATE,
+    RQUOTE,
+    ALTTEXT,
+    ARCHIVE,
+    AZIMUTH,
+    CLOSURE,
+    CHECKED,
+    CLASSID,
+    CHAROFF,
+    BGCOLOR,
+    COLSPAN,
+    CHARSET,
+    COMPACT,
+    CONTENT,
+    ENCTYPE,
+    DATASRC,
+    DATAFLD,
+    DECLARE,
+    DISPLAY,
+    DIVISOR,
+    DEFAULT,
+    DESCENT,
+    KERNING,
+    HANGING,
+    HEADERS,
+    ONPASTE,
+    ONCLICK,
+    OPTIMUM,
+    ONBEGIN,
+    ONKEYUP,
+    ONFOCUS,
+    ONERROR,
+    ONINPUT,
+    ONABORT,
+    ONSTART,
+    ONRESET,
+    OPACITY,
+    NOSHADE,
+    MINSIZE,
+    MAXSIZE,
+    LOOPEND,
+    LARGEOP,
+    UNICODE,
+    TARGETX,
+    TARGETY,
+    VIEWBOX,
+    VERSION,
+    PATTERN,
+    PROFILE,
+    SPACING,
+    RESTART,
+    ROWSPAN,
+    SANDBOX,
+    SUMMARY,
+    STANDBY,
+    REPLACE,
+    AUTOPLAY,
+    ADDITIVE,
+    CALCMODE,
+    CODETYPE,
+    CODEBASE,
+    CONTROLS,
+    BEVELLED,
+    BASELINE,
+    EXPONENT,
+    EDGEMODE,
+    ENCODING,
+    GLYPHREF,
+    DATETIME,
+    DISABLED,
+    FONTSIZE,
+    KEYTIMES,
+    PANOSE_1,
+    HREFLANG,
+    ONRESIZE,
+    ONCHANGE,
+    ONBOUNCE,
+    ONUNLOAD,
+    ONFINISH,
+    ONSCROLL,
+    OPERATOR,
+    OVERFLOW,
+    ONSUBMIT,
+    ONREPEAT,
+    ONSELECT,
+    NOTATION,
+    NORESIZE,
+    MANIFEST,
+    MATHSIZE,
+    MULTIPLE,
+    LONGDESC,
+    LANGUAGE,
+    TEMPLATE,
+    TABINDEX,
+    READONLY,
+    SELECTED,
+    ROWLINES,
+    SEAMLESS,
+    ROWALIGN,
+    STRETCHY,
+    REQUIRED,
+    XML_BASE,
+    XML_LANG,
+    X_HEIGHT,
+    ARIA_OWNS,
+    AUTOFOCUS,
+    ARIA_SORT,
+    ACCESSKEY,
+    ARIA_BUSY,
+    ARIA_GRAB,
+    AMPLITUDE,
+    ARIA_LIVE,
+    CLIP_RULE,
+    CLIP_PATH,
+    EQUALROWS,
+    ELEVATION,
+    DIRECTION,
+    DRAGGABLE,
+    FILTERRES,
+    FILL_RULE,
+    FONTSTYLE,
+    FONT_SIZE,
+    KEYPOINTS,
+    HIDEFOCUS,
+    ONMESSAGE,
+    INTERCEPT,
+    ONDRAGEND,
+    ONMOVEEND,
+    ONINVALID,
+    ONKEYDOWN,
+    ONFOCUSIN,
+    ONMOUSEUP,
+    INPUTMODE,
+    ONROWEXIT,
+    MATHCOLOR,
+    MASKUNITS,
+    MAXLENGTH,
+    LINEBREAK,
+    LOOPSTART,
+    TRANSFORM,
+    V_HANGING,
+    VALUETYPE,
+    POINTSATZ,
+    POINTSATX,
+    POINTSATY,
+    PLAYCOUNT,
+    SYMMETRIC,
+    SCROLLING,
+    REPEATDUR,
+    SELECTION,
+    SEPARATOR,
+    XML_SPACE,
+    AUTOSUBMIT,
+    ALPHABETIC,
+    ACTIONTYPE,
+    ACCUMULATE,
+    ARIA_LEVEL,
+    COLUMNSPAN,
+    CAP_HEIGHT,
+    BACKGROUND,
+    GLYPH_NAME,
+    GROUPALIGN,
+    FONTFAMILY,
+    FONTWEIGHT,
+    FONT_STYLE,
+    KEYSPLINES,
+    HTTP_EQUIV,
+    ONACTIVATE,
+    OCCURRENCE,
+    IRRELEVANT,
+    ONDBLCLICK,
+    ONDRAGDROP,
+    ONKEYPRESS,
+    ONROWENTER,
+    ONDRAGOVER,
+    ONFOCUSOUT,
+    ONMOUSEOUT,
+    NUMOCTAVES,
+    MARKER_MID,
+    MARKER_END,
+    TEXTLENGTH,
+    VISIBILITY,
+    VIEWTARGET,
+    VERT_ADV_Y,
+    PATHLENGTH,
+    REPEAT_MAX,
+    RADIOGROUP,
+    STOP_COLOR,
+    SEPARATORS,
+    REPEAT_MIN,
+    ROWSPACING,
+    ZOOMANDPAN,
+    XLINK_TYPE,
+    XLINK_ROLE,
+    XLINK_HREF,
+    XLINK_SHOW,
+    ACCENTUNDER,
+    ARIA_SECRET,
+    ARIA_ATOMIC,
+    ARIA_HIDDEN,
+    ARIA_FLOWTO,
+    ARABIC_FORM,
+    CELLPADDING,
+    CELLSPACING,
+    COLUMNWIDTH,
+    COLUMNALIGN,
+    COLUMNLINES,
+    CONTEXTMENU,
+    BASEPROFILE,
+    FONT_FAMILY,
+    FRAMEBORDER,
+    FILTERUNITS,
+    FLOOD_COLOR,
+    FONT_WEIGHT,
+    HORIZ_ADV_X,
+    ONDRAGLEAVE,
+    ONMOUSEMOVE,
+    ORIENTATION,
+    ONMOUSEDOWN,
+    ONMOUSEOVER,
+    ONDRAGENTER,
+    IDEOGRAPHIC,
+    ONBEFORECUT,
+    ONFORMINPUT,
+    ONDRAGSTART,
+    ONMOVESTART,
+    MARKERUNITS,
+    MATHVARIANT,
+    MARGINWIDTH,
+    MARKERWIDTH,
+    TEXT_ANCHOR,
+    TABLEVALUES,
+    SCRIPTLEVEL,
+    REPEATCOUNT,
+    STITCHTILES,
+    STARTOFFSET,
+    SCROLLDELAY,
+    XMLNS_XLINK,
+    XLINK_TITLE,
+    ARIA_INVALID,
+    ARIA_PRESSED,
+    ARIA_CHECKED,
+    AUTOCOMPLETE,
+    ARIA_SETSIZE,
+    ARIA_CHANNEL,
+    EQUALCOLUMNS,
+    DISPLAYSTYLE,
+    DATAFORMATAS,
+    FILL_OPACITY,
+    FONT_VARIANT,
+    FONT_STRETCH,
+    FRAMESPACING,
+    KERNELMATRIX,
+    ONDEACTIVATE,
+    ONROWSDELETE,
+    ONMOUSELEAVE,
+    ONFORMCHANGE,
+    ONCELLCHANGE,
+    ONMOUSEWHEEL,
+    ONMOUSEENTER,
+    ONAFTERPRINT,
+    ONBEFORECOPY,
+    MARGINHEIGHT,
+    MARKERHEIGHT,
+    MARKER_START,
+    MATHEMATICAL,
+    LENGTHADJUST,
+    UNSELECTABLE,
+    UNICODE_BIDI,
+    UNITS_PER_EM,
+    WORD_SPACING,
+    WRITING_MODE,
+    V_ALPHABETIC,
+    PATTERNUNITS,
+    SPREADMETHOD,
+    SURFACESCALE,
+    STROKE_WIDTH,
+    REPEAT_START,
+    STDDEVIATION,
+    STOP_OPACITY,
+    ARIA_CONTROLS,
+    ARIA_HASPOPUP,
+    ACCENT_HEIGHT,
+    ARIA_VALUENOW,
+    ARIA_RELEVANT,
+    ARIA_POSINSET,
+    ARIA_VALUEMAX,
+    ARIA_READONLY,
+    ARIA_SELECTED,
+    ARIA_REQUIRED,
+    ARIA_EXPANDED,
+    ARIA_DISABLED,
+    ATTRIBUTETYPE,
+    ATTRIBUTENAME,
+    ARIA_DATATYPE,
+    ARIA_VALUEMIN,
+    BASEFREQUENCY,
+    COLUMNSPACING,
+    COLOR_PROFILE,
+    CLIPPATHUNITS,
+    DEFINITIONURL,
+    GRADIENTUNITS,
+    FLOOD_OPACITY,
+    ONAFTERUPDATE,
+    ONERRORUPDATE,
+    ONBEFOREPASTE,
+    ONLOSECAPTURE,
+    ONCONTEXTMENU,
+    ONSELECTSTART,
+    ONBEFOREPRINT,
+    MOVABLELIMITS,
+    LINETHICKNESS,
+    UNICODE_RANGE,
+    THINMATHSPACE,
+    VERT_ORIGIN_X,
+    VERT_ORIGIN_Y,
+    V_IDEOGRAPHIC,
+    PRESERVEALPHA,
+    SCRIPTMINSIZE,
+    SPECIFICATION,
+    XLINK_ACTUATE,
+    XLINK_ARCROLE,
+    ACCEPT_CHARSET,
+    ALIGNMENTSCOPE,
+    ARIA_MULTILINE,
+    BASELINE_SHIFT,
+    HORIZ_ORIGIN_X,
+    HORIZ_ORIGIN_Y,
+    ONBEFOREUPDATE,
+    ONFILTERCHANGE,
+    ONROWSINSERTED,
+    ONBEFOREUNLOAD,
+    MATHBACKGROUND,
+    LETTER_SPACING,
+    LIGHTING_COLOR,
+    THICKMATHSPACE,
+    TEXT_RENDERING,
+    V_MATHEMATICAL,
+    POINTER_EVENTS,
+    PRIMITIVEUNITS,
+    SYSTEMLANGUAGE,
+    STROKE_LINECAP,
+    SUBSCRIPTSHIFT,
+    STROKE_OPACITY,
+    ARIA_DROPEFFECT,
+    ARIA_LABELLEDBY,
+    ARIA_TEMPLATEID,
+    COLOR_RENDERING,
+    CONTENTEDITABLE,
+    DIFFUSECONSTANT,
+    ONDATAAVAILABLE,
+    ONCONTROLSELECT,
+    IMAGE_RENDERING,
+    MEDIUMMATHSPACE,
+    TEXT_DECORATION,
+    SHAPE_RENDERING,
+    STROKE_LINEJOIN,
+    REPEAT_TEMPLATE,
+    ARIA_DESCRIBEDBY,
+    CONTENTSTYLETYPE,
+    FONT_SIZE_ADJUST,
+    KERNELUNITLENGTH,
+    ONBEFOREACTIVATE,
+    ONPROPERTYCHANGE,
+    ONDATASETCHANGED,
+    MASKCONTENTUNITS,
+    PATTERNTRANSFORM,
+    REQUIREDFEATURES,
+    RENDERING_INTENT,
+    SPECULAREXPONENT,
+    SPECULARCONSTANT,
+    SUPERSCRIPTSHIFT,
+    STROKE_DASHARRAY,
+    XCHANNELSELECTOR,
+    YCHANNELSELECTOR,
+    ARIA_AUTOCOMPLETE,
+    CONTENTSCRIPTTYPE,
+    ENABLE_BACKGROUND,
+    DOMINANT_BASELINE,
+    GRADIENTTRANSFORM,
+    ONBEFORDEACTIVATE,
+    ONDATASETCOMPLETE,
+    OVERLINE_POSITION,
+    ONBEFOREEDITFOCUS,
+    LIMITINGCONEANGLE,
+    VERYTHINMATHSPACE,
+    STROKE_DASHOFFSET,
+    STROKE_MITERLIMIT,
+    ALIGNMENT_BASELINE,
+    ONREADYSTATECHANGE,
+    OVERLINE_THICKNESS,
+    UNDERLINE_POSITION,
+    VERYTHICKMATHSPACE,
+    REQUIREDEXTENSIONS,
+    COLOR_INTERPOLATION,
+    UNDERLINE_THICKNESS,
+    PRESERVEASPECTRATIO,
+    PATTERNCONTENTUNITS,
+    ARIA_MULTISELECTABLE,
+    SCRIPTSIZEMULTIPLIER,
+    ARIA_ACTIVEDESCENDANT,
+    VERYVERYTHINMATHSPACE,
+    VERYVERYTHICKMATHSPACE,
+    STRIKETHROUGH_POSITION,
+    STRIKETHROUGH_THICKNESS,
+    EXTERNALRESOURCESREQUIRED,
+    GLYPH_ORIENTATION_VERTICAL,
+    COLOR_INTERPOLATION_FILTERS,
+    GLYPH_ORIENTATION_HORIZONTAL,
+    };
+    private final static int[] ATTRIBUTE_HASHES = {
+    1153,
+    1383,
+    1601,
+    1793,
+    1827,
+    1857,
+    68600,
+    69146,
+    69177,
+    70237,
+    70270,
+    71572,
+    71669,
+    72415,
+    72444,
+    74846,
+    74904,
+    74943,
+    75001,
+    75276,
+    75590,
+    84742,
+    84839,
+    85575,
+    85963,
+    85992,
+    87204,
+    88074,
+    88171,
+    89130,
+    89163,
+    3207892,
+    3283895,
+    3284791,
+    3338752,
+    3358197,
+    3369562,
+    3539124,
+    3562402,
+    3574260,
+    3670335,
+    3696933,
+    3721879,
+    135280021,
+    135346322,
+    136317019,
+    136475749,
+    136548517,
+    136652214,
+    136884919,
+    136902418,
+    136942992,
+    137292068,
+    139120259,
+    139785574,
+    142250603,
+    142314056,
+    142331176,
+    142519584,
+    144752417,
+    145106895,
+    146147200,
+    146765926,
+    148805544,
+    149655723,
+    149809441,
+    150018784,
+    150445028,
+    150923321,
+    152528754,
+    152536216,
+    152647366,
+    152962785,
+    155219321,
+    155654904,
+    157317483,
+    157350248,
+    157437941,
+    157447478,
+    157604838,
+    157685404,
+    157894402,
+    158315188,
+    166078431,
+    169409980,
+    169700259,
+    169856932,
+    170007032,
+    170409695,
+    170466488,
+    170513710,
+    170608367,
+    173028944,
+    173896963,
+    176090625,
+    176129212,
+    179390001,
+    179489057,
+    179627464,
+    179840468,
+    179849042,
+    180004216,
+    181779081,
+    183027151,
+    183645319,
+    183698797,
+    185922012,
+    185997252,
+    188312483,
+    188675799,
+    190977533,
+    190992569,
+    191006194,
+    191033518,
+    191038774,
+    191096249,
+    191166163,
+    191194426,
+    191522106,
+    191568039,
+    200104642,
+    202506661,
+    202537381,
+    202602917,
+    203070590,
+    203120766,
+    203389054,
+    203690071,
+    203971238,
+    203986524,
+    209040857,
+    209125756,
+    212055489,
+    212322418,
+    212746849,
+    213002877,
+    213055164,
+    213088023,
+    213259873,
+    213273386,
+    213435118,
+    213437318,
+    213438231,
+    213493071,
+    213532268,
+    213542834,
+    213584431,
+    213659891,
+    215285828,
+    215880731,
+    216112976,
+    216684637,
+    217369699,
+    217565298,
+    217576549,
+    218186795,
+    219743185,
+    220082234,
+    221623802,
+    221986406,
+    222283890,
+    223089542,
+    223138630,
+    223311265,
+    224547358,
+    224587256,
+    224589550,
+    224655650,
+    224785518,
+    224810917,
+    224813302,
+    225429618,
+    225432950,
+    225440869,
+    236107233,
+    236709921,
+    236838947,
+    237117095,
+    237143271,
+    237172455,
+    237209953,
+    237354143,
+    237372743,
+    237668065,
+    237703073,
+    237714273,
+    239743521,
+    240512803,
+    240522627,
+    240560417,
+    240656513,
+    241015715,
+    241062755,
+    241065383,
+    243523041,
+    245865199,
+    246261793,
+    246556195,
+    246774817,
+    246923491,
+    246928419,
+    246981667,
+    247014847,
+    247058369,
+    247112833,
+    247118177,
+    247119137,
+    247128739,
+    247316903,
+    249533729,
+    250235623,
+    250269543,
+    251083937,
+    251402351,
+    252339047,
+    253260911,
+    253293679,
+    254844367,
+    255547879,
+    256077281,
+    256345377,
+    258124199,
+    258354465,
+    258605063,
+    258744193,
+    258845603,
+    258856961,
+    258926689,
+    269869248,
+    270174334,
+    270709417,
+    270778994,
+    270781796,
+    271102503,
+    271478858,
+    271490090,
+    272870654,
+    273335275,
+    273369140,
+    273924313,
+    274108530,
+    274116736,
+    276818662,
+    277476156,
+    279156579,
+    279349675,
+    280108533,
+    280128712,
+    280132869,
+    280162403,
+    280280292,
+    280413430,
+    280506130,
+    280677397,
+    280678580,
+    280686710,
+    280689066,
+    282736758,
+    283110901,
+    283275116,
+    283823226,
+    283890012,
+    284479340,
+    284606461,
+    286700477,
+    286798916,
+    291557706,
+    291665349,
+    291804100,
+    292138018,
+    292166446,
+    292418738,
+    292451039,
+    300298041,
+    300374839,
+    300597935,
+    303073389,
+    303083839,
+    303266673,
+    303354997,
+    303430688,
+    303576261,
+    303724281,
+    303819694,
+    304242723,
+    304382625,
+    306247792,
+    307227811,
+    307468786,
+    307724489,
+    309671175,
+    310252031,
+    310358241,
+    310373094,
+    311015256,
+    313357609,
+    313683893,
+    313701861,
+    313706996,
+    313707317,
+    313710350,
+    314027746,
+    314038181,
+    314091299,
+    314205627,
+    314233813,
+    316741830,
+    316797986,
+    317486755,
+    317794164,
+    318721061,
+    320076137,
+    322657125,
+    322887778,
+    323506876,
+    323572412,
+    323605180,
+    323938869,
+    325060058,
+    325320188,
+    325398738,
+    325541490,
+    325671619,
+    333868843,
+    336806130,
+    337212108,
+    337282686,
+    337285434,
+    337585223,
+    338036037,
+    338298087,
+    338566051,
+    340943551,
+    341190970,
+    342995704,
+    343352124,
+    343912673,
+    344585053,
+    346977248,
+    347218098,
+    347262163,
+    347278576,
+    347438191,
+    347655959,
+    347684788,
+    347726430,
+    347727772,
+    347776035,
+    347776629,
+    349500753,
+    350880161,
+    350887073,
+    353384123,
+    355496998,
+    355906922,
+    355979793,
+    356545959,
+    358637867,
+    358905016,
+    359164318,
+    359247286,
+    359350571,
+    359579447,
+    365560330,
+    367399355,
+    367420285,
+    367510727,
+    368013212,
+    370234760,
+    370353345,
+    370710317,
+    371074566,
+    371122285,
+    371194213,
+    371448425,
+    371448430,
+    371545055,
+    371596922,
+    371758751,
+    371964792,
+    372151328,
+    376550136,
+    376710172,
+    376795771,
+    376826271,
+    376906556,
+    380514830,
+    380774774,
+    380775037,
+    381030322,
+    381136500,
+    381281631,
+    381282269,
+    381285504,
+    381330595,
+    381331422,
+    381335911,
+    381336484,
+    383907298,
+    383917408,
+    384595009,
+    384595013,
+    387799894,
+    387823201,
+    392581647,
+    392584937,
+    392742684,
+    392906485,
+    393003349,
+    400644707,
+    400973830,
+    404428547,
+    404432113,
+    404432865,
+    404469244,
+    404478897,
+    404694860,
+    406887479,
+    408294949,
+    408789955,
+    410022510,
+    410467324,
+    410586448,
+    410945965,
+    411845275,
+    414327152,
+    414327932,
+    414329781,
+    414346257,
+    414346439,
+    414639928,
+    414835998,
+    414894517,
+    414986533,
+    417465377,
+    417465381,
+    417492216,
+    418259232,
+    419310946,
+    420103495,
+    420242342,
+    420380455,
+    420658662,
+    420717432,
+    423183880,
+    424539259,
+    425929170,
+    425972964,
+    426050649,
+    426126450,
+    426142833,
+    426607922,
+    437289840,
+    437347469,
+    437412335,
+    437423943,
+    437455540,
+    437462252,
+    437597991,
+    437617485,
+    437986305,
+    437986507,
+    437986828,
+    437987072,
+    438015591,
+    438034813,
+    438038966,
+    438179623,
+    438347971,
+    438483573,
+    438547062,
+    438895551,
+    441592676,
+    442032555,
+    443548979,
+    447881379,
+    447881655,
+    447881895,
+    447887844,
+    448416189,
+    448445746,
+    448449012,
+    450942191,
+    452816744,
+    453668677,
+    454434495,
+    456610076,
+    456642844,
+    456738709,
+    457544600,
+    459451897,
+    459680944,
+    468058810,
+    468083581,
+    470964084,
+    471470955,
+    471567278,
+    472267822,
+    481177859,
+    481210627,
+    481435874,
+    481455115,
+    481485378,
+    481490218,
+    485105638,
+    486005878,
+    486383494,
+    487988916,
+    488103783,
+    490661867,
+    491574090,
+    491578272,
+    493041952,
+    493441205,
+    493582844,
+    493716979,
+    504577572,
+    504740359,
+    505091638,
+    505592418,
+    505656212,
+    509516275,
+    514998531,
+    515571132,
+    515594682,
+    518712698,
+    521362273,
+    526592419,
+    526807354,
+    527348842,
+    538294791,
+    539214049,
+    544689535,
+    545535009,
+    548544752,
+    548563346,
+    548595116,
+    551679010,
+    558034099,
+    560329411,
+    560356209,
+    560671018,
+    560671152,
+    560692590,
+    560845442,
+    569212097,
+    569474241,
+    572252718,
+    572768481,
+    575326764,
+    576174758,
+    576190819,
+    582099184,
+    582099438,
+    582372519,
+    582558889,
+    586552164,
+    591325418,
+    594231990,
+    594243961,
+    605711268,
+    615672071,
+    616086845,
+    621792370,
+    624879850,
+    627432831,
+    640040548,
+    654392808,
+    658675477,
+    659420283,
+    672891587,
+    694768102,
+    705890982,
+    725543146,
+    759097578,
+    761686526,
+    795383908,
+    843809551,
+    878105336,
+    908643300,
+    945213471,
+    };
 
 }
--- a/parser/html/javasrc/ElementName.java
+++ b/parser/html/javasrc/ElementName.java
@@ -1,10 +1,10 @@
 /*
- * Copyright (c) 2008-2010 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -74,16 +74,21 @@ public final class ElementName
      */
     public static final int SCOPING_AS_MATHML = (1 << 25);
 
     /**
      * The element is an HTML integration point.
      */
     public static final int HTML_INTEGRATION_POINT = (1 << 24);
 
+    /**
+     * The element has an optional end tag.
+     */
+    public static final int OPTIONAL_END_TAG = (1 << 23);
+
     public static final ElementName NULL_ELEMENT_NAME = new ElementName(null);
 
     public final @Local String name;
 
     public final @Local String camelCaseName;
 
     /**
      * The lowest 7 bits are the dispatch group. The high bits are flags.
@@ -191,16 +196,19 @@ public final class ElementName
 //            buf.append(" | SCOPING");
 //        }        
 //        if ((flags & SCOPING_AS_MATHML) != 0) {
 //            buf.append(" | SCOPING_AS_MATHML");
 //        }
 //        if ((flags & SCOPING_AS_SVG) != 0) {
 //            buf.append(" | SCOPING_AS_SVG");
 //        }
+//        if ((flags & OPTIONAL_END_TAG) != 0) {
+//            buf.append(" | OPTIONAL_END_TAG");
+//        }
 //        return buf.toString();
 //    }
 //    
 //    private String constName() {
 //        char[] buf = new char[name.length()];
 //        for (int i = 0; i < name.length(); i++) {
 //            char c = name.charAt(i);
 //            if (c == '-') {
@@ -400,53 +408,53 @@ public final class ElementName
 //        System.out.println("};");
 //    }
 
     // START GENERATED CODE
     public static final ElementName A = new ElementName("a", "a", TreeBuilder.A);
     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);
     public static final ElementName G = new ElementName("g", "g", TreeBuilder.OTHER);
     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);
-    public static final ElementName P = new ElementName("p", "p", TreeBuilder.P | SPECIAL);
+    public static final ElementName P = new ElementName("p", "p", TreeBuilder.P | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName Q = new ElementName("q", "q", TreeBuilder.OTHER);
     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);
     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);
     public static final ElementName BR = new ElementName("br", "br", TreeBuilder.BR | SPECIAL);
     public static final ElementName CI = new ElementName("ci", "ci", TreeBuilder.OTHER);
     public static final ElementName CN = new ElementName("cn", "cn", TreeBuilder.OTHER);
-    public static final ElementName DD = new ElementName("dd", "dd", TreeBuilder.DD_OR_DT | SPECIAL);
+    public static final ElementName DD = new ElementName("dd", "dd", TreeBuilder.DD_OR_DT | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName DL = new ElementName("dl", "dl", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
-    public static final ElementName DT = new ElementName("dt", "dt", TreeBuilder.DD_OR_DT | SPECIAL);
+    public static final ElementName DT = new ElementName("dt", "dt", TreeBuilder.DD_OR_DT | SPECIAL | OPTIONAL_END_TAG);
     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);
     public static final ElementName EQ = new ElementName("eq", "eq", TreeBuilder.OTHER);
     public static final ElementName FN = new ElementName("fn", "fn", TreeBuilder.OTHER);
     public static final ElementName H1 = new ElementName("h1", "h1", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
     public static final ElementName H2 = new ElementName("h2", "h2", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
     public static final ElementName H3 = new ElementName("h3", "h3", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
     public static final ElementName H4 = new ElementName("h4", "h4", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
     public static final ElementName H5 = new ElementName("h5", "h5", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
     public static final ElementName H6 = new ElementName("h6", "h6", TreeBuilder.H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | SPECIAL);
     public static final ElementName GT = new ElementName("gt", "gt", TreeBuilder.OTHER);
     public static final ElementName HR = new ElementName("hr", "hr", TreeBuilder.HR | SPECIAL);
     public static final ElementName IN = new ElementName("in", "in", TreeBuilder.OTHER);
-    public static final ElementName LI = new ElementName("li", "li", TreeBuilder.LI | SPECIAL);
+    public static final ElementName LI = new ElementName("li", "li", TreeBuilder.LI | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName LN = new ElementName("ln", "ln", TreeBuilder.OTHER);
     public static final ElementName LT = new ElementName("lt", "lt", TreeBuilder.OTHER);
     public static final ElementName MI = new ElementName("mi", "mi", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
     public static final ElementName MN = new ElementName("mn", "mn", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
     public static final ElementName MO = new ElementName("mo", "mo", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
     public static final ElementName MS = new ElementName("ms", "ms", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
     public static final ElementName OL = new ElementName("ol", "ol", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
     public static final ElementName OR = new ElementName("or", "or", TreeBuilder.OTHER);
     public static final ElementName PI = new ElementName("pi", "pi", TreeBuilder.OTHER);
-    public static final ElementName RP = new ElementName("rp", "rp", TreeBuilder.RT_OR_RP);
-    public static final ElementName RT = new ElementName("rt", "rt", TreeBuilder.RT_OR_RP);
-    public static final ElementName TD = new ElementName("td", "td", TreeBuilder.TD_OR_TH | SPECIAL | SCOPING);
-    public static final ElementName TH = new ElementName("th", "th", TreeBuilder.TD_OR_TH | SPECIAL | SCOPING);
-    public static final ElementName TR = new ElementName("tr", "tr", TreeBuilder.TR | SPECIAL | FOSTER_PARENTING);
+    public static final ElementName RP = new ElementName("rp", "rp", TreeBuilder.RT_OR_RP | OPTIONAL_END_TAG);
+    public static final ElementName RT = new ElementName("rt", "rt", TreeBuilder.RT_OR_RP | OPTIONAL_END_TAG);
+    public static final ElementName TD = new ElementName("td", "td", TreeBuilder.TD_OR_TH | SPECIAL | SCOPING | OPTIONAL_END_TAG);
+    public static final ElementName TH = new ElementName("th", "th", TreeBuilder.TD_OR_TH | SPECIAL | SCOPING | OPTIONAL_END_TAG);
+    public static final ElementName TR = new ElementName("tr", "tr", TreeBuilder.TR | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
     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);
     public static final ElementName UL = new ElementName("ul", "ul", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
     public static final ElementName AND = new ElementName("and", "and", TreeBuilder.OTHER);
     public static final ElementName ARG = new ElementName("arg", "arg", TreeBuilder.OTHER);
     public static final ElementName ABS = new ElementName("abs", "abs", TreeBuilder.OTHER);
     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);
     public static final ElementName BDO = new ElementName("bdo", "bdo", TreeBuilder.OTHER);
     public static final ElementName CSC = new ElementName("csc", "csc", TreeBuilder.OTHER);
@@ -490,32 +498,32 @@ public final class ElementName
     public static final ElementName VAR = new ElementName("var", "var", TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
     public static final ElementName WBR = new ElementName("wbr", "wbr", TreeBuilder.AREA_OR_WBR | SPECIAL);
     public static final ElementName XMP = new ElementName("xmp", "xmp", TreeBuilder.XMP);
     public static final ElementName XOR = new ElementName("xor", "xor", TreeBuilder.OTHER);
     public static final ElementName AREA = new ElementName("area", "area", TreeBuilder.AREA_OR_WBR | SPECIAL);
     public static final ElementName ABBR = new ElementName("abbr", "abbr", TreeBuilder.OTHER);
     public static final ElementName BASE = new ElementName("base", "base", TreeBuilder.BASE | SPECIAL);
     public static final ElementName BVAR = new ElementName("bvar", "bvar", TreeBuilder.OTHER);
-    public static final ElementName BODY = new ElementName("body", "body", TreeBuilder.BODY | SPECIAL);
+    public static final ElementName BODY = new ElementName("body", "body", TreeBuilder.BODY | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName CARD = new ElementName("card", "card", TreeBuilder.OTHER);
     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);
     public static final ElementName CITE = new ElementName("cite", "cite", TreeBuilder.OTHER);
     public static final ElementName CSCH = new ElementName("csch", "csch", TreeBuilder.OTHER);
     public static final ElementName COSH = new ElementName("cosh", "cosh", TreeBuilder.OTHER);
     public static final ElementName COTH = new ElementName("coth", "coth", TreeBuilder.OTHER);
     public static final ElementName CURL = new ElementName("curl", "curl", TreeBuilder.OTHER);
     public static final ElementName DESC = new ElementName("desc", "desc", TreeBuilder.FOREIGNOBJECT_OR_DESC | SCOPING_AS_SVG);
     public static final ElementName DIFF = new ElementName("diff", "diff", TreeBuilder.OTHER);
     public static final ElementName DEFS = new ElementName("defs", "defs", TreeBuilder.OTHER);
     public static final ElementName FORM = new ElementName("form", "form", TreeBuilder.FORM | SPECIAL);
     public static final ElementName FONT = new ElementName("font", "font", TreeBuilder.FONT);
     public static final ElementName GRAD = new ElementName("grad", "grad", TreeBuilder.OTHER);
-    public static final ElementName HEAD = new ElementName("head", "head", TreeBuilder.HEAD | SPECIAL);
-    public static final ElementName HTML = new ElementName("html", "html", TreeBuilder.HTML | SPECIAL | SCOPING);
+    public static final ElementName HEAD = new ElementName("head", "head", TreeBuilder.HEAD | SPECIAL | OPTIONAL_END_TAG);
+    public static final ElementName HTML = new ElementName("html", "html", TreeBuilder.HTML | SPECIAL | SCOPING | OPTIONAL_END_TAG);
     public static final ElementName LINE = new ElementName("line", "line", TreeBuilder.OTHER);
     public static final ElementName LINK = new ElementName("link", "link", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
     public static final ElementName LIST = new ElementName("list", "list", TreeBuilder.OTHER);
     public static final ElementName META = new ElementName("meta", "meta", TreeBuilder.META | SPECIAL);
     public static final ElementName MSUB = new ElementName("msub", "msub", TreeBuilder.OTHER);
     public static final ElementName MODE = new ElementName("mode", "mode", TreeBuilder.OTHER);
     public static final ElementName MATH = new ElementName("math", "math", TreeBuilder.MATH);
     public static final ElementName MARK = new ElementName("mark", "mark", TreeBuilder.OTHER);
@@ -571,24 +579,24 @@ public final class ElementName
     public static final ElementName MTEXT = new ElementName("mtext", "mtext", TreeBuilder.MI_MO_MN_MS_MTEXT | SCOPING_AS_MATHML);
     public static final ElementName NOTIN = new ElementName("notin", "notin", TreeBuilder.OTHER);
     public static final ElementName PIECE = new ElementName("piece", "piece", TreeBuilder.OTHER);
     public static final ElementName PARAM = new ElementName("param", "param", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK | SPECIAL);
     public static final ElementName POWER = new ElementName("power", "power", TreeBuilder.OTHER);
     public static final ElementName REALS = new ElementName("reals", "reals", TreeBuilder.OTHER);
     public static final ElementName STYLE = new ElementName("style", "style", TreeBuilder.STYLE | SPECIAL);
     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);
-    public static final ElementName THEAD = new ElementName("thead", "thead", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING);
+    public static final ElementName THEAD = new ElementName("thead", "thead", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
     public static final ElementName TABLE = new ElementName("table", "table", TreeBuilder.TABLE | SPECIAL | FOSTER_PARENTING | SCOPING);
     public static final ElementName TITLE = new ElementName("title", "title", TreeBuilder.TITLE | SPECIAL | SCOPING_AS_SVG);
     public static final ElementName TRACK = new ElementName("track", "track", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK);
     public static final ElementName TSPAN = new ElementName("tspan", "tspan", TreeBuilder.OTHER);
     public static final ElementName TIMES = new ElementName("times", "times", TreeBuilder.OTHER);
-    public static final ElementName TFOOT = new ElementName("tfoot", "tfoot", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING);
-    public static final ElementName TBODY = new ElementName("tbody", "tbody", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING);
+    public static final ElementName TFOOT = new ElementName("tfoot", "tfoot", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
+    public static final ElementName TBODY = new ElementName("tbody", "tbody", TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
     public static final ElementName UNION = new ElementName("union", "union", TreeBuilder.OTHER);
     public static final ElementName VKERN = new ElementName("vkern", "vkern", TreeBuilder.OTHER);
     public static final ElementName VIDEO = new ElementName("video", "video", TreeBuilder.OTHER);
     public static final ElementName ARCSEC = new ElementName("arcsec", "arcsec", TreeBuilder.OTHER);
     public static final ElementName ARCCSC = new ElementName("arccsc", "arccsc", TreeBuilder.OTHER);
     public static final ElementName ARCTAN = new ElementName("arctan", "arctan", TreeBuilder.OTHER);
     public static final ElementName ARCSIN = new ElementName("arcsin", "arcsin", TreeBuilder.OTHER);
     public static final ElementName ARCCOS = new ElementName("arccos", "arccos", TreeBuilder.OTHER);
@@ -620,17 +628,17 @@ public final class ElementName
     public static final ElementName MSTYLE = new ElementName("mstyle", "mstyle", TreeBuilder.OTHER);
     public static final ElementName MGLYPH = new ElementName("mglyph", "mglyph", TreeBuilder.MGLYPH_OR_MALIGNMARK);
     public static final ElementName MEDIAN = new ElementName("median", "median", TreeBuilder.OTHER);
     public static final ElementName MUNDER = new ElementName("munder", "munder", TreeBuilder.OTHER);
     public static final ElementName MARKER = new ElementName("marker", "marker", TreeBuilder.OTHER);
     public static final ElementName MERROR = new ElementName("merror", "merror", TreeBuilder.OTHER);
     public static final ElementName MOMENT = new ElementName("moment", "moment", TreeBuilder.OTHER);
     public static final ElementName MATRIX = new ElementName("matrix", "matrix", TreeBuilder.OTHER);
-    public static final ElementName OPTION = new ElementName("option", "option", TreeBuilder.OPTION);
+    public static final ElementName OPTION = new ElementName("option", "option", TreeBuilder.OPTION | OPTIONAL_END_TAG);
     public static final ElementName OBJECT = new ElementName("object", "object", TreeBuilder.OBJECT | SPECIAL | SCOPING);
     public static final ElementName OUTPUT = new ElementName("output", "output", TreeBuilder.OUTPUT_OR_LABEL);
     public static final ElementName PRIMES = new ElementName("primes", "primes", TreeBuilder.OTHER);
     public static final ElementName SOURCE = new ElementName("source", "source", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK);
     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);
     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);
     public static final ElementName SWITCH = new ElementName("switch", "switch", TreeBuilder.OTHER);
     public static final ElementName SYMBOL = new ElementName("symbol", "symbol", TreeBuilder.OTHER);
@@ -686,34 +694,34 @@ public final class ElementName
     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);
     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);
     public static final ElementName TENDSTO = new ElementName("tendsto", "tendsto", TreeBuilder.OTHER);
     public static final ElementName UPLIMIT = new ElementName("uplimit", "uplimit", TreeBuilder.OTHER);
     public static final ElementName ALTGLYPH = new ElementName("altglyph", "altGlyph", TreeBuilder.OTHER);
     public static final ElementName BASEFONT = new ElementName("basefont", "basefont", TreeBuilder.LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
     public static final ElementName CLIPPATH = new ElementName("clippath", "clipPath", TreeBuilder.OTHER);
     public static final ElementName CODOMAIN = new ElementName("codomain", "codomain", TreeBuilder.OTHER);
-    public static final ElementName COLGROUP = new ElementName("colgroup", "colgroup", TreeBuilder.COLGROUP | SPECIAL);
+    public static final ElementName COLGROUP = new ElementName("colgroup", "colgroup", TreeBuilder.COLGROUP | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName EMPTYSET = new ElementName("emptyset", "emptyset", TreeBuilder.OTHER);
     public static final ElementName FACTOROF = new ElementName("factorof", "factorof", TreeBuilder.OTHER);
     public static final ElementName FIELDSET = new ElementName("fieldset", "fieldset", TreeBuilder.FIELDSET | SPECIAL);
     public static final ElementName FRAMESET = new ElementName("frameset", "frameset", TreeBuilder.FRAMESET | SPECIAL);
     public static final ElementName FEOFFSET = new ElementName("feoffset", "feOffset", TreeBuilder.OTHER);
     public static final ElementName GLYPHREF = new ElementName("glyphref", "glyphRef", TreeBuilder.OTHER);
     public static final ElementName INTERVAL = new ElementName("interval", "interval", TreeBuilder.OTHER);
     public static final ElementName INTEGERS = new ElementName("integers", "integers", TreeBuilder.OTHER);
     public static final ElementName INFINITY = new ElementName("infinity", "infinity", TreeBuilder.OTHER);
     public static final ElementName LISTENER = new ElementName("listener", "listener", TreeBuilder.OTHER);
     public static final ElementName LOWLIMIT = new ElementName("lowlimit", "lowlimit", TreeBuilder.OTHER);
     public static final ElementName METADATA = new ElementName("metadata", "metadata", TreeBuilder.OTHER);
     public static final ElementName MENCLOSE = new ElementName("menclose", "menclose", TreeBuilder.OTHER);
     public static final ElementName MPHANTOM = new ElementName("mphantom", "mphantom", TreeBuilder.OTHER);
     public static final ElementName NOFRAMES = new ElementName("noframes", "noframes", TreeBuilder.NOFRAMES | SPECIAL);
     public static final ElementName NOSCRIPT = new ElementName("noscript", "noscript", TreeBuilder.NOSCRIPT | SPECIAL);
-    public static final ElementName OPTGROUP = new ElementName("optgroup", "optgroup", TreeBuilder.OPTGROUP | SPECIAL);
+    public static final ElementName OPTGROUP = new ElementName("optgroup", "optgroup", TreeBuilder.OPTGROUP | SPECIAL | OPTIONAL_END_TAG);
     public static final ElementName POLYLINE = new ElementName("polyline", "polyline", TreeBuilder.OTHER);
     public static final ElementName PREFETCH = new ElementName("prefetch", "prefetch", TreeBuilder.OTHER);
     public static final ElementName PROGRESS = new ElementName("progress", "progress", TreeBuilder.OTHER);
     public static final ElementName PRSUBSET = new ElementName("prsubset", "prsubset", TreeBuilder.OTHER);
     public static final ElementName QUOTIENT = new ElementName("quotient", "quotient", TreeBuilder.OTHER);
     public static final ElementName SELECTOR = new ElementName("selector", "selector", TreeBuilder.OTHER);
     public static final ElementName TEXTAREA = new ElementName("textarea", "textarea", TreeBuilder.TEXTAREA | SPECIAL);
     public static final ElementName TEXTPATH = new ElementName("textpath", "textPath", TreeBuilder.OTHER);
--- a/parser/html/javasrc/HtmlAttributes.java
+++ b/parser/html/javasrc/HtmlAttributes.java
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2008-2009 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -209,17 +209,17 @@ public final class HtmlAttributes implem
             return names[index].getQName(mode);
         } else {
             return null;
         }
     }
 
     public @IdType String getType(int index) {
         if (index < length && index >= 0) {
-            return names[index].getType(mode);
+            return (names[index] == AttributeName.ID) ? "ID" : "CDATA";
         } else {
             return null;
         }
     }
 
     // ]NOCPP]
     
     public AttributeName getAttributeName(int index) {
--- a/parser/html/javasrc/StackNode.java
+++ b/parser/html/javasrc/StackNode.java
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2009 Mozilla Foundation
+ * Copyright (c) 2007-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -38,16 +38,26 @@ final class StackNode<T> {
 
     final T node;
 
     // Only used on the list of formatting elements
     HtmlAttributes attributes;
 
     private int refcount = 1;
 
+    // [NOCPP[
+
+    private final TaintableLocatorImpl locator;
+    
+    public TaintableLocatorImpl getLocator() {
+        return locator;
+    }
+
+    // ]NOCPP]
+
     @Inline public int getFlags() {
         return flags;
     }
 
     public int getGroup() {
         return flags & ElementName.GROUP_MASK;
     }
 
@@ -61,150 +71,204 @@ final class StackNode<T> {
 
     public boolean isFosterParenting() {
         return (flags & ElementName.FOSTER_PARENTING) != 0;
     }
 
     public boolean isHtmlIntegrationPoint() {
         return (flags & ElementName.HTML_INTEGRATION_POINT) != 0;
     }
+
+    // [NOCPP[
     
+    public boolean isOptionalEndTag() {
+        return (flags & ElementName.OPTIONAL_END_TAG) != 0;
+    }
+    
+    // ]NOCPP]
+
     /**
-     * Constructor for copying. This doesn't take another 
-     * <code>StackNode</code> because in C++ the caller is reponsible for
-     * reobtaining the local names from another interner.
+     * Constructor for copying. This doesn't take another <code>StackNode</code>
+     * because in C++ the caller is reponsible for reobtaining the local names
+     * from another interner.
      * 
      * @param flags
      * @param ns
      * @param name
      * @param node
      * @param popName
      * @param attributes
      */
-    StackNode(int flags, @NsUri String ns, @Local String name,
-            T node, @Local String popName, HtmlAttributes attributes) {
+    StackNode(int flags, @NsUri String ns, @Local String name, T node,
+            @Local String popName, HtmlAttributes attributes
+            // [NOCPP[
+            , TaintableLocatorImpl locator
+    // ]NOCPP]
+    ) {
         this.flags = flags;
         this.name = name;
         this.popName = popName;
         this.ns = ns;
         this.node = node;
         this.attributes = attributes;
         this.refcount = 1;
+        // [NOCPP[
+        this.locator = locator;
+        // ]NOCPP]
     }
 
     /**
      * Short hand for well-known HTML elements.
      * 
      * @param elementName
      * @param node
      */
-    StackNode(ElementName elementName, T node) {
+    StackNode(ElementName elementName, T node
+    // [NOCPP[
+            , TaintableLocatorImpl locator
+    // ]NOCPP]
+    ) {
         this.flags = elementName.getFlags();
         this.name = elementName.name;
         this.popName = elementName.name;
         this.ns = "http://www.w3.org/1999/xhtml";
         this.node = node;
         this.attributes = null;
         this.refcount = 1;
         assert !elementName.isCustom() : "Don't use this constructor for custom elements.";
+        // [NOCPP[
+        this.locator = locator;
+        // ]NOCPP]
     }
 
     /**
      * Constructor for HTML formatting elements.
      * 
      * @param elementName
      * @param node
      * @param attributes
      */
-    StackNode(ElementName elementName, T node, HtmlAttributes attributes) {
+    StackNode(ElementName elementName, T node, HtmlAttributes attributes
+    // [NOCPP[
+            , TaintableLocatorImpl locator
+    // ]NOCPP]
+    ) {
         this.flags = elementName.getFlags();
         this.name = elementName.name;
         this.popName = elementName.name;
         this.ns = "http://www.w3.org/1999/xhtml";
         this.node = node;
         this.attributes = attributes;
         this.refcount = 1;
         assert !elementName.isCustom() : "Don't use this constructor for custom elements.";
+        // [NOCPP[
+        this.locator = locator;
+        // ]NOCPP]
     }
 
     /**
      * The common-case HTML constructor.
      * 
      * @param elementName
      * @param node
      * @param popName
      */
-    StackNode(ElementName elementName, T node, @Local String popName) {
+    StackNode(ElementName elementName, T node, @Local String popName
+    // [NOCPP[
+            , TaintableLocatorImpl locator
+    // ]NOCPP]
+    ) {
         this.flags = elementName.getFlags();
         this.name = elementName.name;
         this.popName = popName;
         this.ns = "http://www.w3.org/1999/xhtml";
         this.node = node;
         this.attributes = null;
         this.refcount = 1;
+        // [NOCPP[
+        this.locator = locator;
+        // ]NOCPP]
     }
 
     /**
      * Constructor for SVG elements. Note that the order of the arguments is
      * what distinguishes this from the HTML constructor. This is ugly, but
      * AFAICT the least disruptive way to make this work with Java's generics
      * and without unnecessary branches. :-(
      * 
      * @param elementName
      * @param popName
      * @param node
      */
-    StackNode(ElementName elementName, @Local String popName, T node) {
+    StackNode(ElementName elementName, @Local String popName, T node
+    // [NOCPP[
+            , TaintableLocatorImpl locator
+    // ]NOCPP]
+    ) {
         this.flags = prepareSvgFlags(elementName.getFlags());
         this.name = elementName.name;
         this.popName = popName;
         this.ns = "http://www.w3.org/2000/svg";
         this.node = node;
         this.attributes = null;
         this.refcount = 1;
+        // [NOCPP[
+        this.locator = locator;
+        // ]NOCPP]
     }
 
     /**
      * Constructor for MathML.
      * 
      * @param elementName
      * @param node
      * @param popName
      * @param markAsIntegrationPoint
      */
     StackNode(ElementName elementName, T node, @Local String popName,
-            boolean markAsIntegrationPoint) {
-        this.flags = prepareMathFlags(elementName.getFlags(), markAsIntegrationPoint);
+            boolean markAsIntegrationPoint
+            // [NOCPP[
+            , TaintableLocatorImpl locator
+    // ]NOCPP]
+    ) {
+        this.flags = prepareMathFlags(elementName.getFlags(),
+                markAsIntegrationPoint);
         this.name = elementName.name;
         this.popName = popName;
         this.ns = "http://www.w3.org/1998/Math/MathML";
         this.node = node;
         this.attributes = null;
         this.refcount = 1;
+        // [NOCPP[
+        this.locator = locator;
+        // ]NOCPP]
     }
-    
+
     private static int prepareSvgFlags(int flags) {
-        flags &= ~(ElementName.FOSTER_PARENTING | ElementName.SCOPING | ElementName.SPECIAL);
+        flags &= ~(ElementName.FOSTER_PARENTING | ElementName.SCOPING
+                | ElementName.SPECIAL | ElementName.OPTIONAL_END_TAG);
         if ((flags & ElementName.SCOPING_AS_SVG) != 0) {
             flags |= (ElementName.SCOPING | ElementName.SPECIAL | ElementName.HTML_INTEGRATION_POINT);
         }
         return flags;
     }
 
-    private static int prepareMathFlags(int flags, boolean markAsIntegrationPoint) {
-        flags &= ~(ElementName.FOSTER_PARENTING | ElementName.SCOPING | ElementName.SPECIAL);
+    private static int prepareMathFlags(int flags,
+            boolean markAsIntegrationPoint) {
+        flags &= ~(ElementName.FOSTER_PARENTING | ElementName.SCOPING
+                | ElementName.SPECIAL | ElementName.OPTIONAL_END_TAG);
         if ((flags & ElementName.SCOPING_AS_MATHML) != 0) {
             flags |= (ElementName.SCOPING | ElementName.SPECIAL);
         }
         if (markAsIntegrationPoint) {
             flags |= ElementName.HTML_INTEGRATION_POINT;
         }
         return flags;
     }
-    
+
     @SuppressWarnings("unused") private void destructor() {
         Portability.delete(attributes);
     }
 
     public void dropAttributes() {
         attributes = null;
     }
 
--- a/parser/html/javasrc/TreeBuilder.java
+++ b/parser/html/javasrc/TreeBuilder.java
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2010 Mozilla Foundation
+ * Copyright (c) 2007-2011 Mozilla Foundation
  * Portions of comments Copyright 2004-2008 Apple Computer, Inc., Mozilla 
  * Foundation, and Opera Software ASA.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
@@ -445,65 +445,165 @@ public abstract class TreeBuilder<T> imp
     final void fatal(String s) throws SAXException {
         SAXParseException spe = new SAXParseException(s, tokenizer);
         if (errorHandler != null) {
             errorHandler.fatalError(spe);
         }
         throw spe;
     }
 
-    // ]NOCPP]
-
     /**
      * Reports a Parse Error.
      * 
      * @param message
      *            the message
      * @throws SAXException
      */
     final void err(String message) throws SAXException {
-        // [NOCPP[
         if (errorHandler == null) {
             return;
         }
         errNoCheck(message);
-        // ]NOCPP]
     }
     
     /**
      * Reports a Parse Error without checking if an error handler is present.
      * 
      * @param message
      *            the message
      * @throws SAXException
      */
     final void errNoCheck(String message) throws SAXException {
-        // [NOCPP[
         SAXParseException spe = new SAXParseException(message, tokenizer);
         errorHandler.error(spe);
-        // ]NOCPP]
+    }
+
+    /**
+     * Reports a stray start tag.
+     * @param name the name of the stray tag
+     * 
+     * @throws SAXException
+     */
+    private void errStrayStartTag(String name) throws SAXException {
+        err("Stray end tag \u201C" + name + "\u201D.");
+    }
+
+    /**
+     * Reports a stray end tag.
+     * @param name the name of the stray tag
+     * 
+     * @throws SAXException
+     */
+    private void errStrayEndTag(String name) throws SAXException {
+        err("Stray end tag \u201C" + name + "\u201D.");
+    }
+    
+    /**
+     * Reports a state when elements expected to be closed were not.
+     * 
+     * @param eltPos the position of the start tag on the stack of the element
+     * being closed.
+     * @param name the name of the end tag
+     * 
+     * @throws SAXException
+     */
+    private void errUnclosedElements(int eltPos, String name) throws SAXException {
+        errNoCheck("End tag \u201C" + name + "\u201D seen, but there were open elements.");
+        errListUnclosedStartTags(eltPos);
+    }
+
+    /**
+     * Reports a state when elements expected to be closed ahead of an implied 
+     * end tag but were not.
+     * 
+     * @param eltPos the position of the start tag on the stack of the element
+     * being closed.
+     * @param name the name of the end tag
+     * 
+     * @throws SAXException
+     */
+    private void errUnclosedElementsImplied(int eltPos, String name) throws SAXException {
+        errNoCheck("End tag \u201C" + name + "\u201D implied, but there were open elements.");
+        errListUnclosedStartTags(eltPos);
+    }
+
+    /**
+     * Reports a state when elements expected to be closed ahead of an implied 
+     * table cell close.
+     * 
+     * @param eltPos the position of the start tag on the stack of the element
+     * being closed.
+     * @throws SAXException
+     */
+    private void errUnclosedElementsCell(int eltPos) throws SAXException {
+        errNoCheck("A table cell was implicitly closed, but there were open elements.");
+        errListUnclosedStartTags(eltPos);
+    }
+    
+    private void errListUnclosedStartTags(int eltPos) throws SAXException {
+        if (currentPtr != -1) {
+            for (int i = currentPtr; i > eltPos; i--) {
+                reportUnclosedElementNameAndLocation(i);
+            }
+        }
+    }
+
+    /**
+     * Reports arriving at/near end of document with unclosed elements remaining.
+     * 
+     * @param message
+     *            the message
+     * @throws SAXException
+     */
+    private void errEndWithUnclosedElements(String message) throws SAXException {
+        if (errorHandler == null) {
+            return;
+        }
+        errNoCheck(message);
+        // just report all remaining unclosed elements
+        errListUnclosedStartTags(0);
+    }
+
+    /**
+     * Reports the name and location of an unclosed element.
+     * 
+     * @throws SAXException
+     */
+    private final void reportUnclosedElementNameAndLocation(int pos) throws SAXException {
+        StackNode<T> node = stack[pos];
+        if (node.isOptionalEndTag()) {
+            return;
+        }
+        TaintableLocatorImpl locator = node.getLocator();
+        if (locator.isTainted()) {
+            return;
+        }
+        locator.markTainted();
+        SAXParseException spe = new SAXParseException(
+                "Unclosed element \u201C" + node.popName + "\u201D.", locator);
+        errorHandler.error(spe);
     }
 
     /**
      * Reports a warning
      * 
      * @param message
      *            the message
      * @throws SAXException
      */
     final void warn(String message) throws SAXException {
-        // [NOCPP[
         if (errorHandler == null) {
             return;
         }
         SAXParseException spe = new SAXParseException(message, tokenizer);
         errorHandler.warning(spe);
-        // ]NOCPP]
     }
 
+    // ]NOCPP]
+    
     @SuppressWarnings("unchecked") public final void startTokenization(Tokenizer self) throws SAXException {
         tokenizer = self;
         stack = new StackNode[64];
         listOfActiveFormattingElements = new StackNode[64];
         needToDropLF = false;
         originalMode = INITIAL;
         currentPtr = -1;
         listPtr = -1;
@@ -521,18 +621,21 @@ public abstract class TreeBuilder<T> imp
         framesetOk = true;
         if (fragment) {
             T elt;
             if (contextNode != null) {
                 elt = contextNode;
             } else {
                 elt = createHtmlElementSetAsRoot(tokenizer.emptyAttributes());
             }
-            StackNode<T> node = new StackNode<T>(
-                    ElementName.HTML, elt);
+            StackNode<T> node = new StackNode<T>(ElementName.HTML, elt
+            // [NOCPP[
+                    , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+            // ]NOCPP]
+            );
             currentPtr++;
             stack[currentPtr] = node;
             resetTheInsertionMode();
             if ("title" == contextName || "textarea" == contextName) {
                 tokenizer.setStateAndEndTagExpectation(Tokenizer.RCDATA, contextName);
             } else if ("style" == contextName || "xmp" == contextName
                     || "iframe" == contextName || "noembed" == contextName
                     || "noframes" == contextName
@@ -1293,25 +1396,25 @@ public abstract class TreeBuilder<T> imp
                      */
                     continue;
                 case BEFORE_HEAD:
                     appendToCurrentNodeAndPushHeadElement(HtmlAttributes.EMPTY_ATTRIBUTES);
                     mode = IN_HEAD;
                     continue;
                 case IN_HEAD:
                     if (errorHandler != null && currentPtr > 1) {
-                        err("End of file seen and there were open elements.");
+                        errEndWithUnclosedElements("End of file seen and there were open elements.");
                     }
                     while (currentPtr > 0) {
                         popOnEof();
                     }
                     mode = AFTER_HEAD;
                     continue;
                 case IN_HEAD_NOSCRIPT:
-                    err("End of file seen and there were open elements.");
+                    errEndWithUnclosedElements("End of file seen and there were open elements.");
                     while (currentPtr > 1) {
                         popOnEof();
                     }
                     mode = IN_HEAD;
                     continue;
                 case AFTER_HEAD:
                     appendToCurrentNodeAndPushBodyElement();
                     mode = IN_BODY;
@@ -1337,39 +1440,42 @@ public abstract class TreeBuilder<T> imp
                             case LI:
                             case P:
                             case TBODY_OR_THEAD_OR_TFOOT:
                             case TD_OR_TH:
                             case BODY:
                             case HTML:
                                 break;
                             default:
-                                err("End of file seen and there were open elements.");
+                                errEndWithUnclosedElements("End of file seen and there were open elements.");
                                 break openelementloop;
                         }
                     }
                     // ]NOCPP]
                     break eofloop;
                 case TEXT:
-                    err("End of file seen when expecting text or an end tag.");
+                    if (errorHandler != null) {
+                        errNoCheck("End of file seen when expecting text or an end tag.");
+                        errListUnclosedStartTags(0);
+                    }
                     // XXX mark script as already executed
                     if (originalMode == AFTER_HEAD) {
                         popOnEof();
                     }
                     popOnEof();
                     mode = originalMode;
                     continue;
                 case IN_TABLE_BODY:
                 case IN_ROW:
                 case IN_TABLE:
                 case IN_SELECT:
                 case IN_SELECT_IN_TABLE:
                 case IN_FRAMESET:
                     if (errorHandler != null && currentPtr > 0) {
-                        errNoCheck("End of file seen and there were open elements.");
+                        errEndWithUnclosedElements("End of file seen and there were open elements.");
                     }
                     break eofloop;
                 case AFTER_BODY:
                 case AFTER_FRAMESET:
                 case AFTER_AFTER_BODY:
                 case AFTER_AFTER_FRAMESET:
                 default:
                     // [NOCPP[
@@ -1419,16 +1525,17 @@ public abstract class TreeBuilder<T> imp
         // ]NOCPP]
         charBuffer = null;
         end();
     }
 
     public final void startTag(ElementName elementName,
             HtmlAttributes attributes, boolean selfClosing) throws SAXException {
         flushCharacters();
+
         // [NOCPP[
         if (errorHandler != null) {
             // ID uniqueness
             @IdType String id = attributes.getId();
             if (id != null) {
                 LocatorImpl oldLoc = idLocations.get(id);
                 if (oldLoc != null) {
                     err("Duplicate ID \u201C" + id + "\u201D.");
@@ -1539,17 +1646,17 @@ public abstract class TreeBuilder<T> imp
                             mode = IN_ROW;
                             continue;
                         case CAPTION:
                         case COL:
                         case COLGROUP:
                         case TBODY_OR_THEAD_OR_TFOOT:
                             eltPos = findLastInTableScopeOrRootTbodyTheadTfoot();
                             if (eltPos == 0) {
-                                err("Stray \u201C" + name + "\u201D start tag.");
+                                errStrayStartTag(name);
                                 break starttagloop;
                             } else {
                                 clearStackBackTo(eltPos);
                                 pop();
                                 mode = IN_TABLE;
                                 continue;
                             }
                         default:
@@ -1700,19 +1807,17 @@ public abstract class TreeBuilder<T> imp
                 case IN_CAPTION:
                     switch (group) {
                         case CAPTION:
                         case COL:
                         case COLGROUP:
                         case TBODY_OR_THEAD_OR_TFOOT:
                         case TR:
                         case TD_OR_TH:
-                            err("Stray \u201C"
-                                    + name
-                                    + "\u201D start tag in \u201Ccaption\u201D.");
+                            errStrayStartTag(name);
                             eltPos = findLastInTableScope("caption");
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 break starttagloop;
                             }
                             generateImpliedEndTags();
                             if (errorHandler != null && currentPtr != eltPos) {
                                 errNoCheck("Unclosed elements on stack.");
                             }
@@ -1745,33 +1850,33 @@ public abstract class TreeBuilder<T> imp
                             // fall through to IN_BODY
                     }
                 case FRAMESET_OK:
                     switch (group) {
                         case FRAMESET:
                             if (mode == FRAMESET_OK) {
                                 if (currentPtr == 0 || stack[1].getGroup() != BODY) {
                                     assert fragment;
-                                    err("Stray \u201Cframeset\u201D start tag.");
+                                    errStrayStartTag(name);
                                     break starttagloop;
                                 } else {
                                     err("\u201Cframeset\u201D start tag seen.");
                                     detachFromParent(stack[1].node);
                                     while (currentPtr > 0) {
                                         pop();
                                     }
                                     appendToCurrentNodeAndPushElement(
                                             elementName,
                                             attributes);
                                     mode = IN_FRAMESET;
                                     attributes = null; // CPP
                                     break starttagloop;
                                 }
                             } else {
-                                err("Stray \u201Cframeset\u201D start tag.");
+                                errStrayStartTag(name);
                                 break starttagloop;
                             }
                             // NOT falling through!
                         case PRE_OR_LISTING:
                         case LI:
                         case DD_OR_DT:
                         case BUTTON:
                         case MARQUEE_OR_APPLET:
@@ -1797,17 +1902,17 @@ public abstract class TreeBuilder<T> imp
                             // fall through to IN_BODY
                         default:
                             // fall through to IN_BODY
                     }
                 case IN_BODY:
                     inbodyloop: for (;;) {
                         switch (group) {
                             case HTML:
-                                err("Stray \u201Chtml\u201D start tag.");
+                                errStrayStartTag(name);
                                 if (!fragment) {
                                     addAttributesToHtml(attributes);
                                     attributes = null; // CPP
                                 }
                                 break starttagloop;
                             case BASE:
                             case LINK_OR_BASEFONT_OR_BGSOUND:
                             case META:
@@ -1816,17 +1921,17 @@ public abstract class TreeBuilder<T> imp
                             case TITLE:
                             case COMMAND:
                                 // Fall through to IN_HEAD
                                 break inbodyloop;
                             case BODY:
                                 if (currentPtr == 0
                                         || stack[1].getGroup() != BODY) {
                                     assert fragment;
-                                    err("Stray \u201Cbody\u201D start tag.");
+                                    errStrayStartTag(name);
                                     break starttagloop;
                                 }
                                 err("\u201Cbody\u201D start tag found but the \u201Cbody\u201D element is already open.");
                                 framesetOk = false;
                                 if (mode == FRAMESET_OK) {
                                     mode = IN_BODY;
                                 }
                                 if (addAttributesToBody(attributes)) {
@@ -1885,17 +1990,17 @@ public abstract class TreeBuilder<T> imp
                                 for (;;) {
                                     StackNode<T> node = stack[eltPos]; // weak
                                     // ref
                                     if (node.getGroup() == group) { // LI or
                                         // DD_OR_DT
                                         generateImpliedEndTagsExceptFor(node.name);
                                         if (errorHandler != null
                                                 && eltPos != currentPtr) {
-                                            errNoCheck("Unclosed elements inside a list.");
+                                            errUnclosedElementsImplied(eltPos, name);
                                         }
                                         while (currentPtr >= eltPos) {
                                             pop();
                                         }
                                         break;
                                     } else if (node.isScoping()
                                             || (node.isSpecial()
                                                     && node.name != "p"
@@ -1963,17 +2068,17 @@ public abstract class TreeBuilder<T> imp
                             case BUTTON:
                                 eltPos = findLastInScope(name);
                                 if (eltPos != TreeBuilder.NOT_FOUND_ON_STACK) {
                                     err("\u201Cbutton\u201D start tag seen when there was an open \u201Cbutton\u201D element in scope.");
 
                                     generateImpliedEndTags();
                                     if (errorHandler != null
                                             && !isCurrent(name)) {
-                                        errNoCheck("End tag \u201Cbutton\u201D seen but there were unclosed elements.");
+                                        errUnclosedElementsImplied(eltPos, name);
                                     }
                                     while (currentPtr >= eltPos) {
                                         pop();
                                     }
                                     continue starttagloop;
                                 } else {
                                     reconstructTheActiveFormattingElements();
                                     appendToCurrentNodeAndPushElementMayFoster(
@@ -2259,17 +2364,17 @@ public abstract class TreeBuilder<T> imp
                             case COL:
                             case COLGROUP:
                             case TBODY_OR_THEAD_OR_TFOOT:
                             case TR:
                             case TD_OR_TH:
                             case FRAME:
                             case FRAMESET:
                             case HEAD:
-                                err("Stray start tag \u201C" + name + "\u201D.");
+                                errStrayStartTag(name);
                                 break starttagloop;
                             case OUTPUT_OR_LABEL:
                                 reconstructTheActiveFormattingElements();
                                 appendToCurrentNodeAndPushElementMayFoster(
                                         elementName,
                                         attributes, formPointer);
                                 attributes = null; // CPP
                                 break starttagloop;
@@ -2281,17 +2386,17 @@ public abstract class TreeBuilder<T> imp
                                 attributes = null; // CPP
                                 break starttagloop;
                         }
                     }
                 case IN_HEAD:
                     inheadloop: for (;;) {
                         switch (group) {
                             case HTML:
-                                err("Stray \u201Chtml\u201D start tag.");
+                                errStrayStartTag(name);
                                 if (!fragment) {
                                     addAttributesToHtml(attributes);
                                     attributes = null; // CPP
                                 }
                                 break starttagloop;
                             case BASE:
                             case COMMAND:
                                 appendVoidElementToCurrentMayFoster(
@@ -2367,17 +2472,17 @@ public abstract class TreeBuilder<T> imp
                                 continue starttagloop;
                         }
                     }
                 case IN_HEAD_NOSCRIPT:
                     switch (group) {
                         case HTML:
                             // XXX did Hixie really mean to omit "base"
                             // here?
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case LINK_OR_BASEFONT_OR_BGSOUND:
                             appendVoidElementToCurrentMayFoster(
                                     elementName,
@@ -2415,17 +2520,17 @@ public abstract class TreeBuilder<T> imp
                                     + "\u201D in \u201Chead\u201D.");
                             pop();
                             mode = IN_HEAD;
                             continue;
                     }
                 case IN_COLUMN_GROUP:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case COL:
                             appendVoidElementToCurrentMayFoster(
                                     elementName,
@@ -2464,17 +2569,17 @@ public abstract class TreeBuilder<T> imp
                             resetTheInsertionMode();
                             continue;
                         default:
                             // fall through to IN_SELECT
                     }
                 case IN_SELECT:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case OPTION:
                             if (isCurrent("option")) {
                                 pop();
@@ -2536,30 +2641,30 @@ public abstract class TreeBuilder<T> imp
                                     attributes);
                             originalMode = mode;
                             mode = TEXT;
                             tokenizer.setStateAndEndTagExpectation(
                                     Tokenizer.SCRIPT_DATA, elementName);
                             attributes = null; // CPP
                             break starttagloop;
                         default:
-                            err("Stray \u201C" + name + "\u201D start tag.");
+                            errStrayStartTag(name);
                             break starttagloop;
                     }
                 case AFTER_BODY:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         default:
-                            err("Stray \u201C" + name + "\u201D start tag.");
+                            errStrayStartTag(name);
                             mode = framesetOk ? FRAMESET_OK : IN_BODY;
                             continue;
                     }
                 case IN_FRAMESET:
                     switch (group) {
                         case FRAMESET:
                             appendToCurrentNodeAndPushElement(
                                     elementName,
@@ -2574,34 +2679,34 @@ public abstract class TreeBuilder<T> imp
                             attributes = null; // CPP
                             break starttagloop;
                         default:
                             // fall through to AFTER_FRAMESET
                     }
                 case AFTER_FRAMESET:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case NOFRAMES:
                             appendToCurrentNodeAndPushElement(
                                     elementName,
                                     attributes);
                             originalMode = mode;
                             mode = TEXT;
                             tokenizer.setStateAndEndTagExpectation(
                                     Tokenizer.RAWTEXT, elementName);
                             attributes = null; // CPP
                             break starttagloop;
                         default:
-                            err("Stray \u201C" + name + "\u201D start tag.");
+                            errStrayStartTag(name);
                             break starttagloop;
                     }
                 case INITIAL:
                     /*
                      * Parse error.
                      */
                     // [NOCPP[
                     switch (doctypeExpectation) {
@@ -2666,17 +2771,17 @@ public abstract class TreeBuilder<T> imp
                             /*
                              * reprocess the current token.
                              */
                             continue;
                     }
                 case BEFORE_HEAD:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case HEAD:
                             /*
                              * A start tag whose tag name is "head"
@@ -2712,17 +2817,17 @@ public abstract class TreeBuilder<T> imp
                              * generated, with the current token being
                              * reprocessed in the "after head" insertion mode.
                              */
                             continue;
                     }
                 case AFTER_HEAD:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case BODY:
                             if (attributes.getLength() == 0) {
                                 // This has the right magic side effect
@@ -2810,59 +2915,59 @@ public abstract class TreeBuilder<T> imp
                                     attributes);
                             originalMode = mode;
                             mode = TEXT;
                             tokenizer.setStateAndEndTagExpectation(
                                     Tokenizer.RCDATA, elementName);
                             attributes = null; // CPP
                             break starttagloop;
                         case HEAD:
-                            err("Stray start tag \u201Chead\u201D.");
+                            errStrayStartTag(name);
                             break starttagloop;
                         default:
                             appendToCurrentNodeAndPushBodyElement();
                             mode = FRAMESET_OK;
                             continue;
                     }
                 case AFTER_AFTER_BODY:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         default:
-                            err("Stray \u201C" + name + "\u201D start tag.");
+                            errStrayStartTag(name);
                             fatal();
                             mode = framesetOk ? FRAMESET_OK : IN_BODY;
                             continue;
                     }
                 case AFTER_AFTER_FRAMESET:
                     switch (group) {
                         case HTML:
-                            err("Stray \u201Chtml\u201D start tag.");
+                            errStrayStartTag(name);
                             if (!fragment) {
                                 addAttributesToHtml(attributes);
                                 attributes = null; // CPP
                             }
                             break starttagloop;
                         case NOFRAMES:
                             appendToCurrentNodeAndPushElementMayFoster(
                                     elementName,
                                     attributes);
                             originalMode = mode;
                             mode = TEXT;
                             tokenizer.setStateAndEndTagExpectation(
                                     Tokenizer.SCRIPT_DATA, elementName);
                             attributes = null; // CPP
                             break starttagloop;
                         default:
-                            err("Stray \u201C" + name + "\u201D start tag.");
+                            errStrayStartTag(name);
                             break starttagloop;
                     }
                 case TEXT:
                     assert false;
                     break starttagloop; // Avoid infinite loop if the assertion
                                         // fails
             }
         }
@@ -3124,17 +3229,17 @@ public abstract class TreeBuilder<T> imp
                                 break endtagloop;
                             }
                             clearStackBackTo(eltPos);
                             pop();
                             mode = IN_TABLE_BODY;
                             continue;
                         case TBODY_OR_THEAD_OR_TFOOT:
                             if (findLastInTableScope(name) == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             eltPos = findLastOrRoot(TreeBuilder.TR);
                             if (eltPos == 0) {
                                 assert fragment;
                                 err("No table row to close.");
                                 break endtagloop;
                             }
@@ -3143,258 +3248,254 @@ public abstract class TreeBuilder<T> imp
                             mode = IN_TABLE_BODY;
                             continue;
                         case BODY:
                         case CAPTION:
                         case COL:
                         case COLGROUP:
                         case HTML:
                         case TD_OR_TH:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         default:
                             // fall through to IN_TABLE
                     }
                 case IN_TABLE_BODY:
                     switch (group) {
                         case TBODY_OR_THEAD_OR_TFOOT:
                             eltPos = findLastOrRoot(name);
                             if (eltPos == 0) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             clearStackBackTo(eltPos);
                             pop();
                             mode = IN_TABLE;
                             break endtagloop;
                         case TABLE:
                             eltPos = findLastInTableScopeOrRootTbodyTheadTfoot();
                             if (eltPos == 0) {
                                 assert fragment;
-                                err("Stray end tag \u201Ctable\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             clearStackBackTo(eltPos);
                             pop();
                             mode = IN_TABLE;
                             continue;
                         case BODY:
                         case CAPTION:
                         case COL:
                         case COLGROUP:
                         case HTML:
                         case TD_OR_TH:
                         case TR:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         default:
                             // fall through to IN_TABLE
                     }
                 case IN_TABLE:
                     switch (group) {
                         case TABLE:
                             eltPos = findLast("table");
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 assert fragment;
-                                err("Stray end tag \u201Ctable\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             while (currentPtr >= eltPos) {
                                 pop();
                             }
                             resetTheInsertionMode();
                             break endtagloop;
                         case BODY:
                         case CAPTION:
                         case COL:
                         case COLGROUP:
                         case HTML:
                         case TBODY_OR_THEAD_OR_TFOOT:
                         case TD_OR_TH:
                         case TR:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             // fall through to IN_BODY
                     }
                 case IN_CAPTION:
                     switch (group) {
                         case CAPTION:
                             eltPos = findLastInTableScope("caption");
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 break endtagloop;
                             }
                             generateImpliedEndTags();
                             if (errorHandler != null && currentPtr != eltPos) {
-                                errNoCheck("Unclosed elements on stack.");
+                                errUnclosedElements(eltPos, name);
                             }
                             while (currentPtr >= eltPos) {
                                 pop();
                             }
                             clearTheListOfActiveFormattingElementsUpToTheLastMarker();
                             mode = IN_TABLE;
                             break endtagloop;
                         case TABLE:
                             err("\u201Ctable\u201D closed but \u201Ccaption\u201D was still open.");
                             eltPos = findLastInTableScope("caption");
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 break endtagloop;
                             }
                             generateImpliedEndTags();
                             if (errorHandler != null && currentPtr != eltPos) {
-                                errNoCheck("Unclosed elements on stack.");
+                                errUnclosedElements(eltPos, name);
                             }
                             while (currentPtr >= eltPos) {
                                 pop();
                             }
                             clearTheListOfActiveFormattingElementsUpToTheLastMarker();
                             mode = IN_TABLE;
                             continue;
                         case BODY:
                         case COL:
                         case COLGROUP:
                         case HTML:
                         case TBODY_OR_THEAD_OR_TFOOT:
                         case TD_OR_TH:
                         case TR:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         default:
                             // fall through to IN_BODY
                     }
                 case IN_CELL:
                     switch (group) {
                         case TD_OR_TH:
                             eltPos = findLastInTableScope(name);
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             generateImpliedEndTags();
                             if (errorHandler != null && !isCurrent(name)) {
-                                errNoCheck("Unclosed elements.");
+                                errUnclosedElements(eltPos, name);
                             }
                             while (currentPtr >= eltPos) {
                                 pop();
                             }
                             clearTheListOfActiveFormattingElementsUpToTheLastMarker();
                             mode = IN_ROW;
                             break endtagloop;
                         case TABLE:
                         case TBODY_OR_THEAD_OR_TFOOT:
                         case TR:
                             if (findLastInTableScope(name) == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             closeTheCell(findLastInTableScopeTdTh());
                             continue;
                         case BODY:
                         case CAPTION:
                         case COL:
                         case COLGROUP:
                         case HTML:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         default:
                             // fall through to IN_BODY
                     }
                 case FRAMESET_OK:
                 case IN_BODY:
                     switch (group) {
                         case BODY:
                             if (!isSecondOnStackBody()) {
                                 assert fragment;
-                                err("Stray end tag \u201Cbody\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             assert currentPtr >= 1;
                             if (errorHandler != null) {
                                 uncloseloop1: for (int i = 2; i <= currentPtr; i++) {
                                     switch (stack[i].getGroup()) {
                                         case DD_OR_DT:
                                         case LI:
                                         case OPTGROUP:
                                         case OPTION: // is this possible?
                                         case P:
                                         case RT_OR_RP:
                                         case TD_OR_TH:
                                         case TBODY_OR_THEAD_OR_TFOOT:
                                             break;
                                         default:
-                                            err("End tag for \u201Cbody\u201D seen but there were unclosed elements.");
+                                            errEndWithUnclosedElements("End tag for \u201Cbody\u201D seen but there were unclosed elements.");
                                             break uncloseloop1;
                                     }
                                 }
                             }
                             mode = AFTER_BODY;
                             break endtagloop;
                         case HTML:
                             if (!isSecondOnStackBody()) {
                                 assert fragment;
-                                err("Stray end tag \u201Chtml\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             if (errorHandler != null) {
                                 uncloseloop2: for (int i = 0; i <= currentPtr; i++) {
                                     switch (stack[i].getGroup()) {
                                         case DD_OR_DT:
                                         case LI:
                                         case P:
                                         case TBODY_OR_THEAD_OR_TFOOT:
                                         case TD_OR_TH:
                                         case BODY:
                                         case HTML:
                                             break;
                                         default:
-                                            err("End tag for \u201Chtml\u201D seen but there were unclosed elements.");
+                                            errEndWithUnclosedElements("End tag for \u201Chtml\u201D seen but there were unclosed elements.");
                                             break uncloseloop2;
                                     }
                                 }
                             }
                             mode = AFTER_BODY;
                             continue;
                         case DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU:
                         case UL_OR_OL_OR_DL:
                         case PRE_OR_LISTING:
                         case FIELDSET:
                         case BUTTON:
                         case 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:
                             eltPos = findLastInScope(name);
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                             } else {
                                 generateImpliedEndTags();
                                 if (errorHandler != null && !isCurrent(name)) {
-                                    errNoCheck("End tag \u201C"
-                                            + name
-                                            + "\u201D seen but there were unclosed elements.");
+                                    errUnclosedElements(eltPos, name);
                                 }
                                 while (currentPtr >= eltPos) {
                                     pop();
                                 }
                             }
                             break endtagloop;
                         case FORM:
                             if (formPointer == null) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             formPointer = null;
                             eltPos = findLastInScope(name);
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             generateImpliedEndTags();
                             if (errorHandler != null && !isCurrent(name)) {
-                                errNoCheck("End tag \u201C"
-                                        + name
-                                        + "\u201D seen but there were unclosed elements.");
+                                errUnclosedElements(eltPos, name);
                             }
                             removeFromStack(eltPos);
                             break endtagloop;
                         case P:
                             eltPos = findLastInButtonScope("p");
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 err("No \u201Cp\u201D element in scope but a \u201Cp\u201D end tag seen.");
                                 // XXX Can the 'in foreign' case happen anymore?
@@ -3409,31 +3510,31 @@ public abstract class TreeBuilder<T> imp
                                 appendVoidElementToCurrentMayFoster(
                                         elementName,
                                         HtmlAttributes.EMPTY_ATTRIBUTES);
                                 break endtagloop;
                             }
                             generateImpliedEndTagsExceptFor("p");
                             assert eltPos != TreeBuilder.NOT_FOUND_ON_STACK;
                             if (errorHandler != null && eltPos != currentPtr) {
-                                errNoCheck("End tag for \u201Cp\u201D seen, but there were unclosed elements.");
+                                errUnclosedElements(eltPos, name);
                             }
                             while (currentPtr >= eltPos) {
                                 pop();
                             }
                             break endtagloop;
                         case LI:
                             eltPos = findLastInListScope(name);
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 err("No \u201Cli\u201D element in list scope but a \u201Cli\u201D end tag seen.");
                             } else {
                                 generateImpliedEndTagsExceptFor(name);
                                 if (errorHandler != null
                                         && eltPos != currentPtr) {
-                                    errNoCheck("End tag for \u201Cli\u201D seen, but there were unclosed elements.");
+                                    errUnclosedElements(eltPos, name);
                                 }
                                 while (currentPtr >= eltPos) {
                                     pop();
                                 }
                             }
                             break endtagloop;
                         case DD_OR_DT:
                             eltPos = findLastInScope(name);
@@ -3441,52 +3542,46 @@ public abstract class TreeBuilder<T> imp
                                 err("No \u201C"
                                         + name
                                         + "\u201D element in scope but a \u201C"
                                         + name + "\u201D end tag seen.");
                             } else {
                                 generateImpliedEndTagsExceptFor(name);
                                 if (errorHandler != null
                                         && eltPos != currentPtr) {
-                                    errNoCheck("End tag for \u201C"
-                                            + name
-                                            + "\u201D seen, but there were unclosed elements.");
+                                    errUnclosedElements(eltPos, name);
                                 }
                                 while (currentPtr >= eltPos) {
                                     pop();
                                 }
                             }
                             break endtagloop;
                         case H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6:
                             eltPos = findLastInScopeHn();
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                             } else {
                                 generateImpliedEndTags();
                                 if (errorHandler != null && !isCurrent(name)) {
-                                    errNoCheck("End tag \u201C"
-                                            + name
-                                            + "\u201D seen but there were unclosed elements.");
+                                    errUnclosedElements(eltPos, name);
                                 }
                                 while (currentPtr >= eltPos) {
                                     pop();
                                 }
                             }
                             break endtagloop;
                         case OBJECT:
                         case MARQUEE_OR_APPLET:
                             eltPos = findLastInScope(name);
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
-                                err("Stray end tag \u201C" + name + "\u201D.");
+                                errStrayEndTag(name);
                             } else {
                                 generateImpliedEndTags();
                                 if (errorHandler != null && !isCurrent(name)) {
-                                    errNoCheck("End tag \u201C"
-                                            + name
-                                            + "\u201D seen but there were unclosed elements.");
+                                    errUnclosedElements(eltPos, name);
                                 }
                                 while (currentPtr >= eltPos) {
                                     pop();
                                 }
                                 clearTheListOfActiveFormattingElementsUpToTheLastMarker();
                             }
                             break endtagloop;
                         case BR:
@@ -3513,21 +3608,21 @@ public abstract class TreeBuilder<T> imp
                         case HR:
                         case ISINDEX:
                         case IFRAME:
                         case NOEMBED: // XXX???
                         case NOFRAMES: // XXX??
                         case SELECT:
                         case TABLE:
                         case TEXTAREA: // XXX??
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         case NOSCRIPT:
                             if (scriptingEnabled) {
-                                err("Stray end tag \u201Cnoscript\u201D.");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             } else {
                                 // fall through
                             }
                         case A:
                         case B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U:
                         case FONT:
                         case NOBR:
@@ -3543,27 +3638,24 @@ public abstract class TreeBuilder<T> imp
 
                             eltPos = currentPtr;
                             for (;;) {
                                 StackNode<T> node = stack[eltPos];
                                 if (node.name == name) {
                                     generateImpliedEndTags();
                                     if (errorHandler != null
                                             && !isCurrent(name)) {
-                                        errNoCheck("End tag \u201C"
-                                                + name
-                                                + "\u201D seen but there were unclosed elements.");
+                                        errUnclosedElements(eltPos, name);
                                     }
                                     while (currentPtr >= eltPos) {
                                         pop();
                                     }
                                     break endtagloop;
                                 } else if (node.isSpecial()) {
-                                    err("Stray end tag \u201C" + name
-                                            + "\u201D.");
+                                    errStrayEndTag(name);
                                     break endtagloop;
                                 }
                                 eltPos--;
                             }
                     }
                 case IN_COLUMN_GROUP:
                     switch (group) {
                         case COLGROUP:
@@ -3571,17 +3663,17 @@ public abstract class TreeBuilder<T> imp
                                 assert fragment;
                                 err("Garbage in \u201Ccolgroup\u201D fragment.");
                                 break endtagloop;
                             }
                             pop();
                             mode = IN_TABLE;
                             break endtagloop;
                         case COL:
-                            err("Stray end tag \u201Ccol\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                         default:
                             if (currentPtr == 0) {
                                 assert fragment;
                                 err("Garbage in \u201Ccolgroup\u201D fragment.");
                                 break endtagloop;
                             }
                             pop();
@@ -3617,85 +3709,85 @@ public abstract class TreeBuilder<T> imp
                     }
                 case IN_SELECT:
                     switch (group) {
                         case OPTION:
                             if (isCurrent("option")) {
                                 pop();
                                 break endtagloop;
                             } else {
-                                err("Stray end tag \u201Coption\u201D");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                         case OPTGROUP:
                             if (isCurrent("option")
                                     && "optgroup" == stack[currentPtr - 1].name) {
                                 pop();
                             }
                             if (isCurrent("optgroup")) {
                                 pop();
                             } else {
-                                err("Stray end tag \u201Coptgroup\u201D");
+                                errStrayEndTag(name);
                             }
                             break endtagloop;
                         case SELECT:
                             eltPos = findLastInTableScope("select");
                             if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
                                 assert fragment;
-                                err("Stray end tag \u201Cselect\u201D");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             while (currentPtr >= eltPos) {
                                 pop();
                             }
                             resetTheInsertionMode();
                             break endtagloop;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case AFTER_BODY:
                     switch (group) {
                         case HTML:
                             if (fragment) {
-                                err("Stray end tag \u201Chtml\u201D");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             } else {
                                 mode = AFTER_AFTER_BODY;
                                 break endtagloop;
                             }
                         default:
                             err("Saw an end tag after \u201Cbody\u201D had been closed.");
                             mode = framesetOk ? FRAMESET_OK : IN_BODY;
                             continue;
                     }
                 case IN_FRAMESET:
                     switch (group) {
                         case FRAMESET:
                             if (currentPtr == 0) {
                                 assert fragment;
-                                err("Stray end tag \u201Cframeset\u201D");
+                                errStrayEndTag(name);
                                 break endtagloop;
                             }
                             pop();
                             if ((!fragment) && !isCurrent("frameset")) {
                                 mode = AFTER_FRAMESET;
                             }
                             break endtagloop;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case AFTER_FRAMESET:
                     switch (group) {
                         case HTML:
                             mode = AFTER_AFTER_FRAMESET;
                             break endtagloop;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case INITIAL:
                     /*
                      * Parse error.
                      */
                     // [NOCPP[
                     switch (doctypeExpectation) {
@@ -3743,81 +3835,81 @@ public abstract class TreeBuilder<T> imp
                             appendHtmlElementToDocumentAndPush();
                             /* Switch to the main mode */
                             mode = BEFORE_HEAD;
                             /*
                              * reprocess the current token.
                              */
                             continue;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case BEFORE_HEAD:
                     switch (group) {
                         case HEAD:
                         case BR:
                         case HTML:
                         case BODY:
                             appendToCurrentNodeAndPushHeadElement(HtmlAttributes.EMPTY_ATTRIBUTES);
                             mode = IN_HEAD;
                             continue;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case IN_HEAD:
                     switch (group) {
                         case HEAD:
                             pop();
                             mode = AFTER_HEAD;
                             break endtagloop;
                         case BR:
                         case HTML:
                         case BODY:
                             pop();
                             mode = AFTER_HEAD;
                             continue;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case IN_HEAD_NOSCRIPT:
                     switch (group) {
                         case NOSCRIPT:
                             pop();
                             mode = IN_HEAD;
                             break endtagloop;
                         case BR:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             pop();
                             mode = IN_HEAD;
                             continue;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case AFTER_HEAD:
                     switch (group) {
                         case HTML:
                         case BODY:
                         case BR:
                             appendToCurrentNodeAndPushBodyElement();
                             mode = FRAMESET_OK;
                             continue;
                         default:
-                            err("Stray end tag \u201C" + name + "\u201D.");
+                            errStrayEndTag(name);
                             break endtagloop;
                     }
                 case AFTER_AFTER_BODY:
-                    err("Stray \u201C" + name + "\u201D end tag.");
+                    errStrayEndTag(name);
                     mode = framesetOk ? FRAMESET_OK : IN_BODY;
                     continue;
                 case AFTER_AFTER_FRAMESET:
-                    err("Stray \u201C" + name + "\u201D end tag.");
+                    errStrayEndTag(name);
                     mode = IN_FRAMESET;
                     continue;
                 case TEXT:
                     // XXX need to manage insertion point here
                     pop();
                     if (originalMode == AFTER_HEAD) {
                         silentPop();
                     }
@@ -4024,17 +4116,17 @@ public abstract class TreeBuilder<T> imp
             return true;
         }
         return false;
     }
 
     private void closeTheCell(int eltPos) throws SAXException {
         generateImpliedEndTags();
         if (errorHandler != null && eltPos != currentPtr) {
-            errNoCheck("Unclosed elements.");
+            errUnclosedElementsCell(eltPos);
         }
         while (currentPtr >= eltPos) {
             pop();
         }
         clearTheListOfActiveFormattingElementsUpToTheLastMarker();
         mode = IN_ROW;
         return;
     }
@@ -4127,17 +4219,17 @@ public abstract class TreeBuilder<T> imp
      */
     private void implicitlyCloseP() throws SAXException {
         int eltPos = findLastInButtonScope("p");
         if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
             return;
         }
         generateImpliedEndTagsExceptFor("p");
         if (errorHandler != null && eltPos != currentPtr) {
-            err("Unclosed elements.");
+            errUnclosedElementsImplied(eltPos, "p");
         }
         while (currentPtr >= eltPos) {
             pop();
         }
     }
 
     private boolean clearLastStackSlot() {
         stack[currentPtr] = null;
@@ -4345,17 +4437,21 @@ public abstract class TreeBuilder<T> imp
                     bookmark = nodeListPos + 1;
                 }
                 // if (hasChildren(node.node)) { XXX AAA CHANGE
                 assert node == listOfActiveFormattingElements[nodeListPos];
                 assert node == stack[nodePos];
                 T clone = createElement("http://www.w3.org/1999/xhtml",
                         node.name, node.attributes.cloneAttributes(null));
                 StackNode<T> newNode = new StackNode<T>(node.getFlags(), node.ns,
-                        node.name, clone, node.popName, node.attributes); // creation
+                        node.name, clone, node.popName, node.attributes
+                        // [NOCPP[
+                        , node.getLocator()
+                // ]NOCPP]       
+                ); // creation
                 // ownership
                 // goes
                 // to
                 // stack
                 node.dropAttributes(); // adopt ownership to newNode
                 stack[nodePos] = newNode;
                 newNode.retain(); // retain for list
                 listOfActiveFormattingElements[nodeListPos] = newNode;
@@ -4374,19 +4470,23 @@ public abstract class TreeBuilder<T> imp
             } else {
                 detachFromParent(lastNode.node);
                 appendElement(lastNode.node, commonAncestor.node);
             }
             T clone = createElement("http://www.w3.org/1999/xhtml",
                     formattingElt.name,
                     formattingElt.attributes.cloneAttributes(null));
             StackNode<T> formattingClone = new StackNode<T>(
-                    formattingElt.getFlags(), formattingElt.ns, formattingElt.name,
-                    clone, formattingElt.popName,
-                    formattingElt.attributes); // Ownership
+                    formattingElt.getFlags(), formattingElt.ns,
+                    formattingElt.name, clone, formattingElt.popName,
+                    formattingElt.attributes
+                    // [NOCPP[
+                    , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+            // ]NOCPP]
+            ); // Ownership
             // transfers
             // to
             // stack
             // below
             formattingElt.dropAttributes(); // transfer ownership to
                                             // formattingClone
             appendChildrenToNewParent(furthestBlock.node, clone);
             appendElement(clone, furthestBlock.node);
@@ -4517,17 +4617,21 @@ public abstract class TreeBuilder<T> imp
         addAttributesToElement(stack[0].node, attributes);
     }
 
     private void pushHeadPointerOntoStack() throws SAXException {
         assert headPointer != null;
         assert !fragment;
         assert mode == AFTER_HEAD;
         fatal();
-        silentPush(new StackNode<T>(ElementName.HEAD, headPointer));
+        silentPush(new StackNode<T>(ElementName.HEAD, headPointer
+        // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        ));
     }
 
     /**
      * @throws SAXException
      * 
      */
     private void reconstructTheActiveFormattingElements() throws SAXException {
         if (listPtr == -1) {
@@ -4550,18 +4654,23 @@ public abstract class TreeBuilder<T> imp
                 break;
             }
         }
         while (entryPos < listPtr) {
             entryPos++;
             StackNode<T> entry = listOfActiveFormattingElements[entryPos];
             T clone = createElement("http://www.w3.org/1999/xhtml", entry.name,
                     entry.attributes.cloneAttributes(null));
-            StackNode<T> entryClone = new StackNode<T>(entry.getFlags(), entry.ns,
-                    entry.name, clone, entry.popName, entry.attributes);
+            StackNode<T> entryClone = new StackNode<T>(entry.getFlags(),
+                    entry.ns, entry.name, clone, entry.popName,
+                    entry.attributes
+                    // [NOCPP[
+                    , entry.getLocator()
+            // ]NOCPP]
+            );
             entry.dropAttributes(); // transfer ownership to entryClone
             StackNode<T> currentNode = stack[currentPtr];
             if (currentNode.isFosterParenting()) {
                 insertIntoFosterParent(clone);
             } else {
                 appendElement(clone, currentNode.node);
             }
             push(entryClone);
@@ -4712,17 +4821,21 @@ public abstract class TreeBuilder<T> imp
 
     private void appendHtmlElementToDocumentAndPush(HtmlAttributes attributes)
             throws SAXException {
         // [NOCPP[
         checkAttributes(attributes, "http://www.w3.org/1999/xhtml");
         // ]NOCPP]
         T elt = createHtmlElementSetAsRoot(attributes);
         StackNode<T> node = new StackNode<T>(ElementName.HTML,
-                elt);
+                elt
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendHtmlElementToDocumentAndPush() throws SAXException {
         appendHtmlElementToDocumentAndPush(tokenizer.emptyAttributes());
     }
 
     private void appendToCurrentNodeAndPushHeadElement(HtmlAttributes attributes)
@@ -4730,17 +4843,21 @@ public abstract class TreeBuilder<T> imp
         // [NOCPP[
         checkAttributes(attributes, "http://www.w3.org/1999/xhtml");
         // ]NOCPP]
         T elt = createElement("http://www.w3.org/1999/xhtml", "head",
                 attributes);
         appendElement(elt, stack[currentPtr].node);
         headPointer = elt;
         StackNode<T> node = new StackNode<T>(ElementName.HEAD,
-                elt);
+                elt
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendToCurrentNodeAndPushBodyElement(HtmlAttributes attributes)
             throws SAXException {
         appendToCurrentNodeAndPushElement(ElementName.BODY,
                 attributes);
     }
@@ -4760,17 +4877,21 @@ public abstract class TreeBuilder<T> imp
         StackNode<T> current = stack[currentPtr];
         if (current.isFosterParenting()) {
             fatal();
             insertIntoFosterParent(elt);
         } else {
             appendElement(elt, current.node);
         }
         StackNode<T> node = new StackNode<T>(ElementName.FORM,
-                elt);
+                elt
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendToCurrentNodeAndPushFormattingElementMayFoster(
             ElementName elementName, HtmlAttributes attributes)
             throws SAXException {
         // [NOCPP[
         checkAttributes(attributes, "http://www.w3.org/1999/xhtml");
@@ -4779,32 +4900,40 @@ public abstract class TreeBuilder<T> imp
         T elt = createElement("http://www.w3.org/1999/xhtml", elementName.name, attributes);
         StackNode<T> current = stack[currentPtr];
         if (current.isFosterParenting()) {
             fatal();
             insertIntoFosterParent(elt);
         } else {
             appendElement(elt, current.node);
         }
-        StackNode<T> node = new StackNode<T>(elementName, elt, attributes.cloneAttributes(null));
+        StackNode<T> node = new StackNode<T>(elementName, elt, attributes.cloneAttributes(null)
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
         append(node);
         node.retain(); // append doesn't retain itself
     }
 
     private void appendToCurrentNodeAndPushElement(ElementName elementName,
             HtmlAttributes attributes)
             throws SAXException {
         // [NOCPP[
         checkAttributes(attributes, "http://www.w3.org/1999/xhtml");
         // ]NOCPP]
         // This method can't be called for custom elements
         T elt = createElement("http://www.w3.org/1999/xhtml", elementName.name, attributes);
         appendElement(elt, stack[currentPtr].node);
-        StackNode<T> node = new StackNode<T>(elementName, elt);
+        StackNode<T> node = new StackNode<T>(elementName, elt
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendToCurrentNodeAndPushElementMayFoster(ElementName elementName,
             HtmlAttributes attributes)
             throws SAXException {
         @Local String popName = elementName.name;
         // [NOCPP[
@@ -4816,17 +4945,21 @@ public abstract class TreeBuilder<T> imp
         T elt = createElement("http://www.w3.org/1999/xhtml", popName, attributes);
         StackNode<T> current = stack[currentPtr];
         if (current.isFosterParenting()) {
             fatal();
             insertIntoFosterParent(elt);
         } else {
             appendElement(elt, current.node);
         }
-        StackNode<T> node = new StackNode<T>(elementName, elt, popName);
+        StackNode<T> node = new StackNode<T>(elementName, elt, popName
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendToCurrentNodeAndPushElementMayFosterMathML(
             ElementName elementName, HtmlAttributes attributes)
             throws SAXException {
         @Local String popName = elementName.name;
         // [NOCPP[
@@ -4845,17 +4978,21 @@ public abstract class TreeBuilder<T> imp
             appendElement(elt, current.node);
         }
         boolean markAsHtmlIntegrationPoint = false;
         if (ElementName.ANNOTATION_XML == elementName
                 && annotationXmlEncodingPermitsHtml(attributes)) {
             markAsHtmlIntegrationPoint = true;
         }
         StackNode<T> node = new StackNode<T>(elementName, elt, popName,
-                markAsHtmlIntegrationPoint);
+                markAsHtmlIntegrationPoint
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private boolean annotationXmlEncodingPermitsHtml(HtmlAttributes attributes) {
         String encoding = attributes.getValue(AttributeName.ENCODING);
         if (encoding == null) {
             return false;
         }
@@ -4878,17 +5015,21 @@ public abstract class TreeBuilder<T> imp
         T elt = createElement("http://www.w3.org/2000/svg", popName, attributes);
         StackNode<T> current = stack[currentPtr];
         if (current.isFosterParenting()) {
             fatal();
             insertIntoFosterParent(elt);
         } else {
             appendElement(elt, current.node);
         }
-        StackNode<T> node = new StackNode<T>(elementName, popName, elt);
+        StackNode<T> node = new StackNode<T>(elementName, popName, elt
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendToCurrentNodeAndPushElementMayFoster(ElementName elementName,
             HtmlAttributes attributes, T form)
             throws SAXException {
         // [NOCPP[
         checkAttributes(attributes, "http://www.w3.org/1999/xhtml");
@@ -4898,17 +5039,21 @@ public abstract class TreeBuilder<T> imp
                 : form);
         StackNode<T> current = stack[currentPtr];
         if (current.isFosterParenting()) {
             fatal();
             insertIntoFosterParent(elt);
         } else {
             appendElement(elt, current.node);
         }
-        StackNode<T> node = new StackNode<T>(elementName, elt);
+        StackNode<T> node = new StackNode<T>(elementName, elt
+                // [NOCPP[
+                , errorHandler == null ? null : new TaintableLocatorImpl(tokenizer)
+        // ]NOCPP]
+        );
         push(node);
     }
 
     private void appendVoidElementToCurrentMayFoster(
             @Local String name, HtmlAttributes attributes, T form) throws SAXException {
         // [NOCPP[
         checkAttributes(attributes, "http://www.w3.org/1999/xhtml");
         // ]NOCPP]
@@ -5318,30 +5463,38 @@ public abstract class TreeBuilder<T> imp
     @SuppressWarnings("unchecked") public TreeBuilderState<T> newSnapshot()
             throws SAXException {
         StackNode<T>[] listCopy = new StackNode[listPtr + 1];
         for (int i = 0; i < listCopy.length; i++) {
             StackNode<T> node = listOfActiveFormattingElements[i];
             if (node != null) {
                 StackNode<T> newNode = new StackNode<T>(node.getFlags(), node.ns,
                         node.name, node.node, node.popName,
-                        node.attributes.cloneAttributes(null));
+                        node.attributes.cloneAttributes(null)
+                        // [NOCPP[
+                        , node.getLocator()
+                // ]NOCPP]
+                );
                 listCopy[i] = newNode;
             } else {
                 listCopy[i] = null;
             }
         }
         StackNode<T>[] stackCopy = new StackNode[currentPtr + 1];
         for (int i = 0; i < stackCopy.length; i++) {
             StackNode<T> node = stack[i];
             int listIndex = findInListOfActiveFormattingElements(node);
             if (listIndex == -1) {
                 StackNode<T> newNode = new StackNode<T>(node.getFlags(), node.ns,
                         node.name, node.node, node.popName,
-                        null);
+                        null
+                        // [NOCPP[
+                        , node.getLocator()
+                // ]NOCPP]
+                );
                 stackCopy[i] = newNode;
             } else {
                 stackCopy[i] = listCopy[listIndex];
                 stackCopy[i].retain();
             }
         }
         return new StateSnapshot<T>(stackCopy, listCopy, formPointer, headPointer, deepTreeSurrogateParent, mode, originalMode, framesetOk, needToDropLF, quirks);
     }
@@ -5412,30 +5565,38 @@ public abstract class TreeBuilder<T> imp
         currentPtr = stackLen - 1;
 
         for (int i = 0; i < listLen; i++) {
             StackNode<T> node = listCopy[i];
             if (node != null) {
                 StackNode<T> newNode = new StackNode<T>(node.getFlags(), node.ns,
                         Portability.newLocalFromLocal(node.name, interner), node.node,
                         Portability.newLocalFromLocal(node.popName, interner),
-                        node.attributes.cloneAttributes(null));
+                        node.attributes.cloneAttributes(null)
+                        // [NOCPP[
+                        , node.getLocator()
+                // ]NOCPP]
+                );
                 listOfActiveFormattingElements[i] = newNode;
             } else {
                 listOfActiveFormattingElements[i] = null;
             }
         }
         for (int i = 0; i < stackLen; i++) {
             StackNode<T> node = stackCopy[i];
             int listIndex = findInArray(node, listCopy);
             if (listIndex == -1) {
                 StackNode<T> newNode = new StackNode<T>(node.getFlags(), node.ns,
                         Portability.newLocalFromLocal(node.name, interner), node.node,
                         Portability.newLocalFromLocal(node.popName, interner),
-                        null);
+                        null
+                        // [NOCPP[
+                        , node.getLocator()
+                // ]NOCPP]       
+                );
                 stack[i] = newNode;
             } else {
                 stack[i] = listOfActiveFormattingElements[listIndex];
                 stack[i].retain();
             }
         }
         formPointer = snapshot.getFormPointer();
         headPointer = snapshot.getHeadPointer();
--- a/parser/html/nsHtml5AttributeName.cpp
+++ b/parser/html/nsHtml5AttributeName.cpp
@@ -1,10 +1,10 @@
 /*
- * Copyright (c) 2008-2009 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
--- a/parser/html/nsHtml5AttributeName.h
+++ b/parser/html/nsHtml5AttributeName.h
@@ -1,10 +1,10 @@
 /*
- * Copyright (c) 2008-2009 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
--- a/parser/html/nsHtml5ElementName.cpp
+++ b/parser/html/nsHtml5ElementName.cpp
@@ -1,10 +1,10 @@
 /*
- * Copyright (c) 2008-2010 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -530,53 +530,53 @@ staticJArray<PRInt32,PRInt32> nsHtml5Ele
 void
 nsHtml5ElementName::initializeStatics()
 {
   ELT_NULL_ELEMENT_NAME = new nsHtml5ElementName(nsnull);
   ELT_A = new nsHtml5ElementName(nsHtml5Atoms::a, nsHtml5Atoms::a, NS_HTML5TREE_BUILDER_A);
   ELT_B = new nsHtml5ElementName(nsHtml5Atoms::b, nsHtml5Atoms::b, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_G = new nsHtml5ElementName(nsHtml5Atoms::g, nsHtml5Atoms::g, NS_HTML5TREE_BUILDER_OTHER);
   ELT_I = new nsHtml5ElementName(nsHtml5Atoms::i, nsHtml5Atoms::i, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
-  ELT_P = new nsHtml5ElementName(nsHtml5Atoms::p, nsHtml5Atoms::p, NS_HTML5TREE_BUILDER_P | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_P = new nsHtml5ElementName(nsHtml5Atoms::p, nsHtml5Atoms::p, NS_HTML5TREE_BUILDER_P | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_Q = new nsHtml5ElementName(nsHtml5Atoms::q, nsHtml5Atoms::q, NS_HTML5TREE_BUILDER_OTHER);
   ELT_S = new nsHtml5ElementName(nsHtml5Atoms::s, nsHtml5Atoms::s, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_U = new nsHtml5ElementName(nsHtml5Atoms::u, nsHtml5Atoms::u, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_BR = new nsHtml5ElementName(nsHtml5Atoms::br, nsHtml5Atoms::br, NS_HTML5TREE_BUILDER_BR | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_CI = new nsHtml5ElementName(nsHtml5Atoms::ci, nsHtml5Atoms::ci, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CN = new nsHtml5ElementName(nsHtml5Atoms::cn, nsHtml5Atoms::cn, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_DD = new nsHtml5ElementName(nsHtml5Atoms::dd, nsHtml5Atoms::dd, NS_HTML5TREE_BUILDER_DD_OR_DT | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_DD = new nsHtml5ElementName(nsHtml5Atoms::dd, nsHtml5Atoms::dd, NS_HTML5TREE_BUILDER_DD_OR_DT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_DL = new nsHtml5ElementName(nsHtml5Atoms::dl, nsHtml5Atoms::dl, NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL | NS_HTML5ELEMENT_NAME_SPECIAL);
-  ELT_DT = new nsHtml5ElementName(nsHtml5Atoms::dt, nsHtml5Atoms::dt, NS_HTML5TREE_BUILDER_DD_OR_DT | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_DT = new nsHtml5ElementName(nsHtml5Atoms::dt, nsHtml5Atoms::dt, NS_HTML5TREE_BUILDER_DD_OR_DT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_EM = new nsHtml5ElementName(nsHtml5Atoms::em, nsHtml5Atoms::em, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_EQ = new nsHtml5ElementName(nsHtml5Atoms::eq, nsHtml5Atoms::eq, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FN = new nsHtml5ElementName(nsHtml5Atoms::fn, nsHtml5Atoms::fn, NS_HTML5TREE_BUILDER_OTHER);
   ELT_H1 = new nsHtml5ElementName(nsHtml5Atoms::h1, nsHtml5Atoms::h1, NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_H2 = new nsHtml5ElementName(nsHtml5Atoms::h2, nsHtml5Atoms::h2, NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_H3 = new nsHtml5ElementName(nsHtml5Atoms::h3, nsHtml5Atoms::h3, NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_H4 = new nsHtml5ElementName(nsHtml5Atoms::h4, nsHtml5Atoms::h4, NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_H5 = new nsHtml5ElementName(nsHtml5Atoms::h5, nsHtml5Atoms::h5, NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_H6 = new nsHtml5ElementName(nsHtml5Atoms::h6, nsHtml5Atoms::h6, NS_HTML5TREE_BUILDER_H1_OR_H2_OR_H3_OR_H4_OR_H5_OR_H6 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_GT = new nsHtml5ElementName(nsHtml5Atoms::gt, nsHtml5Atoms::gt, NS_HTML5TREE_BUILDER_OTHER);
   ELT_HR = new nsHtml5ElementName(nsHtml5Atoms::hr, nsHtml5Atoms::hr, NS_HTML5TREE_BUILDER_HR | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_IN = new nsHtml5ElementName(nsHtml5Atoms::in, nsHtml5Atoms::in, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_LI = new nsHtml5ElementName(nsHtml5Atoms::li, nsHtml5Atoms::li, NS_HTML5TREE_BUILDER_LI | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_LI = new nsHtml5ElementName(nsHtml5Atoms::li, nsHtml5Atoms::li, NS_HTML5TREE_BUILDER_LI | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_LN = new nsHtml5ElementName(nsHtml5Atoms::ln, nsHtml5Atoms::ln, NS_HTML5TREE_BUILDER_OTHER);
   ELT_LT = new nsHtml5ElementName(nsHtml5Atoms::lt, nsHtml5Atoms::lt, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MI = new nsHtml5ElementName(nsHtml5Atoms::mi, nsHtml5Atoms::mi, NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT | NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
   ELT_MN = new nsHtml5ElementName(nsHtml5Atoms::mn, nsHtml5Atoms::mn, NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT | NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
   ELT_MO = new nsHtml5ElementName(nsHtml5Atoms::mo, nsHtml5Atoms::mo, NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT | NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
   ELT_MS = new nsHtml5ElementName(nsHtml5Atoms::ms, nsHtml5Atoms::ms, NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT | NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
   ELT_OL = new nsHtml5ElementName(nsHtml5Atoms::ol, nsHtml5Atoms::ol, NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_OR = new nsHtml5ElementName(nsHtml5Atoms::or_, nsHtml5Atoms::or_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PI = new nsHtml5ElementName(nsHtml5Atoms::pi, nsHtml5Atoms::pi, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_RP = new nsHtml5ElementName(nsHtml5Atoms::rp, nsHtml5Atoms::rp, NS_HTML5TREE_BUILDER_RT_OR_RP);
-  ELT_RT = new nsHtml5ElementName(nsHtml5Atoms::rt, nsHtml5Atoms::rt, NS_HTML5TREE_BUILDER_RT_OR_RP);
-  ELT_TD = new nsHtml5ElementName(nsHtml5Atoms::td, nsHtml5Atoms::td, NS_HTML5TREE_BUILDER_TD_OR_TH | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING);
-  ELT_TH = new nsHtml5ElementName(nsHtml5Atoms::th, nsHtml5Atoms::th, NS_HTML5TREE_BUILDER_TD_OR_TH | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING);
-  ELT_TR = new nsHtml5ElementName(nsHtml5Atoms::tr, nsHtml5Atoms::tr, NS_HTML5TREE_BUILDER_TR | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING);
+  ELT_RP = new nsHtml5ElementName(nsHtml5Atoms::rp, nsHtml5Atoms::rp, NS_HTML5TREE_BUILDER_RT_OR_RP | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
+  ELT_RT = new nsHtml5ElementName(nsHtml5Atoms::rt, nsHtml5Atoms::rt, NS_HTML5TREE_BUILDER_RT_OR_RP | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
+  ELT_TD = new nsHtml5ElementName(nsHtml5Atoms::td, nsHtml5Atoms::td, NS_HTML5TREE_BUILDER_TD_OR_TH | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
+  ELT_TH = new nsHtml5ElementName(nsHtml5Atoms::th, nsHtml5Atoms::th, NS_HTML5TREE_BUILDER_TD_OR_TH | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
+  ELT_TR = new nsHtml5ElementName(nsHtml5Atoms::tr, nsHtml5Atoms::tr, NS_HTML5TREE_BUILDER_TR | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_TT = new nsHtml5ElementName(nsHtml5Atoms::tt, nsHtml5Atoms::tt, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_UL = new nsHtml5ElementName(nsHtml5Atoms::ul, nsHtml5Atoms::ul, NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_AND = new nsHtml5ElementName(nsHtml5Atoms::and_, nsHtml5Atoms::and_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARG = new nsHtml5ElementName(nsHtml5Atoms::arg, nsHtml5Atoms::arg, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ABS = new nsHtml5ElementName(nsHtml5Atoms::abs, nsHtml5Atoms::abs, NS_HTML5TREE_BUILDER_OTHER);
   ELT_BIG = new nsHtml5ElementName(nsHtml5Atoms::big, nsHtml5Atoms::big, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_BDO = new nsHtml5ElementName(nsHtml5Atoms::bdo, nsHtml5Atoms::bdo, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CSC = new nsHtml5ElementName(nsHtml5Atoms::csc, nsHtml5Atoms::csc, NS_HTML5TREE_BUILDER_OTHER);
@@ -620,32 +620,32 @@ nsHtml5ElementName::initializeStatics()
   ELT_VAR = new nsHtml5ElementName(nsHtml5Atoms::var, nsHtml5Atoms::var, NS_HTML5TREE_BUILDER_RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
   ELT_WBR = new nsHtml5ElementName(nsHtml5Atoms::wbr, nsHtml5Atoms::wbr, NS_HTML5TREE_BUILDER_AREA_OR_WBR | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_XMP = new nsHtml5ElementName(nsHtml5Atoms::xmp, nsHtml5Atoms::xmp, NS_HTML5TREE_BUILDER_XMP);
   ELT_XOR = new nsHtml5ElementName(nsHtml5Atoms::xor_, nsHtml5Atoms::xor_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_AREA = new nsHtml5ElementName(nsHtml5Atoms::area, nsHtml5Atoms::area, NS_HTML5TREE_BUILDER_AREA_OR_WBR | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_ABBR = new nsHtml5ElementName(nsHtml5Atoms::abbr, nsHtml5Atoms::abbr, NS_HTML5TREE_BUILDER_OTHER);
   ELT_BASE = new nsHtml5ElementName(nsHtml5Atoms::base, nsHtml5Atoms::base, NS_HTML5TREE_BUILDER_BASE | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_BVAR = new nsHtml5ElementName(nsHtml5Atoms::bvar, nsHtml5Atoms::bvar, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_BODY = new nsHtml5ElementName(nsHtml5Atoms::body, nsHtml5Atoms::body, NS_HTML5TREE_BUILDER_BODY | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_BODY = new nsHtml5ElementName(nsHtml5Atoms::body, nsHtml5Atoms::body, NS_HTML5TREE_BUILDER_BODY | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_CARD = new nsHtml5ElementName(nsHtml5Atoms::card, nsHtml5Atoms::card, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CODE = new nsHtml5ElementName(nsHtml5Atoms::code, nsHtml5Atoms::code, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_CITE = new nsHtml5ElementName(nsHtml5Atoms::cite, nsHtml5Atoms::cite, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CSCH = new nsHtml5ElementName(nsHtml5Atoms::csch, nsHtml5Atoms::csch, NS_HTML5TREE_BUILDER_OTHER);
   ELT_COSH = new nsHtml5ElementName(nsHtml5Atoms::cosh, nsHtml5Atoms::cosh, NS_HTML5TREE_BUILDER_OTHER);
   ELT_COTH = new nsHtml5ElementName(nsHtml5Atoms::coth, nsHtml5Atoms::coth, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CURL = new nsHtml5ElementName(nsHtml5Atoms::curl, nsHtml5Atoms::curl, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DESC = new nsHtml5ElementName(nsHtml5Atoms::desc, nsHtml5Atoms::desc, NS_HTML5TREE_BUILDER_FOREIGNOBJECT_OR_DESC | NS_HTML5ELEMENT_NAME_SCOPING_AS_SVG);
   ELT_DIFF = new nsHtml5ElementName(nsHtml5Atoms::diff, nsHtml5Atoms::diff, NS_HTML5TREE_BUILDER_OTHER);
   ELT_DEFS = new nsHtml5ElementName(nsHtml5Atoms::defs, nsHtml5Atoms::defs, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FORM = new nsHtml5ElementName(nsHtml5Atoms::form, nsHtml5Atoms::form, NS_HTML5TREE_BUILDER_FORM | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_FONT = new nsHtml5ElementName(nsHtml5Atoms::font, nsHtml5Atoms::font, NS_HTML5TREE_BUILDER_FONT);
   ELT_GRAD = new nsHtml5ElementName(nsHtml5Atoms::grad, nsHtml5Atoms::grad, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_HEAD = new nsHtml5ElementName(nsHtml5Atoms::head, nsHtml5Atoms::head, NS_HTML5TREE_BUILDER_HEAD | NS_HTML5ELEMENT_NAME_SPECIAL);
-  ELT_HTML = new nsHtml5ElementName(nsHtml5Atoms::html, nsHtml5Atoms::html, NS_HTML5TREE_BUILDER_HTML | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING);
+  ELT_HEAD = new nsHtml5ElementName(nsHtml5Atoms::head, nsHtml5Atoms::head, NS_HTML5TREE_BUILDER_HEAD | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
+  ELT_HTML = new nsHtml5ElementName(nsHtml5Atoms::html, nsHtml5Atoms::html, NS_HTML5TREE_BUILDER_HTML | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_LINE = new nsHtml5ElementName(nsHtml5Atoms::line, nsHtml5Atoms::line, NS_HTML5TREE_BUILDER_OTHER);
   ELT_LINK = new nsHtml5ElementName(nsHtml5Atoms::link, nsHtml5Atoms::link, NS_HTML5TREE_BUILDER_LINK_OR_BASEFONT_OR_BGSOUND | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_LIST = new nsHtml5ElementName(nsHtml5Atoms::list, nsHtml5Atoms::list, NS_HTML5TREE_BUILDER_OTHER);
   ELT_META = new nsHtml5ElementName(nsHtml5Atoms::meta, nsHtml5Atoms::meta, NS_HTML5TREE_BUILDER_META | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_MSUB = new nsHtml5ElementName(nsHtml5Atoms::msub, nsHtml5Atoms::msub, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MODE = new nsHtml5ElementName(nsHtml5Atoms::mode, nsHtml5Atoms::mode, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MATH = new nsHtml5ElementName(nsHtml5Atoms::math, nsHtml5Atoms::math, NS_HTML5TREE_BUILDER_MATH);
   ELT_MARK = new nsHtml5ElementName(nsHtml5Atoms::mark, nsHtml5Atoms::mark, NS_HTML5TREE_BUILDER_OTHER);
@@ -701,24 +701,24 @@ nsHtml5ElementName::initializeStatics()
   ELT_MTEXT = new nsHtml5ElementName(nsHtml5Atoms::mtext, nsHtml5Atoms::mtext, NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT | NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
   ELT_NOTIN = new nsHtml5ElementName(nsHtml5Atoms::notin, nsHtml5Atoms::notin, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PIECE = new nsHtml5ElementName(nsHtml5Atoms::piece, nsHtml5Atoms::piece, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PARAM = new nsHtml5ElementName(nsHtml5Atoms::param, nsHtml5Atoms::param, NS_HTML5TREE_BUILDER_PARAM_OR_SOURCE_OR_TRACK | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_POWER = new nsHtml5ElementName(nsHtml5Atoms::power, nsHtml5Atoms::power, NS_HTML5TREE_BUILDER_OTHER);
   ELT_REALS = new nsHtml5ElementName(nsHtml5Atoms::reals, nsHtml5Atoms::reals, NS_HTML5TREE_BUILDER_OTHER);
   ELT_STYLE = new nsHtml5ElementName(nsHtml5Atoms::style, nsHtml5Atoms::style, NS_HTML5TREE_BUILDER_STYLE | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_SMALL = new nsHtml5ElementName(nsHtml5Atoms::small_, nsHtml5Atoms::small_, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
-  ELT_THEAD = new nsHtml5ElementName(nsHtml5Atoms::thead, nsHtml5Atoms::thead, NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING);
+  ELT_THEAD = new nsHtml5ElementName(nsHtml5Atoms::thead, nsHtml5Atoms::thead, NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_TABLE = new nsHtml5ElementName(nsHtml5Atoms::table, nsHtml5Atoms::table, NS_HTML5TREE_BUILDER_TABLE | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_SCOPING);
   ELT_TITLE = new nsHtml5ElementName(nsHtml5Atoms::title, nsHtml5Atoms::title, NS_HTML5TREE_BUILDER_TITLE | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING_AS_SVG);
   ELT_TRACK = new nsHtml5ElementName(nsHtml5Atoms::track, nsHtml5Atoms::track, NS_HTML5TREE_BUILDER_PARAM_OR_SOURCE_OR_TRACK);
   ELT_TSPAN = new nsHtml5ElementName(nsHtml5Atoms::tspan, nsHtml5Atoms::tspan, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TIMES = new nsHtml5ElementName(nsHtml5Atoms::times, nsHtml5Atoms::times, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_TFOOT = new nsHtml5ElementName(nsHtml5Atoms::tfoot, nsHtml5Atoms::tfoot, NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING);
-  ELT_TBODY = new nsHtml5ElementName(nsHtml5Atoms::tbody, nsHtml5Atoms::tbody, NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING);
+  ELT_TFOOT = new nsHtml5ElementName(nsHtml5Atoms::tfoot, nsHtml5Atoms::tfoot, NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
+  ELT_TBODY = new nsHtml5ElementName(nsHtml5Atoms::tbody, nsHtml5Atoms::tbody, NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_UNION = new nsHtml5ElementName(nsHtml5Atoms::union_, nsHtml5Atoms::union_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_VKERN = new nsHtml5ElementName(nsHtml5Atoms::vkern, nsHtml5Atoms::vkern, NS_HTML5TREE_BUILDER_OTHER);
   ELT_VIDEO = new nsHtml5ElementName(nsHtml5Atoms::video, nsHtml5Atoms::video, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCSEC = new nsHtml5ElementName(nsHtml5Atoms::arcsec, nsHtml5Atoms::arcsec, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCCSC = new nsHtml5ElementName(nsHtml5Atoms::arccsc, nsHtml5Atoms::arccsc, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCTAN = new nsHtml5ElementName(nsHtml5Atoms::arctan, nsHtml5Atoms::arctan, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCSIN = new nsHtml5ElementName(nsHtml5Atoms::arcsin, nsHtml5Atoms::arcsin, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ARCCOS = new nsHtml5ElementName(nsHtml5Atoms::arccos, nsHtml5Atoms::arccos, NS_HTML5TREE_BUILDER_OTHER);
@@ -750,17 +750,17 @@ nsHtml5ElementName::initializeStatics()
   ELT_MSTYLE = new nsHtml5ElementName(nsHtml5Atoms::mstyle, nsHtml5Atoms::mstyle, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MGLYPH = new nsHtml5ElementName(nsHtml5Atoms::mglyph, nsHtml5Atoms::mglyph, NS_HTML5TREE_BUILDER_MGLYPH_OR_MALIGNMARK);
   ELT_MEDIAN = new nsHtml5ElementName(nsHtml5Atoms::median, nsHtml5Atoms::median, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MUNDER = new nsHtml5ElementName(nsHtml5Atoms::munder, nsHtml5Atoms::munder, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MARKER = new nsHtml5ElementName(nsHtml5Atoms::marker, nsHtml5Atoms::marker, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MERROR = new nsHtml5ElementName(nsHtml5Atoms::merror, nsHtml5Atoms::merror, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MOMENT = new nsHtml5ElementName(nsHtml5Atoms::moment, nsHtml5Atoms::moment, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MATRIX = new nsHtml5ElementName(nsHtml5Atoms::matrix, nsHtml5Atoms::matrix, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_OPTION = new nsHtml5ElementName(nsHtml5Atoms::option, nsHtml5Atoms::option, NS_HTML5TREE_BUILDER_OPTION);
+  ELT_OPTION = new nsHtml5ElementName(nsHtml5Atoms::option, nsHtml5Atoms::option, NS_HTML5TREE_BUILDER_OPTION | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_OBJECT = new nsHtml5ElementName(nsHtml5Atoms::object, nsHtml5Atoms::object, NS_HTML5TREE_BUILDER_OBJECT | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_SCOPING);
   ELT_OUTPUT = new nsHtml5ElementName(nsHtml5Atoms::output, nsHtml5Atoms::output, NS_HTML5TREE_BUILDER_OUTPUT_OR_LABEL);
   ELT_PRIMES = new nsHtml5ElementName(nsHtml5Atoms::primes, nsHtml5Atoms::primes, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SOURCE = new nsHtml5ElementName(nsHtml5Atoms::source, nsHtml5Atoms::source, NS_HTML5TREE_BUILDER_PARAM_OR_SOURCE_OR_TRACK);
   ELT_STRIKE = new nsHtml5ElementName(nsHtml5Atoms::strike, nsHtml5Atoms::strike, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_STRONG = new nsHtml5ElementName(nsHtml5Atoms::strong, nsHtml5Atoms::strong, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
   ELT_SWITCH = new nsHtml5ElementName(nsHtml5Atoms::switch_, nsHtml5Atoms::switch_, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SYMBOL = new nsHtml5ElementName(nsHtml5Atoms::symbol, nsHtml5Atoms::symbol, NS_HTML5TREE_BUILDER_OTHER);
@@ -816,34 +816,34 @@ nsHtml5ElementName::initializeStatics()
   ELT_SECTION = new nsHtml5ElementName(nsHtml5Atoms::section, nsHtml5Atoms::section, NS_HTML5TREE_BUILDER_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 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_SUMMARY = new nsHtml5ElementName(nsHtml5Atoms::summary, nsHtml5Atoms::summary, NS_HTML5TREE_BUILDER_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 | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_TENDSTO = new nsHtml5ElementName(nsHtml5Atoms::tendsto, nsHtml5Atoms::tendsto, NS_HTML5TREE_BUILDER_OTHER);
   ELT_UPLIMIT = new nsHtml5ElementName(nsHtml5Atoms::uplimit, nsHtml5Atoms::uplimit, NS_HTML5TREE_BUILDER_OTHER);
   ELT_ALTGLYPH = new nsHtml5ElementName(nsHtml5Atoms::altglyph, nsHtml5Atoms::altGlyph, NS_HTML5TREE_BUILDER_OTHER);
   ELT_BASEFONT = new nsHtml5ElementName(nsHtml5Atoms::basefont, nsHtml5Atoms::basefont, NS_HTML5TREE_BUILDER_LINK_OR_BASEFONT_OR_BGSOUND | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_CLIPPATH = new nsHtml5ElementName(nsHtml5Atoms::clippath, nsHtml5Atoms::clipPath, NS_HTML5TREE_BUILDER_OTHER);
   ELT_CODOMAIN = new nsHtml5ElementName(nsHtml5Atoms::codomain, nsHtml5Atoms::codomain, NS_HTML5TREE_BUILDER_OTHER);
-  ELT_COLGROUP = new nsHtml5ElementName(nsHtml5Atoms::colgroup, nsHtml5Atoms::colgroup, NS_HTML5TREE_BUILDER_COLGROUP | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_COLGROUP = new nsHtml5ElementName(nsHtml5Atoms::colgroup, nsHtml5Atoms::colgroup, NS_HTML5TREE_BUILDER_COLGROUP | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_EMPTYSET = new nsHtml5ElementName(nsHtml5Atoms::emptyset, nsHtml5Atoms::emptyset, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FACTOROF = new nsHtml5ElementName(nsHtml5Atoms::factorof, nsHtml5Atoms::factorof, NS_HTML5TREE_BUILDER_OTHER);
   ELT_FIELDSET = new nsHtml5ElementName(nsHtml5Atoms::fieldset, nsHtml5Atoms::fieldset, NS_HTML5TREE_BUILDER_FIELDSET | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_FRAMESET = new nsHtml5ElementName(nsHtml5Atoms::frameset, nsHtml5Atoms::frameset, NS_HTML5TREE_BUILDER_FRAMESET | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_FEOFFSET = new nsHtml5ElementName(nsHtml5Atoms::feoffset, nsHtml5Atoms::feOffset, NS_HTML5TREE_BUILDER_OTHER);
   ELT_GLYPHREF = new nsHtml5ElementName(nsHtml5Atoms::glyphref, nsHtml5Atoms::glyphRef, NS_HTML5TREE_BUILDER_OTHER);
   ELT_INTERVAL = new nsHtml5ElementName(nsHtml5Atoms::interval, nsHtml5Atoms::interval, NS_HTML5TREE_BUILDER_OTHER);
   ELT_INTEGERS = new nsHtml5ElementName(nsHtml5Atoms::integers, nsHtml5Atoms::integers, NS_HTML5TREE_BUILDER_OTHER);
   ELT_INFINITY = new nsHtml5ElementName(nsHtml5Atoms::infinity, nsHtml5Atoms::infinity, NS_HTML5TREE_BUILDER_OTHER);
   ELT_LISTENER = new nsHtml5ElementName(nsHtml5Atoms::listener, nsHtml5Atoms::listener, NS_HTML5TREE_BUILDER_OTHER);
   ELT_LOWLIMIT = new nsHtml5ElementName(nsHtml5Atoms::lowlimit, nsHtml5Atoms::lowlimit, NS_HTML5TREE_BUILDER_OTHER);
   ELT_METADATA = new nsHtml5ElementName(nsHtml5Atoms::metadata, nsHtml5Atoms::metadata, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MENCLOSE = new nsHtml5ElementName(nsHtml5Atoms::menclose, nsHtml5Atoms::menclose, NS_HTML5TREE_BUILDER_OTHER);
   ELT_MPHANTOM = new nsHtml5ElementName(nsHtml5Atoms::mphantom, nsHtml5Atoms::mphantom, NS_HTML5TREE_BUILDER_OTHER);
   ELT_NOFRAMES = new nsHtml5ElementName(nsHtml5Atoms::noframes, nsHtml5Atoms::noframes, NS_HTML5TREE_BUILDER_NOFRAMES | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_NOSCRIPT = new nsHtml5ElementName(nsHtml5Atoms::noscript, nsHtml5Atoms::noscript, NS_HTML5TREE_BUILDER_NOSCRIPT | NS_HTML5ELEMENT_NAME_SPECIAL);
-  ELT_OPTGROUP = new nsHtml5ElementName(nsHtml5Atoms::optgroup, nsHtml5Atoms::optgroup, NS_HTML5TREE_BUILDER_OPTGROUP | NS_HTML5ELEMENT_NAME_SPECIAL);
+  ELT_OPTGROUP = new nsHtml5ElementName(nsHtml5Atoms::optgroup, nsHtml5Atoms::optgroup, NS_HTML5TREE_BUILDER_OPTGROUP | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   ELT_POLYLINE = new nsHtml5ElementName(nsHtml5Atoms::polyline, nsHtml5Atoms::polyline, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PREFETCH = new nsHtml5ElementName(nsHtml5Atoms::prefetch, nsHtml5Atoms::prefetch, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PROGRESS = new nsHtml5ElementName(nsHtml5Atoms::progress, nsHtml5Atoms::progress, NS_HTML5TREE_BUILDER_OTHER);
   ELT_PRSUBSET = new nsHtml5ElementName(nsHtml5Atoms::prsubset, nsHtml5Atoms::prsubset, NS_HTML5TREE_BUILDER_OTHER);
   ELT_QUOTIENT = new nsHtml5ElementName(nsHtml5Atoms::quotient, nsHtml5Atoms::quotient, NS_HTML5TREE_BUILDER_OTHER);
   ELT_SELECTOR = new nsHtml5ElementName(nsHtml5Atoms::selector, nsHtml5Atoms::selector, NS_HTML5TREE_BUILDER_OTHER);
   ELT_TEXTAREA = new nsHtml5ElementName(nsHtml5Atoms::textarea, nsHtml5Atoms::textarea, NS_HTML5TREE_BUILDER_TEXTAREA | NS_HTML5ELEMENT_NAME_SPECIAL);
   ELT_TEXTPATH = new nsHtml5ElementName(nsHtml5Atoms::textpath, nsHtml5Atoms::textPath, NS_HTML5TREE_BUILDER_OTHER);
--- a/parser/html/nsHtml5ElementName.h
+++ b/parser/html/nsHtml5ElementName.h
@@ -1,10 +1,10 @@
 /*
- * Copyright (c) 2008-2010 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -484,12 +484,13 @@ class nsHtml5ElementName
 #define NS_HTML5ELEMENT_NAME_GROUP_MASK 127
 #define NS_HTML5ELEMENT_NAME_CUSTOM (1 << 30)
 #define NS_HTML5ELEMENT_NAME_SPECIAL (1 << 29)
 #define NS_HTML5ELEMENT_NAME_FOSTER_PARENTING (1 << 28)
 #define NS_HTML5ELEMENT_NAME_SCOPING (1 << 27)
 #define NS_HTML5ELEMENT_NAME_SCOPING_AS_SVG (1 << 26)
 #define NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML (1 << 25)
 #define NS_HTML5ELEMENT_NAME_HTML_INTEGRATION_POINT (1 << 24)
+#define NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG (1 << 23)
 
 
 #endif
 
--- a/parser/html/nsHtml5HtmlAttributes.cpp
+++ b/parser/html/nsHtml5HtmlAttributes.cpp
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2008-2009 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
--- a/parser/html/nsHtml5HtmlAttributes.h
+++ b/parser/html/nsHtml5HtmlAttributes.h
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2008-2009 Mozilla Foundation
+ * Copyright (c) 2008-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
--- a/parser/html/nsHtml5StackNode.cpp
+++ b/parser/html/nsHtml5StackNode.cpp
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2009 Mozilla Foundation
+ * Copyright (c) 2007-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
@@ -167,27 +167,27 @@ nsHtml5StackNode::nsHtml5StackNode(nsHtm
     refcount(1)
 {
   MOZ_COUNT_CTOR(nsHtml5StackNode);
 }
 
 PRInt32 
 nsHtml5StackNode::prepareSvgFlags(PRInt32 flags)
 {
-  flags &= ~(NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_SPECIAL);
+  flags &= ~(NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   if ((flags & NS_HTML5ELEMENT_NAME_SCOPING_AS_SVG)) {
     flags |= (NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_HTML_INTEGRATION_POINT);
   }
   return flags;
 }
 
 PRInt32 
 nsHtml5StackNode::prepareMathFlags(PRInt32 flags, PRBool markAsIntegrationPoint)
 {
-  flags &= ~(NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_SPECIAL);
+  flags &= ~(NS_HTML5ELEMENT_NAME_FOSTER_PARENTING | NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
   if ((flags & NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML)) {
     flags |= (NS_HTML5ELEMENT_NAME_SCOPING | NS_HTML5ELEMENT_NAME_SPECIAL);
   }
   if (markAsIntegrationPoint) {
     flags |= NS_HTML5ELEMENT_NAME_HTML_INTEGRATION_POINT;
   }
   return flags;
 }
--- a/parser/html/nsHtml5StackNode.h
+++ b/parser/html/nsHtml5StackNode.h
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2009 Mozilla Foundation
+ * Copyright (c) 2007-2011 Mozilla Foundation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
  * Software is furnished to do so, subject to the following conditions:
  *
--- a/parser/html/nsHtml5TreeBuilder.cpp
+++ b/parser/html/nsHtml5TreeBuilder.cpp
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2010 Mozilla Foundation
+ * Copyright (c) 2007-2011 Mozilla Foundation
  * Portions of comments Copyright 2004-2008 Apple Computer, Inc., Mozilla 
  * Foundation, and Opera Software ASA.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the 
--- a/parser/html/nsHtml5TreeBuilder.h
+++ b/parser/html/nsHtml5TreeBuilder.h
@@ -1,11 +1,11 @@
 /*
  * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2010 Mozilla Foundation
+ * Copyright (c) 2007-2011 Mozilla Foundation
  * Portions of comments Copyright 2004-2008 Apple Computer, Inc., Mozilla 
  * Foundation, and Opera Software ASA.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a 
  * copy of this software and associated documentation files (the "Software"), 
  * to deal in the Software without restriction, including without limitation 
  * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
  * and/or sell copies of the Software, and to permit persons to whom the