xmlns
- * prefix in the SVG and MathML modes.
- */
- private static final @NoLength @Prefix String[] XMLNS_PREFIX = { null,
- "xmlns", "xmlns",
- // [NOCPP[
- null
- // ]NOCPP]
- };
-
- /**
- * An array for no prefixe in the HTML mode and the xlink
- * prefix in the SVG and MathML modes.
- */
- private static final @NoLength @Prefix String[] XLINK_PREFIX = { null,
- "xlink", "xlink",
- // [NOCPP[
- null
- // ]NOCPP]
- };
-
- /**
- * An array for no prefixe in the HTML mode and the xml prefix
- * in the SVG and MathML modes.
- */
- private static final @NoLength @Prefix String[] XML_PREFIX = { null, "xml",
- "xml",
- // [NOCPP[
- null
- // ]NOCPP]
- };
-
- // [NOCPP[
-
- private static final @NoLength @Prefix String[] LANG_PREFIX = { null, null,
- null, "xml" };
-
- 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();
- }
- }
- return arr;
- }
-
- // ]NOCPP]
-
- /**
- * An initialization helper for having a one name in the SVG mode and
- * another name in the other modes.
- *
- * @param name
- * the name for the non-SVG modes
- * @param camel
- * the name for the SVG mode
- * @return the initialized name array
- */
- private static @NoLength @Local String[] SVG_DIFFERENT(@Local String name,
- @Local String camel) {
- @NoLength @Local String[] arr = new String[4];
- arr[0] = name;
- arr[1] = name;
- arr[2] = camel;
- // [NOCPP[
- arr[3] = name;
- // ]NOCPP]
- return arr;
- }
-
- /**
- * An initialization helper for having a one name in the MathML mode and
- * another name in the other modes.
- *
- * @param name
- * the name for the non-MathML modes
- * @param camel
- * the name for the MathML mode
- * @return the initialized name array
- */
- private static @NoLength @Local String[] MATH_DIFFERENT(@Local String name,
- @Local String camel) {
- @NoLength @Local String[] arr = new String[4];
- arr[0] = name;
- arr[1] = camel;
- arr[2] = name;
- // [NOCPP[
- arr[3] = name;
- // ]NOCPP]
- return arr;
- }
-
- /**
- * An initialization helper for having a different local name in the HTML
- * mode and the SVG and MathML modes.
- *
- * @param name
- * the name for the HTML mode
- * @param suffix
- * the name for the SVG and MathML modes
- * @return the initialized name array
- */
- private static @NoLength @Local String[] COLONIFIED_LOCAL(
- @Local String name, @Local String suffix) {
- @NoLength @Local String[] arr = new String[4];
- arr[0] = name;
- arr[1] = suffix;
- arr[2] = suffix;
- // [NOCPP[
- arr[3] = name;
- // ]NOCPP]
- return arr;
- }
-
- /**
- * An initialization helper for having the same local name in all modes.
- *
- * @param name
- * the name
- * @return the initialized name array
- */
- static @NoLength @Local String[] SAME_LOCAL(@Local String name) {
- @NoLength @Local String[] arr = new String[4];
- arr[0] = name;
- arr[1] = name;
- arr[2] = name;
- // [NOCPP[
- arr[3] = name;
- // ]NOCPP]
- return arr;
- }
-
- /**
- * Returns an attribute name by buffer.
- *
- *
- * C++ ownership: The return value is either released by the caller if the
- * attribute is a duplicate or the ownership is transferred to
- * HtmlAttributes and released upon clearing or destroying that object.
- *
- * @param buf
- * the buffer
- * @param offset
- * ignored
- * @param length
- * length of data
- * @param checkNcName
- * whether to check ncnameness
- * @return an
- * C++ memory note: The return value must be released.
- *
- * @return the buffer as a string
- */
- protected String strBufToString() {
- String str = Portability.newStringFromBuffer(strBuf, 0, strBufLen
- // CPPONLY: , tokenHandler
- );
- clearStrBufAfterUse();
- return str;
- }
-
- /**
- * Returns the buffer as a local name. The return value is released in
- * emitDoctypeToken().
- *
- * @return the buffer as local name
- */
- private void strBufToDoctypeName() {
- doctypeName = Portability.newLocalNameFromBuffer(strBuf, 0, strBufLen,
- interner);
- clearStrBufAfterUse();
- }
-
- /**
- * Emits the buffer as character tokens.
- *
- * @throws SAXException
- * if the token handler threw
- */
- private void emitStrBuf() throws SAXException {
- if (strBufLen > 0) {
- tokenHandler.characters(strBuf, 0, strBufLen);
- clearStrBufAfterUse();
- }
- }
-
- @Inline private void appendSecondHyphenToBogusComment() throws SAXException {
- // [NOCPP[
- switch (commentPolicy) {
- case ALTER_INFOSET:
- appendStrBuf(' ');
- // FALLTHROUGH
- case ALLOW:
- warn("The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.");
- // ]NOCPP]
- appendStrBuf('-');
- // [NOCPP[
- break;
- case FATAL:
- fatal("The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.");
- break;
- }
- // ]NOCPP]
- }
-
- // [NOCPP[
- private void maybeAppendSpaceToBogusComment() throws SAXException {
- switch (commentPolicy) {
- case ALTER_INFOSET:
- appendStrBuf(' ');
- // FALLTHROUGH
- case ALLOW:
- warn("The document is not mappable to XML 1.0 due to a trailing hyphen in a comment.");
- break;
- case FATAL:
- fatal("The document is not mappable to XML 1.0 due to a trailing hyphen in a comment.");
- break;
- }
- }
-
- // ]NOCPP]
-
- @Inline private void adjustDoubleHyphenAndAppendToStrBufAndErr(char c)
- throws SAXException {
- errConsecutiveHyphens();
- // [NOCPP[
- switch (commentPolicy) {
- case ALTER_INFOSET:
- strBufLen--;
- // WARNING!!! This expands the worst case of the buffer length
- // given the length of input!
- appendStrBuf(' ');
- appendStrBuf('-');
- // FALLTHROUGH
- case ALLOW:
- warn("The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.");
- // ]NOCPP]
- appendStrBuf(c);
- // [NOCPP[
- break;
- case FATAL:
- fatal("The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.");
- break;
- }
- // ]NOCPP]
- }
-
- private void appendStrBuf(@NoLength char[] buffer, int offset, int length) {
- int newLen = strBufLen + length;
- // CPPONLY: assert newLen <= strBuf.length: "Previous buffer length insufficient.";
- // CPPONLY: if (strBuf.length < newLen) {
- // CPPONLY: if (!EnsureBufferSpace(length)) {
- // CPPONLY: assert false: "RELEASE: Unable to recover from buffer reallocation failure";
- // CPPONLY: } // TODO: Add telemetry when outer if fires but inner does not
- // CPPONLY: }
- System.arraycopy(buffer, offset, strBuf, strBufLen, length);
- strBufLen = newLen;
- }
-
- /**
- * Append the contents of the char reference buffer to the main one.
- */
- @Inline private void appendCharRefBufToStrBuf() {
- appendStrBuf(charRefBuf, 0, charRefBufLen);
- charRefBufLen = 0;
- }
-
- /**
- * Emits the current comment token.
- *
- * @param pos
- * TODO
- *
- * @throws SAXException
- */
- private void emitComment(int provisionalHyphens, int pos)
- throws SAXException {
- // [NOCPP[
- if (wantsComments) {
- // ]NOCPP]
- tokenHandler.comment(strBuf, 0, strBufLen
- - provisionalHyphens);
- // [NOCPP[
- }
- // ]NOCPP]
- clearStrBufAfterUse();
- cstart = pos + 1;
- }
-
- /**
- * Flushes coalesced character tokens.
- *
- * @param buf
- * TODO
- * @param pos
- * TODO
- *
- * @throws SAXException
- */
- protected void flushChars(@NoLength char[] buf, int pos)
- throws SAXException {
- if (pos > cstart) {
- tokenHandler.characters(buf, cstart, pos - cstart);
- }
- cstart = Integer.MAX_VALUE;
- }
-
- /**
- * Reports an condition that would make the infoset incompatible with XML
- * 1.0 as fatal.
- *
- * @param message
- * the message
- * @throws SAXException
- * @throws SAXParseException
- */
- public void fatal(String message) throws SAXException {
- SAXParseException spe = new SAXParseException(message, this);
- if (errorHandler != null) {
- errorHandler.fatalError(spe);
- }
- throw spe;
- }
-
- /**
- * Reports a Parse Error.
- *
- * @param message
- * the message
- * @throws SAXException
- */
- public void err(String message) throws SAXException {
- if (errorHandler == null) {
- return;
- }
- SAXParseException spe = new SAXParseException(message, this);
- errorHandler.error(spe);
- }
-
- public void errTreeBuilder(String message) throws SAXException {
- ErrorHandler eh = null;
- if (tokenHandler instanceof TreeBuilder>) {
- TreeBuilder> treeBuilder = (TreeBuilder>) tokenHandler;
- eh = treeBuilder.getErrorHandler();
- }
- if (eh == null) {
- eh = errorHandler;
- }
- if (eh == null) {
- return;
- }
- SAXParseException spe = new SAXParseException(message, this);
- eh.error(spe);
- }
-
- /**
- * Reports a warning
- *
- * @param message
- * the message
- * @throws SAXException
- */
- public void warn(String message) throws SAXException {
- if (errorHandler == null) {
- return;
- }
- SAXParseException spe = new SAXParseException(message, this);
- errorHandler.warning(spe);
- }
-
- private void strBufToElementNameString() {
- tagName = ElementName.elementNameByBuffer(strBuf, 0, strBufLen,
- interner);
- clearStrBufAfterUse();
- }
-
- private int emitCurrentTagToken(boolean selfClosing, int pos)
- throws SAXException {
- cstart = pos + 1;
- maybeErrSlashInEndTag(selfClosing);
- stateSave = Tokenizer.DATA;
- HtmlAttributes attrs = (attributes == null ? HtmlAttributes.EMPTY_ATTRIBUTES
- : attributes);
- if (endTag) {
- /*
- * When an end tag token is emitted, the content model flag must be
- * switched to the PCDATA state.
- */
- maybeErrAttributesOnEndTag(attrs);
- // CPPONLY: if (!viewingXmlSource) {
- tokenHandler.endTag(tagName);
- // CPPONLY: }
- // CPPONLY: if (newAttributesEachTime) {
- // CPPONLY: Portability.delete(attributes);
- // CPPONLY: attributes = null;
- // CPPONLY: }
- } else {
- // CPPONLY: if (viewingXmlSource) {
- // CPPONLY: assert newAttributesEachTime;
- // CPPONLY: Portability.delete(attributes);
- // CPPONLY: attributes = null;
- // CPPONLY: } else {
- tokenHandler.startTag(tagName, attrs, selfClosing);
- // CPPONLY: }
- }
- tagName.release();
- tagName = null;
- if (newAttributesEachTime) {
- attributes = null;
- } else {
- attributes.clear(mappingLangToXmlLang);
- }
- /*
- * The token handler may have called setStateAndEndTagExpectation
- * and changed stateSave since the start of this method.
- */
- return stateSave;
- }
-
- private void attributeNameComplete() throws SAXException {
- attributeName = AttributeName.nameByBuffer(strBuf, 0, strBufLen
- // [NOCPP[
- , namePolicy != XmlViolationPolicy.ALLOW
- // ]NOCPP]
- , interner);
- clearStrBufAfterUse();
-
- if (attributes == null) {
- attributes = new HtmlAttributes(mappingLangToXmlLang);
- }
-
- /*
- * When the user agent leaves the attribute name state (and before
- * emitting the tag token, if appropriate), the complete attribute's
- * name must be compared to the other attributes on the same token; if
- * there is already an attribute on the token with the exact same name,
- * then this is a parse error and the new attribute must be dropped,
- * along with the value that gets associated with it (if any).
- */
- if (attributes.contains(attributeName)) {
- errDuplicateAttribute();
- attributeName.release();
- attributeName = null;
- }
- }
-
- private void addAttributeWithoutValue() throws SAXException {
- noteAttributeWithoutValue();
-
- // [NOCPP[
- if (metaBoundaryPassed && AttributeName.CHARSET == attributeName
- && ElementName.META == tagName) {
- err("A \u201Ccharset\u201D attribute on a \u201Cmeta\u201D element found after the first 512 bytes.");
- }
- // ]NOCPP]
- if (attributeName != null) {
- // [NOCPP[
- if (html4) {
- if (attributeName.isBoolean()) {
- if (html4ModeCompatibleWithXhtml1Schemata) {
- attributes.addAttribute(attributeName,
- attributeName.getLocal(AttributeName.HTML),
- xmlnsPolicy);
- } else {
- attributes.addAttribute(attributeName, "", xmlnsPolicy);
- }
- } else {
- if (AttributeName.BORDER != attributeName) {
- err("Attribute value omitted for a non-boolean attribute. (HTML4-only error.)");
- attributes.addAttribute(attributeName, "", xmlnsPolicy);
- }
- }
- } else {
- if (AttributeName.SRC == attributeName
- || AttributeName.HREF == attributeName) {
- warn("Attribute \u201C"
- + attributeName.getLocal(AttributeName.HTML)
- + "\u201D without an explicit value seen. The attribute may be dropped by IE7.");
- }
- // ]NOCPP]
- attributes.addAttribute(attributeName,
- Portability.newEmptyString()
- // [NOCPP[
- , xmlnsPolicy
- // ]NOCPP]
- // CPPONLY: , attributeLine
- );
- // [NOCPP[
- }
- // ]NOCPP]
- attributeName = null; // attributeName has been adopted by the
- // |attributes| object
- } else {
- clearStrBufAfterUse();
- }
- }
-
- private void addAttributeWithValue() throws SAXException {
- // [NOCPP[
- if (metaBoundaryPassed && ElementName.META == tagName
- && AttributeName.CHARSET == attributeName) {
- err("A \u201Ccharset\u201D attribute on a \u201Cmeta\u201D element found after the first 512 bytes.");
- }
- // ]NOCPP]
- if (attributeName != null) {
- String val = strBufToString(); // Ownership transferred to
- // HtmlAttributes
- // CPPONLY: if (mViewSource) {
- // CPPONLY: mViewSource.MaybeLinkifyAttributeValue(attributeName, val);
- // CPPONLY: }
- // [NOCPP[
- if (!endTag && html4 && html4ModeCompatibleWithXhtml1Schemata
- && attributeName.isCaseFolded()) {
- val = newAsciiLowerCaseStringFromString(val);
- }
- // ]NOCPP]
- attributes.addAttribute(attributeName, val
- // [NOCPP[
- , xmlnsPolicy
- // ]NOCPP]
- // CPPONLY: , attributeLine
- );
- attributeName = null; // attributeName has been adopted by the
- // |attributes| object
- } else {
- // We have a duplicate attribute. Explicitly discard its value.
- clearStrBufAfterUse();
- }
- }
-
- // [NOCPP[
-
- private static String newAsciiLowerCaseStringFromString(String str) {
- if (str == null) {
- return null;
- }
- char[] buf = new char[str.length()];
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (c >= 'A' && c <= 'Z') {
- c += 0x20;
- }
- buf[i] = c;
- }
- return new String(buf);
- }
-
- protected void startErrorReporting() throws SAXException {
-
- }
-
- // ]NOCPP]
-
- public void start() throws SAXException {
- initializeWithoutStarting();
- tokenHandler.startTokenization(this);
- // [NOCPP[
- startErrorReporting();
- // ]NOCPP]
- }
-
- public boolean tokenizeBuffer(UTF16Buffer buffer) throws SAXException {
- int state = stateSave;
- int returnState = returnStateSave;
- char c = '\u0000';
- shouldSuspend = false;
- lastCR = false;
-
- int start = buffer.getStart();
- int end = buffer.getEnd();
-
- // In C++, the caller of tokenizeBuffer needs to do this explicitly.
- // [NOCPP[
- ensureBufferSpace(end - start);
- // ]NOCPP]
-
- /**
- * The index of the last AttributeName corresponding to the argument data
- */
- static AttributeName nameByBuffer(@NoLength char[] buf, int offset,
- int length
- // [NOCPP[
- , boolean checkNcName
- // ]NOCPP]
- , Interner interner) {
- // XXX deal with offset
- int hash = AttributeName.bufToHash(buf, length);
- int index = Arrays.binarySearch(AttributeName.ATTRIBUTE_HASHES, hash);
- if (index < 0) {
- return AttributeName.createAttributeName(
- Portability.newLocalNameFromBuffer(buf, offset, length,
- interner)
- // [NOCPP[
- , checkNcName
- // ]NOCPP]
- );
- } else {
- AttributeName attributeName = AttributeName.ATTRIBUTE_NAMES[index];
- @Local String name = attributeName.getLocal(AttributeName.HTML);
- if (!Portability.localEqualsBuffer(name, buf, offset, length)) {
- return AttributeName.createAttributeName(
- Portability.newLocalNameFromBuffer(buf, offset, length,
- interner)
- // [NOCPP[
- , checkNcName
- // ]NOCPP]
- );
- }
- return attributeName;
- }
- }
-
- /**
- * This method has to return a unique integer for each well-known
- * lower-cased attribute name.
- *
- * @param buf
- * @param len
- * @return
- */
- private static int bufToHash(@NoLength char[] buf, int len) {
- int hash2 = 0;
- int hash = len;
- hash <<= 5;
- hash += buf[0] - 0x60;
- int j = len;
- for (int i = 0; i < 4 && j > 0; i++) {
- j--;
- hash <<= 5;
- hash += buf[j] - 0x60;
- hash2 <<= 6;
- hash2 += buf[i] - 0x5F;
- }
- return hash ^ hash2;
- }
-
- /**
- * The mode value for HTML.
- */
- public static final int HTML = 0;
-
- /**
- * The mode value for MathML.
- */
- public static final int MATHML = 1;
-
- /**
- * The mode value for SVG.
- */
- public static final int SVG = 2;
-
- // [NOCPP[
-
- /**
- * The mode value for lang-mapping HTML.
- */
- public static final int HTML_LANG = 3;
-
- // ]NOCPP]
-
- /**
- * The namespaces indexable by mode.
- */
- private final @NsUri @NoLength String[] uri;
-
- /**
- * The local names indexable by mode.
- */
- private final @Local @NoLength String[] local;
-
- /**
- * 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;
-
- // ]NOCPP]
-
- /**
- * The startup-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
- */
- protected AttributeName(@NsUri @NoLength String[] uri,
- @Local @NoLength String[] local, @Prefix @NoLength String[] prefix
- // [NOCPP[
- , int flags
- // ]NOCPP]
- ) {
- this.uri = uri;
- this.local = local;
- this.prefix = prefix;
- // [NOCPP[
- this.qName = COMPUTE_QNAME(local, prefix);
- this.flags = flags;
- // ]NOCPP]
- }
-
- /**
- * Creates an AttributeName for a local name.
- *
- * @param name
- * the name
- * @param checkNcName
- * whether to check ncnameness
- * @return an AttributeName
- */
- private static AttributeName createAttributeName(@Local String name
- // [NOCPP[
- , boolean checkNcName
- // ]NOCPP]
- ) {
- // [NOCPP[
- 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, flags);
- }
-
- /**
- * Deletes runtime-allocated instances in C++.
- */
- @Virtual void release() {
- // No-op in Java.
- // Implement as |delete this;| in subclass.
- }
-
- /**
- * The C++ destructor.
- */
- @SuppressWarnings("unused") @Virtual private void destructor() {
- Portability.deleteArray(local);
- }
-
- /**
- * Clones the attribute using an interner. Returns this in Java
- * and for non-dynamic instances in C++.
- *
- * @param interner
- * an interner
- * @return a clone
- */
- @Virtual public AttributeName cloneAttributeName(Interner interner) {
- return this;
- }
-
- // [NOCPP[
- /**
- * Creator for use when the XML violation policy requires an attribute name
- * 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,
- 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 true if this is an NCName in the given mode
- */
- public boolean isNcName(int mode) {
- return (flags & (1 << mode)) != 0;
- }
-
- /**
- * Queries whether this is an xmlns attribute.
- *
- * @return true if this is an xmlns attribute
- */
- public boolean isXmlns() {
- return (flags & IS_XMLNS) != 0;
- }
-
- /**
- * Queries whether this attribute has a case-folded value in the HTML4 mode
- * of the parser.
- *
- * @return true if the value is case-folded
- */
- boolean isCaseFolded() {
- return (flags & CASE_FOLDED) != 0;
- }
-
- boolean isBoolean() {
- return (flags & BOOLEAN) != 0;
- }
-
- public @QName String getQName(int mode) {
- return qName[mode];
- }
-
- // ]NOCPP]
-
- public @NsUri String getUri(int mode) {
- return uri[mode];
- }
-
- public @Local String getLocal(int mode) {
- return local[mode];
- }
-
- public @Prefix String getPrefix(int mode) {
- return prefix[mode];
- }
-
- 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()
-// + ", " + 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, 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 LOOP = new AttributeName(ALL_NO_NS, SAME_LOCAL("loop"), ALL_NO_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 SIZES = new AttributeName(ALL_NO_NS, SAME_LOCAL("sizes"), 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 SRCDOC = new AttributeName(ALL_NO_NS, SAME_LOCAL("srcdoc"), 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 SRCSET = new AttributeName(ALL_NO_NS, SAME_LOCAL("srcset"), 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 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 PROPERTY = new AttributeName(ALL_NO_NS, SAME_LOCAL("property"), 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 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 KEYSYSTEM = new AttributeName(ALL_NO_NS, SAME_LOCAL("keysystem"), 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 INTEGRITY = new AttributeName(ALL_NO_NS, SAME_LOCAL("integrity"), 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 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 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 CROSSORIGIN = new AttributeName(ALL_NO_NS, SAME_LOCAL("crossorigin"), 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 REFERRERPOLICY = new AttributeName(ALL_NO_NS, SAME_LOCAL("referrerpolicy"), 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 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 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 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,
- LOOP,
- 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,
- SIZES,
- 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,
- SRCDOC,
- SCOPED,
- STRING,
- SCHEME,
- STROKE,
- RADIUS,
- RESULT,
- REPEAT,
- SRCSET,
- 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,
- 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,
- PROPERTY,
- 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,
- FILL_RULE,
- FONTSTYLE,
- FONT_SIZE,
- KEYSYSTEM,
- KEYPOINTS,
- HIDEFOCUS,
- ONMESSAGE,
- INTERCEPT,
- ONDRAGEND,
- ONMOVEEND,
- ONINVALID,
- INTEGRITY,
- ONKEYDOWN,
- ONFOCUSIN,
- ONMOUSEUP,
- INPUTMODE,
- ONROWEXIT,
- MATHCOLOR,
- MASKUNITS,
- MAXLENGTH,
- LINEBREAK,
- TRANSFORM,
- V_HANGING,
- VALUETYPE,
- POINTSATZ,
- POINTSATX,
- POINTSATY,
- 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,
- CROSSORIGIN,
- 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,
- REFERRERPOLICY,
- 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,
- FONT_SIZE_ADJUST,
- KERNELUNITLENGTH,
- ONBEFOREACTIVATE,
- ONPROPERTYCHANGE,
- ONDATASETCHANGED,
- MASKCONTENTUNITS,
- PATTERNTRANSFORM,
- REQUIREDFEATURES,
- RENDERING_INTENT,
- SPECULAREXPONENT,
- SPECULARCONSTANT,
- SUPERSCRIPTSHIFT,
- STROKE_DASHARRAY,
- XCHANNELSELECTOR,
- YCHANNELSELECTOR,
- ARIA_AUTOCOMPLETE,
- 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,
- 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,
- 150813181,
- 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,
- 191443343,
- 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,
- 224431494,
- 224547358,
- 224587256,
- 224589550,
- 224655650,
- 224785518,
- 224810917,
- 224813302,
- 225126263,
- 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,
- 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,
- 290055764,
- 291557706,
- 291665349,
- 291804100,
- 292138018,
- 292166446,
- 292418738,
- 292451039,
- 300298041,
- 300374839,
- 300597935,
- 303073389,
- 303083839,
- 303266673,
- 303354997,
- 303430688,
- 303576261,
- 303724281,
- 303819694,
- 304242723,
- 304382625,
- 306247792,
- 307227811,
- 307468786,
- 307724489,
- 310252031,
- 310358241,
- 310373094,
- 310833159,
- 311015256,
- 313357609,
- 313683893,
- 313701861,
- 313706996,
- 313707317,
- 313710350,
- 313795700,
- 314027746,
- 314038181,
- 314091299,
- 314205627,
- 314233813,
- 316741830,
- 316797986,
- 317486755,
- 317794164,
- 320076137,
- 322657125,
- 322887778,
- 323506876,
- 323572412,
- 323605180,
- 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,
- 371593469,
- 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,
- 492891370,
- 493041952,
- 493441205,
- 493582844,
- 493716979,
- 504577572,
- 504740359,
- 505091638,
- 505592418,
- 505656212,
- 509516275,
- 514998531,
- 515571132,
- 515594682,
- 518712698,
- 521362273,
- 526592419,
- 526807354,
- 527348842,
- 538294791,
- 544689535,
- 545535009,
- 548544752,
- 548563346,
- 548595116,
- 551679010,
- 558034099,
- 560329411,
- 560356209,
- 560671018,
- 560671152,
- 560692590,
- 560845442,
- 569212097,
- 569474241,
- 572252718,
- 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,
- 878105336,
- 908643300,
- 945213471,
- };
-}
diff --git a/parser/html/javasrc/ElementName.java b/parser/html/javasrc/ElementName.java
deleted file mode 100644
index ee551a7377..0000000000
--- a/parser/html/javasrc/ElementName.java
+++ /dev/null
@@ -1,1609 +0,0 @@
-/*
- * Copyright (c) 2008-2014 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:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * 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.Inline;
-import nu.validator.htmlparser.annotation.Local;
-import nu.validator.htmlparser.annotation.NoLength;
-import nu.validator.htmlparser.annotation.Virtual;
-import nu.validator.htmlparser.common.Interner;
-
-public final class ElementName
-// uncomment when regenerating self
-// implements ComparablegetLocalName(int index) without bounds check.
- * @param index a valid attribute index
- * @return the local name at index
- */
- public @Local String getLocalNameNoBoundsCheck(int index) {
- // CPPONLY: assert index < length && index >= 0: "Index out of bounds";
- return names[index].getLocal(mode);
- }
-
- /**
- * Variant of getURI(int index) without bounds check.
- * @param index a valid attribute index
- * @return the namespace URI at index
- */
- public @NsUri String getURINoBoundsCheck(int index) {
- // CPPONLY: assert index < length && index >= 0: "Index out of bounds";
- return names[index].getUri(mode);
- }
-
- /**
- * Variant of getPrefix(int index) without bounds check.
- * @param index a valid attribute index
- * @return the namespace prefix at index
- */
- public @Prefix String getPrefixNoBoundsCheck(int index) {
- // CPPONLY: assert index < length && index >= 0: "Index out of bounds";
- return names[index].getPrefix(mode);
- }
-
- /**
- * Variant of getValue(int index) without bounds check.
- * @param index a valid attribute index
- * @return the attribute value at index
- */
- public String getValueNoBoundsCheck(int index) {
- // CPPONLY: assert index < length && index >= 0: "Index out of bounds";
- return values[index];
- }
-
- /**
- * Variant of getAttributeName(int index) without bounds check.
- * @param index a valid attribute index
- * @return the attribute name at index
- */
- public AttributeName getAttributeNameNoBoundsCheck(int index) {
- // CPPONLY: assert index < length && index >= 0: "Index out of bounds";
- return names[index];
- }
-
- // CPPONLY: /**
- // CPPONLY: * Obtains a line number without bounds check.
- // CPPONLY: * @param index a valid attribute index
- // CPPONLY: * @return the line number at index or -1 if unknown
- // CPPONLY: */
- // CPPONLY: public int getLineNoBoundsCheck(int index) {
- // CPPONLY: assert index < length && index >= 0: "Index out of bounds";
- // CPPONLY: return lines[index];
- // CPPONLY: }
-
- // [NOCPP[
-
- /**
- * Variant of getQName(int index) without bounds check.
- * @param index a valid attribute index
- * @return the QName at index
- */
- public @QName String getQNameNoBoundsCheck(int index) {
- return names[index].getQName(mode);
- }
-
- /**
- * Variant of getType(int index) without bounds check.
- * @param index a valid attribute index
- * @return the attribute type at index
- */
- public @IdType String getTypeNoBoundsCheck(int index) {
- return (names[index] == AttributeName.ID) ? "ID" : "CDATA";
- }
-
- public int getIndex(String qName) {
- for (int i = 0; i < length; i++) {
- if (names[i].getQName(mode).equals(qName)) {
- return i;
- }
- }
- return -1;
- }
-
- public int getIndex(String uri, String localName) {
- for (int i = 0; i < length; i++) {
- if (names[i].getLocal(mode).equals(localName)
- && names[i].getUri(mode).equals(uri)) {
- return i;
- }
- }
- return -1;
- }
-
- public @IdType String getType(String qName) {
- int index = getIndex(qName);
- if (index == -1) {
- return null;
- } else {
- return getType(index);
- }
- }
-
- public @IdType String getType(String uri, String localName) {
- int index = getIndex(uri, localName);
- if (index == -1) {
- return null;
- } else {
- return getType(index);
- }
- }
-
- public String getValue(String qName) {
- int index = getIndex(qName);
- if (index == -1) {
- return null;
- } else {
- return getValue(index);
- }
- }
-
- public String getValue(String uri, String localName) {
- int index = getIndex(uri, localName);
- if (index == -1) {
- return null;
- } else {
- return getValue(index);
- }
- }
-
- public @Local String getLocalName(int index) {
- if (index < length && index >= 0) {
- return names[index].getLocal(mode);
- } else {
- return null;
- }
- }
-
- public @QName String getQName(int index) {
- if (index < length && index >= 0) {
- return names[index].getQName(mode);
- } else {
- return null;
- }
- }
-
- public @IdType String getType(int index) {
- if (index < length && index >= 0) {
- return (names[index] == AttributeName.ID) ? "ID" : "CDATA";
- } else {
- return null;
- }
- }
-
- public AttributeName getAttributeName(int index) {
- if (index < length && index >= 0) {
- return names[index];
- } else {
- return null;
- }
- }
-
- public @NsUri String getURI(int index) {
- if (index < length && index >= 0) {
- return names[index].getUri(mode);
- } else {
- return null;
- }
- }
-
- public @Prefix String getPrefix(int index) {
- if (index < length && index >= 0) {
- return names[index].getPrefix(mode);
- } else {
- return null;
- }
- }
-
- public String getValue(int index) {
- if (index < length && index >= 0) {
- return values[index];
- } else {
- return null;
- }
- }
-
- public String getId() {
- return idValue;
- }
-
- public int getXmlnsLength() {
- return xmlnsLength;
- }
-
- public @Local String getXmlnsLocalName(int index) {
- if (index < xmlnsLength && index >= 0) {
- return xmlnsNames[index].getLocal(mode);
- } else {
- return null;
- }
- }
-
- public @NsUri String getXmlnsURI(int index) {
- if (index < xmlnsLength && index >= 0) {
- return xmlnsNames[index].getUri(mode);
- } else {
- return null;
- }
- }
-
- public String getXmlnsValue(int index) {
- if (index < xmlnsLength && index >= 0) {
- return xmlnsValues[index];
- } else {
- return null;
- }
- }
-
- public int getXmlnsIndex(AttributeName name) {
- for (int i = 0; i < xmlnsLength; i++) {
- if (xmlnsNames[i] == name) {
- return i;
- }
- }
- return -1;
- }
-
- public String getXmlnsValue(AttributeName name) {
- int index = getXmlnsIndex(name);
- if (index == -1) {
- return null;
- } else {
- return getXmlnsValue(index);
- }
- }
-
- public AttributeName getXmlnsAttributeName(int index) {
- if (index < xmlnsLength && index >= 0) {
- return xmlnsNames[index];
- } else {
- return null;
- }
- }
-
- // ]NOCPP]
-
- void addAttribute(AttributeName name, String value
- // [NOCPP[
- , XmlViolationPolicy xmlnsPolicy
- // ]NOCPP]
- // CPPONLY: , int line
- ) throws SAXException {
- // [NOCPP[
- if (name == AttributeName.ID) {
- idValue = value;
- }
-
- if (name.isXmlns()) {
- if (xmlnsNames.length == xmlnsLength) {
- int newLen = xmlnsLength == 0 ? 2 : xmlnsLength << 1;
- AttributeName[] newNames = new AttributeName[newLen];
- System.arraycopy(xmlnsNames, 0, newNames, 0, xmlnsNames.length);
- xmlnsNames = newNames;
- String[] newValues = new String[newLen];
- System.arraycopy(xmlnsValues, 0, newValues, 0, xmlnsValues.length);
- xmlnsValues = newValues;
- }
- xmlnsNames[xmlnsLength] = name;
- xmlnsValues[xmlnsLength] = value;
- xmlnsLength++;
- switch (xmlnsPolicy) {
- case FATAL:
- // this is ugly
- throw new SAXException("Saw an xmlns attribute.");
- case ALTER_INFOSET:
- return;
- case ALLOW:
- // fall through
- }
- }
-
- // ]NOCPP]
-
- if (names.length == length) {
- int newLen = length << 1; // The first growth covers virtually
- // 100% of elements according to
- // Hixie
- AttributeName[] newNames = new AttributeName[newLen];
- System.arraycopy(names, 0, newNames, 0, names.length);
- names = newNames;
- String[] newValues = new String[newLen];
- System.arraycopy(values, 0, newValues, 0, values.length);
- values = newValues;
- // CPPONLY: int[] newLines = new int[newLen];
- // CPPONLY: System.arraycopy(lines, 0, newLines, 0, lines.length);
- // CPPONLY: lines = newLines;
- }
- names[length] = name;
- values[length] = value;
- // CPPONLY: lines[length] = line;
- length++;
- }
-
- void clear(int m) {
- for (int i = 0; i < length; i++) {
- names[i].release();
- names[i] = null;
- Portability.releaseString(values[i]);
- values[i] = null;
- }
- length = 0;
- mode = m;
- // [NOCPP[
- idValue = null;
- for (int i = 0; i < xmlnsLength; i++) {
- xmlnsNames[i] = null;
- xmlnsValues[i] = null;
- }
- xmlnsLength = 0;
- // ]NOCPP]
- }
-
- /**
- * This is used in C++ to release special isindex
- * attribute values whose ownership is not transferred.
- */
- void releaseValue(int i) {
- Portability.releaseString(values[i]);
- }
-
- /**
- * This is only used for AttributeName ownership transfer
- * in the isindex case to avoid freeing custom names twice in C++.
- */
- void clearWithoutReleasingContents() {
- for (int i = 0; i < length; i++) {
- names[i] = null;
- values[i] = null;
- }
- length = 0;
- }
-
- boolean contains(AttributeName name) {
- for (int i = 0; i < length; i++) {
- if (name.equalsAnother(names[i])) {
- return true;
- }
- }
- // [NOCPP[
- for (int i = 0; i < xmlnsLength; i++) {
- if (name.equalsAnother(xmlnsNames[i])) {
- return true;
- }
- }
- // ]NOCPP]
- return false;
- }
-
- public void adjustForMath() {
- mode = AttributeName.MATHML;
- }
-
- public void adjustForSvg() {
- mode = AttributeName.SVG;
- }
-
- public HtmlAttributes cloneAttributes(Interner interner)
- throws SAXException {
- assert (length == 0
- // [NOCPP[
- && xmlnsLength == 0
- // ]NOCPP]
- )
- || mode == 0 || mode == 3;
- HtmlAttributes clone = new HtmlAttributes(0);
- for (int i = 0; i < length; i++) {
- clone.addAttribute(names[i].cloneAttributeName(interner),
- Portability.newStringFromString(values[i])
- // [NOCPP[
- , XmlViolationPolicy.ALLOW
- // ]NOCPP]
- // CPPONLY: , lines[i]
- );
- }
- // [NOCPP[
- for (int i = 0; i < xmlnsLength; i++) {
- clone.addAttribute(xmlnsNames[i], xmlnsValues[i],
- XmlViolationPolicy.ALLOW);
- }
- // ]NOCPP]
- return clone; // XXX!!!
- }
-
- public boolean equalsAnother(HtmlAttributes other) {
- assert mode == 0 || mode == 3 : "Trying to compare attributes in foreign content.";
- int otherLength = other.getLength();
- if (length != otherLength) {
- return false;
- }
- for (int i = 0; i < length; i++) {
- // Work around the limitations of C++
- boolean found = false;
- // The comparing just the local names is OK, since these attribute
- // holders are both supposed to belong to HTML formatting elements
- @Local String ownLocal = names[i].getLocal(AttributeName.HTML);
- for (int j = 0; j < otherLength; j++) {
- if (ownLocal == other.names[j].getLocal(AttributeName.HTML)) {
- found = true;
- if (!Portability.stringEqualsString(values[i], other.values[j])) {
- return false;
- }
- }
- }
- if (!found) {
- return false;
- }
- }
- return true;
- }
-
- // [NOCPP[
-
- void processNonNcNames(TreeBuilder> treeBuilder, XmlViolationPolicy namePolicy) throws SAXException {
- for (int i = 0; i < length; i++) {
- AttributeName attName = names[i];
- if (!attName.isNcName(mode)) {
- String name = attName.getLocal(mode);
- switch (namePolicy) {
- case ALTER_INFOSET:
- names[i] = AttributeName.create(NCName.escapeName(name));
- // fall through
- case ALLOW:
- if (attName != AttributeName.XML_LANG) {
- treeBuilder.warn("Attribute \u201C" + name + "\u201D is not serializable as XML 1.0.");
- }
- break;
- case FATAL:
- treeBuilder.fatal("Attribute \u201C" + name + "\u201D is not serializable as XML 1.0.");
- break;
- }
- }
- }
- }
-
- public void merge(HtmlAttributes attributes) throws SAXException {
- int len = attributes.getLength();
- for (int i = 0; i < len; i++) {
- AttributeName name = attributes.getAttributeNameNoBoundsCheck(i);
- if (!contains(name)) {
- addAttribute(name, attributes.getValueNoBoundsCheck(i), XmlViolationPolicy.ALLOW);
- }
- }
- }
-
-
- // ]NOCPP]
-
-}
diff --git a/parser/html/javasrc/MetaScanner.java b/parser/html/javasrc/MetaScanner.java
deleted file mode 100644
index be9aabfe33..0000000000
--- a/parser/html/javasrc/MetaScanner.java
+++ /dev/null
@@ -1,854 +0,0 @@
-/*
- * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2008-2015 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:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * 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.io.IOException;
-
-import nu.validator.htmlparser.annotation.Auto;
-import nu.validator.htmlparser.annotation.Inline;
-import nu.validator.htmlparser.common.ByteReadable;
-
-import org.xml.sax.SAXException;
-
-public abstract class MetaScanner {
-
- /**
- * Constant for "charset".
- */
- private static final char[] CHARSET = { 'h', 'a', 'r', 's', 'e', 't' };
-
- /**
- * Constant for "content".
- */
- private static final char[] CONTENT = { 'o', 'n', 't', 'e', 'n', 't' };
-
- /**
- * Constant for "http-equiv".
- */
- private static final char[] HTTP_EQUIV = { 't', 't', 'p', '-', 'e', 'q',
- 'u', 'i', 'v' };
-
- /**
- * Constant for "content-type".
- */
- private static final char[] CONTENT_TYPE = { 'c', 'o', 'n', 't', 'e', 'n',
- 't', '-', 't', 'y', 'p', 'e' };
-
- private static final int NO = 0;
-
- private static final int M = 1;
-
- private static final int E = 2;
-
- private static final int T = 3;
-
- private static final int A = 4;
-
- private static final int DATA = 0;
-
- private static final int TAG_OPEN = 1;
-
- private static final int SCAN_UNTIL_GT = 2;
-
- private static final int TAG_NAME = 3;
-
- private static final int BEFORE_ATTRIBUTE_NAME = 4;
-
- private static final int ATTRIBUTE_NAME = 5;
-
- private static final int AFTER_ATTRIBUTE_NAME = 6;
-
- private static final int BEFORE_ATTRIBUTE_VALUE = 7;
-
- private static final int ATTRIBUTE_VALUE_DOUBLE_QUOTED = 8;
-
- private static final int ATTRIBUTE_VALUE_SINGLE_QUOTED = 9;
-
- private static final int ATTRIBUTE_VALUE_UNQUOTED = 10;
-
- private static final int AFTER_ATTRIBUTE_VALUE_QUOTED = 11;
-
- private static final int MARKUP_DECLARATION_OPEN = 13;
-
- private static final int MARKUP_DECLARATION_HYPHEN = 14;
-
- private static final int COMMENT_START = 15;
-
- private static final int COMMENT_START_DASH = 16;
-
- private static final int COMMENT = 17;
-
- private static final int COMMENT_END_DASH = 18;
-
- private static final int COMMENT_END = 19;
-
- private static final int SELF_CLOSING_START_TAG = 20;
-
- private static final int HTTP_EQUIV_NOT_SEEN = 0;
-
- private static final int HTTP_EQUIV_CONTENT_TYPE = 1;
-
- private static final int HTTP_EQUIV_OTHER = 2;
-
- /**
- * The data source.
- */
- protected ByteReadable readable;
-
- /**
- * The state of the state machine that recognizes the tag name "meta".
- */
- private int metaState = NO;
-
- /**
- * The current position in recognizing the attribute name "content".
- */
- private int contentIndex = Integer.MAX_VALUE;
-
- /**
- * The current position in recognizing the attribute name "charset".
- */
- private int charsetIndex = Integer.MAX_VALUE;
-
- /**
- * The current position in recognizing the attribute name "http-equive".
- */
- private int httpEquivIndex = Integer.MAX_VALUE;
-
- /**
- * The current position in recognizing the attribute value "content-type".
- */
- private int contentTypeIndex = Integer.MAX_VALUE;
-
- /**
- * The tokenizer state.
- */
- protected int stateSave = DATA;
-
- /**
- * The currently filled length of strBuf.
- */
- private int strBufLen;
-
- /**
- * Accumulation buffer for attribute values.
- */
- private @Auto char[] strBuf;
-
- private String content;
-
- private String charset;
-
- private int httpEquivState;
-
- // CPPONLY: private TreeBuilder treeBuilder;
-
- public MetaScanner(
- // CPPONLY: TreeBuilder tb
- ) {
- this.readable = null;
- this.metaState = NO;
- this.contentIndex = Integer.MAX_VALUE;
- this.charsetIndex = Integer.MAX_VALUE;
- this.httpEquivIndex = Integer.MAX_VALUE;
- this.contentTypeIndex = Integer.MAX_VALUE;
- this.stateSave = DATA;
- this.strBufLen = 0;
- this.strBuf = new char[36];
- this.content = null;
- this.charset = null;
- this.httpEquivState = HTTP_EQUIV_NOT_SEEN;
- // CPPONLY: this.treeBuilder = tb;
- }
-
- @SuppressWarnings("unused") private void destructor() {
- Portability.releaseString(content);
- Portability.releaseString(charset);
- }
-
- // [NOCPP[
-
- /**
- * Reads a byte from the data source.
- *
- * -1 means end.
- * @return
- * @throws IOException
- */
- protected int read() throws IOException {
- return readable.readByte();
- }
-
- // ]NOCPP]
-
- // WARNING When editing this, makes sure the bytecode length shown by javap
- // stays under 8000 bytes!
- /**
- * The runs the meta scanning algorithm.
- */
- protected final void stateLoop(int state)
- throws SAXException, IOException {
- int c = -1;
- boolean reconsume = false;
- stateloop: for (;;) {
- switch (state) {
- case DATA:
- dataloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- c = read();
- }
- switch (c) {
- case -1:
- break stateloop;
- case '<':
- state = MetaScanner.TAG_OPEN;
- break dataloop; // FALL THROUGH continue
- // stateloop;
- default:
- continue;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case TAG_OPEN:
- tagopenloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case 'm':
- case 'M':
- metaState = M;
- state = MetaScanner.TAG_NAME;
- break tagopenloop;
- // continue stateloop;
- case '!':
- state = MetaScanner.MARKUP_DECLARATION_OPEN;
- continue stateloop;
- case '?':
- case '/':
- state = MetaScanner.SCAN_UNTIL_GT;
- continue stateloop;
- case '>':
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
- metaState = NO;
- state = MetaScanner.TAG_NAME;
- break tagopenloop;
- // continue stateloop;
- }
- state = MetaScanner.DATA;
- reconsume = true;
- continue stateloop;
- }
- }
- // FALL THROUGH DON'T REORDER
- case TAG_NAME:
- tagnameloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
- case '\u000C':
- state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
- break tagnameloop;
- // continue stateloop;
- case '/':
- state = MetaScanner.SELF_CLOSING_START_TAG;
- continue stateloop;
- case '>':
- state = MetaScanner.DATA;
- continue stateloop;
- case 'e':
- case 'E':
- if (metaState == M) {
- metaState = E;
- } else {
- metaState = NO;
- }
- continue;
- case 't':
- case 'T':
- if (metaState == E) {
- metaState = T;
- } else {
- metaState = NO;
- }
- continue;
- case 'a':
- case 'A':
- if (metaState == T) {
- metaState = A;
- } else {
- metaState = NO;
- }
- continue;
- default:
- metaState = NO;
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_ATTRIBUTE_NAME:
- beforeattributenameloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- c = read();
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
- case '\u000C':
- continue;
- case '/':
- state = MetaScanner.SELF_CLOSING_START_TAG;
- continue stateloop;
- case '>':
- if (handleTag()) {
- break stateloop;
- }
- state = DATA;
- continue stateloop;
- case 'c':
- case 'C':
- contentIndex = 0;
- charsetIndex = 0;
- httpEquivIndex = Integer.MAX_VALUE;
- contentTypeIndex = Integer.MAX_VALUE;
- state = MetaScanner.ATTRIBUTE_NAME;
- break beforeattributenameloop;
- case 'h':
- case 'H':
- contentIndex = Integer.MAX_VALUE;
- charsetIndex = Integer.MAX_VALUE;
- httpEquivIndex = 0;
- contentTypeIndex = Integer.MAX_VALUE;
- state = MetaScanner.ATTRIBUTE_NAME;
- break beforeattributenameloop;
- default:
- contentIndex = Integer.MAX_VALUE;
- charsetIndex = Integer.MAX_VALUE;
- httpEquivIndex = Integer.MAX_VALUE;
- contentTypeIndex = Integer.MAX_VALUE;
- state = MetaScanner.ATTRIBUTE_NAME;
- break beforeattributenameloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case ATTRIBUTE_NAME:
- attributenameloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
- case '\u000C':
- state = MetaScanner.AFTER_ATTRIBUTE_NAME;
- continue stateloop;
- case '/':
- state = MetaScanner.SELF_CLOSING_START_TAG;
- continue stateloop;
- case '=':
- strBufLen = 0;
- contentTypeIndex = 0;
- state = MetaScanner.BEFORE_ATTRIBUTE_VALUE;
- break attributenameloop;
- // continue stateloop;
- case '>':
- if (handleTag()) {
- break stateloop;
- }
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- if (metaState == A) {
- if (c >= 'A' && c <= 'Z') {
- c += 0x20;
- }
- if (contentIndex < CONTENT.length && c == CONTENT[contentIndex]) {
- ++contentIndex;
- } else {
- contentIndex = Integer.MAX_VALUE;
- }
- if (charsetIndex < CHARSET.length && c == CHARSET[charsetIndex]) {
- ++charsetIndex;
- } else {
- charsetIndex = Integer.MAX_VALUE;
- }
- if (httpEquivIndex < HTTP_EQUIV.length && c == HTTP_EQUIV[httpEquivIndex]) {
- ++httpEquivIndex;
- } else {
- httpEquivIndex = Integer.MAX_VALUE;
- }
- }
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_ATTRIBUTE_VALUE:
- beforeattributevalueloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
- case '\u000C':
- continue;
- case '"':
- state = MetaScanner.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
- break beforeattributevalueloop;
- // continue stateloop;
- case '\'':
- state = MetaScanner.ATTRIBUTE_VALUE_SINGLE_QUOTED;
- continue stateloop;
- case '>':
- if (handleTag()) {
- break stateloop;
- }
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- handleCharInAttributeValue(c);
- state = MetaScanner.ATTRIBUTE_VALUE_UNQUOTED;
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case ATTRIBUTE_VALUE_DOUBLE_QUOTED:
- attributevaluedoublequotedloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- c = read();
- }
- switch (c) {
- case -1:
- break stateloop;
- case '"':
- handleAttributeValue();
- state = MetaScanner.AFTER_ATTRIBUTE_VALUE_QUOTED;
- break attributevaluedoublequotedloop;
- // continue stateloop;
- default:
- handleCharInAttributeValue(c);
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_ATTRIBUTE_VALUE_QUOTED:
- afterattributevaluequotedloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
- case '\u000C':
- state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
- continue stateloop;
- case '/':
- state = MetaScanner.SELF_CLOSING_START_TAG;
- break afterattributevaluequotedloop;
- // continue stateloop;
- case '>':
- if (handleTag()) {
- break stateloop;
- }
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
- reconsume = true;
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case SELF_CLOSING_START_TAG:
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '>':
- if (handleTag()) {
- break stateloop;
- }
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
- reconsume = true;
- continue stateloop;
- }
- // XXX reorder point
- case ATTRIBUTE_VALUE_UNQUOTED:
- for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- c = read();
- }
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
-
- case '\u000C':
- handleAttributeValue();
- state = MetaScanner.BEFORE_ATTRIBUTE_NAME;
- continue stateloop;
- case '>':
- handleAttributeValue();
- if (handleTag()) {
- break stateloop;
- }
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- handleCharInAttributeValue(c);
- continue;
- }
- }
- // XXX reorder point
- case AFTER_ATTRIBUTE_NAME:
- for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case ' ':
- case '\t':
- case '\n':
- case '\u000C':
- continue;
- case '/':
- handleAttributeValue();
- state = MetaScanner.SELF_CLOSING_START_TAG;
- continue stateloop;
- case '=':
- strBufLen = 0;
- contentTypeIndex = 0;
- state = MetaScanner.BEFORE_ATTRIBUTE_VALUE;
- continue stateloop;
- case '>':
- handleAttributeValue();
- if (handleTag()) {
- break stateloop;
- }
- state = MetaScanner.DATA;
- continue stateloop;
- case 'c':
- case 'C':
- contentIndex = 0;
- charsetIndex = 0;
- state = MetaScanner.ATTRIBUTE_NAME;
- continue stateloop;
- default:
- contentIndex = Integer.MAX_VALUE;
- charsetIndex = Integer.MAX_VALUE;
- state = MetaScanner.ATTRIBUTE_NAME;
- continue stateloop;
- }
- }
- // XXX reorder point
- case MARKUP_DECLARATION_OPEN:
- markupdeclarationopenloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '-':
- state = MetaScanner.MARKUP_DECLARATION_HYPHEN;
- break markupdeclarationopenloop;
- // continue stateloop;
- default:
- state = MetaScanner.SCAN_UNTIL_GT;
- reconsume = true;
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case MARKUP_DECLARATION_HYPHEN:
- markupdeclarationhyphenloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '-':
- state = MetaScanner.COMMENT_START;
- break markupdeclarationhyphenloop;
- // continue stateloop;
- default:
- state = MetaScanner.SCAN_UNTIL_GT;
- reconsume = true;
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT_START:
- commentstartloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '-':
- state = MetaScanner.COMMENT_START_DASH;
- continue stateloop;
- case '>':
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- state = MetaScanner.COMMENT;
- break commentstartloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT:
- commentloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '-':
- state = MetaScanner.COMMENT_END_DASH;
- break commentloop;
- // continue stateloop;
- default:
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT_END_DASH:
- commentenddashloop: for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '-':
- state = MetaScanner.COMMENT_END;
- break commentenddashloop;
- // continue stateloop;
- default:
- state = MetaScanner.COMMENT;
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT_END:
- for (;;) {
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '>':
- state = MetaScanner.DATA;
- continue stateloop;
- case '-':
- continue;
- default:
- state = MetaScanner.COMMENT;
- continue stateloop;
- }
- }
- // XXX reorder point
- case COMMENT_START_DASH:
- c = read();
- switch (c) {
- case -1:
- break stateloop;
- case '-':
- state = MetaScanner.COMMENT_END;
- continue stateloop;
- case '>':
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- state = MetaScanner.COMMENT;
- continue stateloop;
- }
- // XXX reorder point
- case ATTRIBUTE_VALUE_SINGLE_QUOTED:
- for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- c = read();
- }
- switch (c) {
- case -1:
- break stateloop;
- case '\'':
- handleAttributeValue();
- state = MetaScanner.AFTER_ATTRIBUTE_VALUE_QUOTED;
- continue stateloop;
- default:
- handleCharInAttributeValue(c);
- continue;
- }
- }
- // XXX reorder point
- case SCAN_UNTIL_GT:
- for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- c = read();
- }
- switch (c) {
- case -1:
- break stateloop;
- case '>':
- state = MetaScanner.DATA;
- continue stateloop;
- default:
- continue;
- }
- }
- }
- }
- stateSave = state;
- }
-
- private void handleCharInAttributeValue(int c) {
- if (metaState == A) {
- if (contentIndex == CONTENT.length || charsetIndex == CHARSET.length) {
- addToBuffer(c);
- } else if (httpEquivIndex == HTTP_EQUIV.length) {
- if (contentTypeIndex < CONTENT_TYPE.length && toAsciiLowerCase(c) == CONTENT_TYPE[contentTypeIndex]) {
- ++contentTypeIndex;
- } else {
- contentTypeIndex = Integer.MAX_VALUE;
- }
- }
- }
- }
-
- @Inline private int toAsciiLowerCase(int c) {
- if (c >= 'A' && c <= 'Z') {
- return c + 0x20;
- }
- return c;
- }
-
- /**
- * Adds a character to the accumulation buffer.
- * @param c the character to add
- */
- private void addToBuffer(int c) {
- if (strBufLen == strBuf.length) {
- char[] newBuf = new char[strBuf.length + (strBuf.length << 1)];
- System.arraycopy(strBuf, 0, newBuf, 0, strBuf.length);
- strBuf = newBuf;
- }
- strBuf[strBufLen++] = (char)c;
- }
-
- /**
- * Attempts to extract a charset name from the accumulation buffer.
- * @return true if successful
- * @throws SAXException
- */
- private void handleAttributeValue() throws SAXException {
- if (metaState != A) {
- return;
- }
- if (contentIndex == CONTENT.length && content == null) {
- content = Portability.newStringFromBuffer(strBuf, 0, strBufLen
- // CPPONLY: , treeBuilder
- );
- return;
- }
- if (charsetIndex == CHARSET.length && charset == null) {
- charset = Portability.newStringFromBuffer(strBuf, 0, strBufLen
- // CPPONLY: , treeBuilder
- );
- return;
- }
- if (httpEquivIndex == HTTP_EQUIV.length
- && httpEquivState == HTTP_EQUIV_NOT_SEEN) {
- httpEquivState = (contentTypeIndex == CONTENT_TYPE.length) ? HTTP_EQUIV_CONTENT_TYPE
- : HTTP_EQUIV_OTHER;
- return;
- }
- }
-
- private boolean handleTag() throws SAXException {
- boolean stop = handleTagInner();
- Portability.releaseString(content);
- content = null;
- Portability.releaseString(charset);
- charset = null;
- httpEquivState = HTTP_EQUIV_NOT_SEEN;
- return stop;
- }
-
- private boolean handleTagInner() throws SAXException {
- if (charset != null && tryCharset(charset)) {
- return true;
- }
- if (content != null && httpEquivState == HTTP_EQUIV_CONTENT_TYPE) {
- String extract = TreeBuilder.extractCharsetFromContent(content
- // CPPONLY: , treeBuilder
- );
- if (extract == null) {
- return false;
- }
- boolean success = tryCharset(extract);
- Portability.releaseString(extract);
- return success;
- }
- return false;
- }
-
- /**
- * Tries to switch to an encoding.
- *
- * @param encoding
- * @return true if successful
- * @throws SAXException
- */
- protected abstract boolean tryCharset(String encoding) throws SAXException;
-
-}
diff --git a/parser/html/javasrc/Portability.java b/parser/html/javasrc/Portability.java
deleted file mode 100644
index 485684ea10..0000000000
--- a/parser/html/javasrc/Portability.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2008-2015 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:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-package nu.validator.htmlparser.impl;
-
-import nu.validator.htmlparser.annotation.Literal;
-import nu.validator.htmlparser.annotation.Local;
-import nu.validator.htmlparser.annotation.NoLength;
-import nu.validator.htmlparser.common.Interner;
-
-public final class Portability {
-
- // Allocating methods
-
- /**
- * Allocates a new local name object. In C++, the refcount must be set up in such a way that
- * calling releaseLocal on the return value balances the refcount set by this method.
- */
- public static @Local String newLocalNameFromBuffer(@NoLength char[] buf, int offset, int length, Interner interner) {
- return new String(buf, offset, length).intern();
- }
-
- public static String newStringFromBuffer(@NoLength char[] buf, int offset, int length
- // CPPONLY: , TreeBuilder treeBuilder
- ) {
- return new String(buf, offset, length);
- }
-
- public static String newEmptyString() {
- return "";
- }
-
- public static String newStringFromLiteral(@Literal String literal) {
- return literal;
- }
-
- public static String newStringFromString(String string) {
- return string;
- }
-
- // XXX get rid of this
- public static char[] newCharArrayFromLocal(@Local String local) {
- return local.toCharArray();
- }
-
- public static char[] newCharArrayFromString(String string) {
- return string.toCharArray();
- }
-
- public static @Local String newLocalFromLocal(@Local String local, Interner interner) {
- return local;
- }
-
- // Deallocation methods
-
- public static void releaseString(String str) {
- // No-op in Java
- }
-
- // Comparison methods
-
- public static boolean localEqualsBuffer(@Local String local, @NoLength char[] buf, int offset, int length) {
- if (local.length() != length) {
- return false;
- }
- for (int i = 0; i < length; i++) {
- if (local.charAt(i) != buf[offset + i]) {
- return false;
- }
- }
- return true;
- }
-
- public static boolean lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(@Literal String lowerCaseLiteral,
- String string) {
- if (string == null) {
- return false;
- }
- if (lowerCaseLiteral.length() > string.length()) {
- return false;
- }
- for (int i = 0; i < lowerCaseLiteral.length(); i++) {
- char c0 = lowerCaseLiteral.charAt(i);
- char c1 = string.charAt(i);
- if (c1 >= 'A' && c1 <= 'Z') {
- c1 += 0x20;
- }
- if (c0 != c1) {
- return false;
- }
- }
- return true;
- }
-
- public static boolean lowerCaseLiteralEqualsIgnoreAsciiCaseString(@Literal String lowerCaseLiteral,
- String string) {
- if (string == null) {
- return false;
- }
- if (lowerCaseLiteral.length() != string.length()) {
- return false;
- }
- for (int i = 0; i < lowerCaseLiteral.length(); i++) {
- char c0 = lowerCaseLiteral.charAt(i);
- char c1 = string.charAt(i);
- if (c1 >= 'A' && c1 <= 'Z') {
- c1 += 0x20;
- }
- if (c0 != c1) {
- return false;
- }
- }
- return true;
- }
-
- public static boolean literalEqualsString(@Literal String literal, String string) {
- return literal.equals(string);
- }
-
- public static boolean stringEqualsString(String one, String other) {
- return one.equals(other);
- }
-
- public static void delete(Object o) {
-
- }
-
- public static void deleteArray(Object o) {
-
- }
-}
diff --git a/parser/html/javasrc/README.txt b/parser/html/javasrc/README.txt
deleted file mode 100644
index 4555969cad..0000000000
--- a/parser/html/javasrc/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-The .java files in this directory were placed here by the Java-to-C++
-translator that lives in parser/html/java/translator. Together they represent
-a snapshot of the Java code that was translated to produce the corresponding
-.h and .cpp files in the parent directory. Changing these .java files is not
-worthwhile, as they will just be overwritten by the next translation. See
-parser/html/java/README.txt for information about performing the translation.
diff --git a/parser/html/javasrc/StackNode.java b/parser/html/javasrc/StackNode.java
deleted file mode 100644
index 9aeaba0be0..0000000000
--- a/parser/html/javasrc/StackNode.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright (c) 2007 Henri Sivonen
- * 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:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-package nu.validator.htmlparser.impl;
-
-import nu.validator.htmlparser.annotation.Inline;
-import nu.validator.htmlparser.annotation.Local;
-import nu.validator.htmlparser.annotation.NsUri;
-
-final class StackNodeStackNode
- * 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
- // [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
- // [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
- // [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
- // [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
- // [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
- // [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 | 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 | 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;
- }
-
- // [NOCPP[
- /**
- * @see java.lang.Object#toString()
- */
- @Override public @Local String toString() {
- return name;
- }
-
- // ]NOCPP]
-
- public void retain() {
- refcount++;
- }
-
- public void release() {
- refcount--;
- if (refcount == 0) {
- Portability.delete(this);
- }
- }
-}
diff --git a/parser/html/javasrc/StateSnapshot.java b/parser/html/javasrc/StateSnapshot.java
deleted file mode 100644
index ff89e04430..0000000000
--- a/parser/html/javasrc/StateSnapshot.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 2009-2010 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:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-package nu.validator.htmlparser.impl;
-
-import nu.validator.htmlparser.annotation.Auto;
-
-
-public class StateSnapshotLocator interface. This is not an
- * incidental implementation detail: Users of this class are encouraged to make
- * use of the Locator nature.
- *
- * By default, the tokenizer may report data that XML 1.0 bans. The tokenizer
- * can be configured to treat these conditions as fatal or to coerce the infoset
- * to something that XML 1.0 allows.
- *
- * @version $Id$
- * @author hsivonen
- */
-public class Tokenizer implements Locator {
-
- private static final int DATA_AND_RCDATA_MASK = ~1;
-
- public static final int DATA = 0;
-
- public static final int RCDATA = 1;
-
- public static final int SCRIPT_DATA = 2;
-
- public static final int RAWTEXT = 3;
-
- public static final int SCRIPT_DATA_ESCAPED = 4;
-
- public static final int ATTRIBUTE_VALUE_DOUBLE_QUOTED = 5;
-
- public static final int ATTRIBUTE_VALUE_SINGLE_QUOTED = 6;
-
- public static final int ATTRIBUTE_VALUE_UNQUOTED = 7;
-
- public static final int PLAINTEXT = 8;
-
- public static final int TAG_OPEN = 9;
-
- public static final int CLOSE_TAG_OPEN = 10;
-
- public static final int TAG_NAME = 11;
-
- public static final int BEFORE_ATTRIBUTE_NAME = 12;
-
- public static final int ATTRIBUTE_NAME = 13;
-
- public static final int AFTER_ATTRIBUTE_NAME = 14;
-
- public static final int BEFORE_ATTRIBUTE_VALUE = 15;
-
- public static final int AFTER_ATTRIBUTE_VALUE_QUOTED = 16;
-
- public static final int BOGUS_COMMENT = 17;
-
- public static final int MARKUP_DECLARATION_OPEN = 18;
-
- public static final int DOCTYPE = 19;
-
- public static final int BEFORE_DOCTYPE_NAME = 20;
-
- public static final int DOCTYPE_NAME = 21;
-
- public static final int AFTER_DOCTYPE_NAME = 22;
-
- public static final int BEFORE_DOCTYPE_PUBLIC_IDENTIFIER = 23;
-
- public static final int DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED = 24;
-
- public static final int DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED = 25;
-
- public static final int AFTER_DOCTYPE_PUBLIC_IDENTIFIER = 26;
-
- public static final int BEFORE_DOCTYPE_SYSTEM_IDENTIFIER = 27;
-
- public static final int DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED = 28;
-
- public static final int DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED = 29;
-
- public static final int AFTER_DOCTYPE_SYSTEM_IDENTIFIER = 30;
-
- public static final int BOGUS_DOCTYPE = 31;
-
- public static final int COMMENT_START = 32;
-
- public static final int COMMENT_START_DASH = 33;
-
- public static final int COMMENT = 34;
-
- public static final int COMMENT_END_DASH = 35;
-
- public static final int COMMENT_END = 36;
-
- public static final int COMMENT_END_BANG = 37;
-
- public static final int NON_DATA_END_TAG_NAME = 38;
-
- public static final int MARKUP_DECLARATION_HYPHEN = 39;
-
- public static final int MARKUP_DECLARATION_OCTYPE = 40;
-
- public static final int DOCTYPE_UBLIC = 41;
-
- public static final int DOCTYPE_YSTEM = 42;
-
- public static final int AFTER_DOCTYPE_PUBLIC_KEYWORD = 43;
-
- public static final int BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS = 44;
-
- public static final int AFTER_DOCTYPE_SYSTEM_KEYWORD = 45;
-
- public static final int CONSUME_CHARACTER_REFERENCE = 46;
-
- public static final int CONSUME_NCR = 47;
-
- public static final int CHARACTER_REFERENCE_TAIL = 48;
-
- public static final int HEX_NCR_LOOP = 49;
-
- public static final int DECIMAL_NRC_LOOP = 50;
-
- public static final int HANDLE_NCR_VALUE = 51;
-
- public static final int HANDLE_NCR_VALUE_RECONSUME = 52;
-
- public static final int CHARACTER_REFERENCE_HILO_LOOKUP = 53;
-
- public static final int SELF_CLOSING_START_TAG = 54;
-
- public static final int CDATA_START = 55;
-
- public static final int CDATA_SECTION = 56;
-
- public static final int CDATA_RSQB = 57;
-
- public static final int CDATA_RSQB_RSQB = 58;
-
- public static final int SCRIPT_DATA_LESS_THAN_SIGN = 59;
-
- public static final int SCRIPT_DATA_ESCAPE_START = 60;
-
- public static final int SCRIPT_DATA_ESCAPE_START_DASH = 61;
-
- public static final int SCRIPT_DATA_ESCAPED_DASH = 62;
-
- public static final int SCRIPT_DATA_ESCAPED_DASH_DASH = 63;
-
- public static final int BOGUS_COMMENT_HYPHEN = 64;
-
- public static final int RAWTEXT_RCDATA_LESS_THAN_SIGN = 65;
-
- public static final int SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN = 66;
-
- public static final int SCRIPT_DATA_DOUBLE_ESCAPE_START = 67;
-
- public static final int SCRIPT_DATA_DOUBLE_ESCAPED = 68;
-
- public static final int SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN = 69;
-
- public static final int SCRIPT_DATA_DOUBLE_ESCAPED_DASH = 70;
-
- public static final int SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH = 71;
-
- public static final int SCRIPT_DATA_DOUBLE_ESCAPE_END = 72;
-
- public static final int PROCESSING_INSTRUCTION = 73;
-
- public static final int PROCESSING_INSTRUCTION_QUESTION_MARK = 74;
-
- /**
- * Magic value for UTF-16 operations.
- */
- private static final int LEAD_OFFSET = (0xD800 - (0x10000 >> 10));
-
- /**
- * UTF-16 code unit array containing less than and greater than for emitting
- * those characters on certain parse errors.
- */
- private static final @NoLength char[] LT_GT = { '<', '>' };
-
- /**
- * UTF-16 code unit array containing less than and solidus for emitting
- * those characters on certain parse errors.
- */
- private static final @NoLength char[] LT_SOLIDUS = { '<', '/' };
-
- /**
- * UTF-16 code unit array containing ]] for emitting those characters on
- * state transitions.
- */
- private static final @NoLength char[] RSQB_RSQB = { ']', ']' };
-
- /**
- * Array version of U+FFFD.
- */
- private static final @NoLength char[] REPLACEMENT_CHARACTER = { '\uFFFD' };
-
- // [NOCPP[
-
- /**
- * Array version of space.
- */
- private static final @NoLength char[] SPACE = { ' ' };
-
- // ]NOCPP]
-
- /**
- * Array version of line feed.
- */
- private static final @NoLength char[] LF = { '\n' };
-
- /**
- * "CDATA[" as char[]
- */
- private static final @NoLength char[] CDATA_LSQB = { 'C', 'D', 'A', 'T',
- 'A', '[' };
-
- /**
- * "octype" as char[]
- */
- private static final @NoLength char[] OCTYPE = { 'o', 'c', 't', 'y', 'p',
- 'e' };
-
- /**
- * "ublic" as char[]
- */
- private static final @NoLength char[] UBLIC = { 'u', 'b', 'l', 'i', 'c' };
-
- /**
- * "ystem" as char[]
- */
- private static final @NoLength char[] YSTEM = { 'y', 's', 't', 'e', 'm' };
-
- private static final char[] TITLE_ARR = { 't', 'i', 't', 'l', 'e' };
-
- private static final char[] SCRIPT_ARR = { 's', 'c', 'r', 'i', 'p', 't' };
-
- private static final char[] STYLE_ARR = { 's', 't', 'y', 'l', 'e' };
-
- private static final char[] PLAINTEXT_ARR = { 'p', 'l', 'a', 'i', 'n', 't',
- 'e', 'x', 't' };
-
- private static final char[] XMP_ARR = { 'x', 'm', 'p' };
-
- private static final char[] TEXTAREA_ARR = { 't', 'e', 'x', 't', 'a', 'r',
- 'e', 'a' };
-
- private static final char[] IFRAME_ARR = { 'i', 'f', 'r', 'a', 'm', 'e' };
-
- private static final char[] NOEMBED_ARR = { 'n', 'o', 'e', 'm', 'b', 'e',
- 'd' };
-
- private static final char[] NOSCRIPT_ARR = { 'n', 'o', 's', 'c', 'r', 'i',
- 'p', 't' };
-
- private static final char[] NOFRAMES_ARR = { 'n', 'o', 'f', 'r', 'a', 'm',
- 'e', 's' };
-
- /**
- * The token handler.
- */
- protected final TokenHandler tokenHandler;
-
- protected EncodingDeclarationHandler encodingDeclarationHandler;
-
- // [NOCPP[
-
- /**
- * The error handler.
- */
- protected ErrorHandler errorHandler;
-
- // ]NOCPP]
-
- /**
- * Whether the previous char read was CR.
- */
- protected boolean lastCR;
-
- protected int stateSave;
-
- private int returnStateSave;
-
- protected int index;
-
- private boolean forceQuirks;
-
- private char additional;
-
- private int entCol;
-
- private int firstCharKey;
-
- private int lo;
-
- private int hi;
-
- private int candidate;
-
- private int charRefBufMark;
-
- protected int value;
-
- private boolean seenDigits;
-
- protected int cstart;
-
- /**
- * The SAX public id for the resource being tokenized. (Only passed to back
- * as part of locator data.)
- */
- private String publicId;
-
- /**
- * The SAX system id for the resource being tokenized. (Only passed to back
- * as part of locator data.)
- */
- private String systemId;
-
- /**
- * Buffer for bufferable things other than those that fit the description
- * of charRefBuf.
- */
- private @Auto char[] strBuf;
-
- /**
- * Number of significant chars in strBuf.
- */
- private int strBufLen;
-
- /**
- * Buffer for characters that might form a character reference but may
- * end up not forming one.
- */
- private final @Auto char[] charRefBuf;
-
- /**
- * Number of significant chars in charRefBuf.
- */
- private int charRefBufLen;
-
- /**
- * Buffer for expanding NCRs falling into the Basic Multilingual Plane.
- */
- private final @Auto char[] bmpChar;
-
- /**
- * Buffer for expanding astral NCRs.
- */
- private final @Auto char[] astralChar;
-
- /**
- * The element whose end tag closes the current CDATA or RCDATA element.
- */
- protected ElementName endTagExpectation = null;
-
- private char[] endTagExpectationAsArray; // not @Auto!
-
- /**
- * true if tokenizing an end tag
- */
- protected boolean endTag;
-
- /**
- * The current tag token name.
- */
- private ElementName tagName = null;
-
- /**
- * The current attribute name.
- */
- protected AttributeName attributeName = null;
-
- // [NOCPP[
-
- /**
- * Whether comment tokens are emitted.
- */
- private boolean wantsComments = false;
-
- /**
- * true when HTML4-specific additional errors are requested.
- */
- protected boolean html4;
-
- /**
- * Whether the stream is past the first 1024 bytes.
- */
- private boolean metaBoundaryPassed;
-
- // ]NOCPP]
-
- /**
- * The name of the current doctype token.
- */
- private @Local String doctypeName;
-
- /**
- * The public id of the current doctype token.
- */
- private String publicIdentifier;
-
- /**
- * The system id of the current doctype token.
- */
- private String systemIdentifier;
-
- /**
- * The attribute holder.
- */
- private HtmlAttributes attributes;
-
- // [NOCPP[
-
- /**
- * The policy for vertical tab and form feed.
- */
- private XmlViolationPolicy contentSpacePolicy = XmlViolationPolicy.ALTER_INFOSET;
-
- /**
- * The policy for comments.
- */
- private XmlViolationPolicy commentPolicy = XmlViolationPolicy.ALTER_INFOSET;
-
- private XmlViolationPolicy xmlnsPolicy = XmlViolationPolicy.ALTER_INFOSET;
-
- private XmlViolationPolicy namePolicy = XmlViolationPolicy.ALTER_INFOSET;
-
- private boolean html4ModeCompatibleWithXhtml1Schemata;
-
- private int mappingLangToXmlLang;
-
- // ]NOCPP]
-
- private final boolean newAttributesEachTime;
-
- private boolean shouldSuspend;
-
- protected boolean confident;
-
- private int line;
-
- /*
- * The line number of the current attribute. First set to the line of the
- * attribute name and if there is a value, set to the line the value
- * started on.
- */
- // CPPONLY: private int attributeLine;
-
- private Interner interner;
-
- // CPPONLY: private boolean viewingXmlSource;
-
- // [NOCPP[
-
- protected LocatorImpl ampersandLocation;
-
- public Tokenizer(TokenHandler tokenHandler, boolean newAttributesEachTime) {
- this.tokenHandler = tokenHandler;
- this.encodingDeclarationHandler = null;
- this.newAttributesEachTime = newAttributesEachTime;
- // ∳ is the longest valid char ref and
- // the semicolon never gets appended to the buffer.
- this.charRefBuf = new char[32];
- this.bmpChar = new char[1];
- this.astralChar = new char[2];
- this.tagName = null;
- this.attributeName = null;
- this.doctypeName = null;
- this.publicIdentifier = null;
- this.systemIdentifier = null;
- this.attributes = null;
- }
-
- // ]NOCPP]
-
- /**
- * The constructor.
- *
- * @param tokenHandler
- * the handler for receiving tokens
- */
- public Tokenizer(TokenHandler tokenHandler
- // CPPONLY: , boolean viewingXmlSource
- ) {
- this.tokenHandler = tokenHandler;
- this.encodingDeclarationHandler = null;
- // [NOCPP[
- this.newAttributesEachTime = false;
- // ]NOCPP]
- // ∳ is the longest valid char ref and
- // the semicolon never gets appended to the buffer.
- this.charRefBuf = new char[32];
- this.bmpChar = new char[1];
- this.astralChar = new char[2];
- this.tagName = null;
- this.attributeName = null;
- this.doctypeName = null;
- this.publicIdentifier = null;
- this.systemIdentifier = null;
- // [NOCPP[
- this.attributes = null;
- // ]NOCPP]
- // CPPONLY: this.attributes = tokenHandler.HasBuilder() ? new HtmlAttributes(mappingLangToXmlLang) : null;
- // CPPONLY: this.newAttributesEachTime = !tokenHandler.HasBuilder();
- // CPPONLY: this.viewingXmlSource = viewingXmlSource;
- }
-
- public void setInterner(Interner interner) {
- this.interner = interner;
- }
-
- public void initLocation(String newPublicId, String newSystemId) {
- this.systemId = newSystemId;
- this.publicId = newPublicId;
-
- }
-
- // CPPONLY: boolean isViewingXmlSource() {
- // CPPONLY: return viewingXmlSource;
- // CPPONLY: }
-
- // [NOCPP[
-
- /**
- * Returns the mappingLangToXmlLang.
- *
- * @return the mappingLangToXmlLang
- */
- public boolean isMappingLangToXmlLang() {
- return mappingLangToXmlLang == AttributeName.HTML_LANG;
- }
-
- /**
- * Sets the mappingLangToXmlLang.
- *
- * @param mappingLangToXmlLang
- * the mappingLangToXmlLang to set
- */
- public void setMappingLangToXmlLang(boolean mappingLangToXmlLang) {
- this.mappingLangToXmlLang = mappingLangToXmlLang ? AttributeName.HTML_LANG
- : AttributeName.HTML;
- }
-
- /**
- * Sets the error handler.
- *
- * @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler)
- */
- public void setErrorHandler(ErrorHandler eh) {
- this.errorHandler = eh;
- }
-
- public ErrorHandler getErrorHandler() {
- return this.errorHandler;
- }
-
- /**
- * Sets the commentPolicy.
- *
- * @param commentPolicy
- * the commentPolicy to set
- */
- public void setCommentPolicy(XmlViolationPolicy commentPolicy) {
- this.commentPolicy = commentPolicy;
- }
-
- /**
- * Sets the contentNonXmlCharPolicy.
- *
- * @param contentNonXmlCharPolicy
- * the contentNonXmlCharPolicy to set
- */
- public void setContentNonXmlCharPolicy(
- XmlViolationPolicy contentNonXmlCharPolicy) {
- if (contentNonXmlCharPolicy != XmlViolationPolicy.ALLOW) {
- throw new IllegalArgumentException(
- "Must use ErrorReportingTokenizer to set contentNonXmlCharPolicy to non-ALLOW.");
- }
- }
-
- /**
- * Sets the contentSpacePolicy.
- *
- * @param contentSpacePolicy
- * the contentSpacePolicy to set
- */
- public void setContentSpacePolicy(XmlViolationPolicy contentSpacePolicy) {
- this.contentSpacePolicy = contentSpacePolicy;
- }
-
- /**
- * Sets the xmlnsPolicy.
- *
- * @param xmlnsPolicy
- * the xmlnsPolicy to set
- */
- public void setXmlnsPolicy(XmlViolationPolicy xmlnsPolicy) {
- if (xmlnsPolicy == XmlViolationPolicy.FATAL) {
- throw new IllegalArgumentException("Can't use FATAL here.");
- }
- this.xmlnsPolicy = xmlnsPolicy;
- }
-
- public void setNamePolicy(XmlViolationPolicy namePolicy) {
- this.namePolicy = namePolicy;
- }
-
- /**
- * Sets the html4ModeCompatibleWithXhtml1Schemata.
- *
- * @param html4ModeCompatibleWithXhtml1Schemata
- * the html4ModeCompatibleWithXhtml1Schemata to set
- */
- public void setHtml4ModeCompatibleWithXhtml1Schemata(
- boolean html4ModeCompatibleWithXhtml1Schemata) {
- this.html4ModeCompatibleWithXhtml1Schemata = html4ModeCompatibleWithXhtml1Schemata;
- }
-
- // ]NOCPP]
-
- // For the token handler to call
- /**
- * Sets the tokenizer state and the associated element name. This should
- * only ever used to put the tokenizer into one of the states that have
- * a special end tag expectation.
- *
- * @param specialTokenizerState
- * the tokenizer state to set
- */
- public void setState(int specialTokenizerState) {
- this.stateSave = specialTokenizerState;
- this.endTagExpectation = null;
- this.endTagExpectationAsArray = null;
- }
-
- // [NOCPP[
-
- /**
- * Sets the tokenizer state and the associated element name. This should
- * only ever used to put the tokenizer into one of the states that have
- * a special end tag expectation. For use from the tokenizer test harness.
- *
- * @param specialTokenizerState
- * the tokenizer state to set
- * @param endTagExpectation
- * the expected end tag for transitioning back to normal
- */
- public void setStateAndEndTagExpectation(int specialTokenizerState,
- @Local String endTagExpectation) {
- this.stateSave = specialTokenizerState;
- if (specialTokenizerState == Tokenizer.DATA) {
- return;
- }
- @Auto char[] asArray = Portability.newCharArrayFromLocal(endTagExpectation);
- this.endTagExpectation = ElementName.elementNameByBuffer(asArray, 0,
- asArray.length, interner);
- endTagExpectationToArray();
- }
-
- // ]NOCPP]
-
- /**
- * Sets the tokenizer state and the associated element name. This should
- * only ever used to put the tokenizer into one of the states that have
- * a special end tag expectation.
- *
- * @param specialTokenizerState
- * the tokenizer state to set
- * @param endTagExpectation
- * the expected end tag for transitioning back to normal
- */
- public void setStateAndEndTagExpectation(int specialTokenizerState,
- ElementName endTagExpectation) {
- this.stateSave = specialTokenizerState;
- this.endTagExpectation = endTagExpectation;
- endTagExpectationToArray();
- }
-
- private void endTagExpectationToArray() {
- switch (endTagExpectation.getGroup()) {
- case TreeBuilder.TITLE:
- endTagExpectationAsArray = TITLE_ARR;
- return;
- case TreeBuilder.SCRIPT:
- endTagExpectationAsArray = SCRIPT_ARR;
- return;
- case TreeBuilder.STYLE:
- endTagExpectationAsArray = STYLE_ARR;
- return;
- case TreeBuilder.PLAINTEXT:
- endTagExpectationAsArray = PLAINTEXT_ARR;
- return;
- case TreeBuilder.XMP:
- endTagExpectationAsArray = XMP_ARR;
- return;
- case TreeBuilder.TEXTAREA:
- endTagExpectationAsArray = TEXTAREA_ARR;
- return;
- case TreeBuilder.IFRAME:
- endTagExpectationAsArray = IFRAME_ARR;
- return;
- case TreeBuilder.NOEMBED:
- endTagExpectationAsArray = NOEMBED_ARR;
- return;
- case TreeBuilder.NOSCRIPT:
- endTagExpectationAsArray = NOSCRIPT_ARR;
- return;
- case TreeBuilder.NOFRAMES:
- endTagExpectationAsArray = NOFRAMES_ARR;
- return;
- default:
- assert false: "Bad end tag expectation.";
- return;
- }
- }
-
- /**
- * For C++ use only.
- */
- public void setLineNumber(int line) {
- // CPPONLY: this.attributeLine = line; // XXX is this needed?
- this.line = line;
- }
-
- // start Locator impl
-
- /**
- * @see org.xml.sax.Locator#getLineNumber()
- */
- @Inline public int getLineNumber() {
- return line;
- }
-
- // [NOCPP[
-
- /**
- * @see org.xml.sax.Locator#getColumnNumber()
- */
- @Inline public int getColumnNumber() {
- return -1;
- }
-
- /**
- * @see org.xml.sax.Locator#getPublicId()
- */
- public String getPublicId() {
- return publicId;
- }
-
- /**
- * @see org.xml.sax.Locator#getSystemId()
- */
- public String getSystemId() {
- return systemId;
- }
-
- // end Locator impl
-
- // end public API
-
- public void notifyAboutMetaBoundary() {
- metaBoundaryPassed = true;
- }
-
- void turnOnAdditionalHtml4Errors() {
- html4 = true;
- }
-
- // ]NOCPP]
-
- HtmlAttributes emptyAttributes() {
- // [NOCPP[
- if (newAttributesEachTime) {
- return new HtmlAttributes(mappingLangToXmlLang);
- } else {
- // ]NOCPP]
- return HtmlAttributes.EMPTY_ATTRIBUTES;
- // [NOCPP[
- }
- // ]NOCPP]
- }
-
- @Inline private void appendCharRefBuf(char c) {
- // CPPONLY: assert charRefBufLen < charRefBuf.length:
- // CPPONLY: "RELEASE: Attempted to overrun charRefBuf!";
- charRefBuf[charRefBufLen++] = c;
- }
-
- private void emitOrAppendCharRefBuf(int returnState) throws SAXException {
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- appendCharRefBufToStrBuf();
- } else {
- if (charRefBufLen > 0) {
- tokenHandler.characters(charRefBuf, 0, charRefBufLen);
- charRefBufLen = 0;
- }
- }
- }
-
- @Inline private void clearStrBufAfterUse() {
- strBufLen = 0;
- }
-
- @Inline private void clearStrBufBeforeUse() {
- assert strBufLen == 0: "strBufLen not reset after previous use!";
- strBufLen = 0; // no-op in the absence of bugs
- }
-
- @Inline private void clearStrBufAfterOneHyphen() {
- assert strBufLen == 1: "strBufLen length not one!";
- assert strBuf[0] == '-': "strBuf does not start with a hyphen!";
- strBufLen = 0;
- }
-
- /**
- * Appends to the buffer.
- *
- * @param c
- * the UTF-16 code unit to append
- */
- @Inline private void appendStrBuf(char c) {
- // CPPONLY: assert strBufLen < strBuf.length: "Previous buffer length insufficient.";
- // CPPONLY: if (strBufLen == strBuf.length) {
- // CPPONLY: if (!EnsureBufferSpace(1)) {
- // CPPONLY: assert false: "RELEASE: Unable to recover from buffer reallocation failure";
- // CPPONLY: } // TODO: Add telemetry when outer if fires but inner does not
- // CPPONLY: }
- strBuf[strBufLen++] = c;
- }
-
- /**
- * The buffer as a String. Currently only used for error reporting.
- *
- * char read from buf.
- */
- int pos = start - 1;
-
- /**
- * The index of the first char in buf that is
- * part of a coalesced run of character tokens or
- * Integer.MAX_VALUE if there is not a current run being
- * coalesced.
- */
- switch (state) {
- case DATA:
- case RCDATA:
- case SCRIPT_DATA:
- case PLAINTEXT:
- case RAWTEXT:
- case CDATA_SECTION:
- case SCRIPT_DATA_ESCAPED:
- case SCRIPT_DATA_ESCAPE_START:
- case SCRIPT_DATA_ESCAPE_START_DASH:
- case SCRIPT_DATA_ESCAPED_DASH:
- case SCRIPT_DATA_ESCAPED_DASH_DASH:
- case SCRIPT_DATA_DOUBLE_ESCAPE_START:
- case SCRIPT_DATA_DOUBLE_ESCAPED:
- case SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:
- case SCRIPT_DATA_DOUBLE_ESCAPED_DASH:
- case SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:
- case SCRIPT_DATA_DOUBLE_ESCAPE_END:
- cstart = start;
- break;
- default:
- cstart = Integer.MAX_VALUE;
- break;
- }
-
- /**
- * The number of chars in buf that have
- * meaning. (The rest of the array is garbage and should not be
- * examined.)
- */
- // CPPONLY: if (mViewSource) {
- // CPPONLY: mViewSource.SetBuffer(buffer);
- // CPPONLY: pos = stateLoop(state, c, pos, buffer.getBuffer(), false, returnState, buffer.getEnd());
- // CPPONLY: mViewSource.DropBuffer((pos == buffer.getEnd()) ? pos : pos + 1);
- // CPPONLY: } else {
- // CPPONLY: pos = stateLoop(state, c, pos, buffer.getBuffer(), false, returnState, buffer.getEnd());
- // CPPONLY: }
- // [NOCPP[
- pos = stateLoop(state, c, pos, buffer.getBuffer(), false, returnState,
- end);
- // ]NOCPP]
- if (pos == end) {
- // exiting due to end of buffer
- buffer.setStart(pos);
- } else {
- buffer.setStart(pos + 1);
- }
- return lastCR;
- }
-
- // [NOCPP[
- private void ensureBufferSpace(int inputLength) throws SAXException {
- // Add 2 to account for emissions of LT_GT, LT_SOLIDUS and RSQB_RSQB.
- // Adding to the general worst case instead of only the
- // TreeBuilder-exposed worst case to avoid re-introducing a bug when
- // unifying the tokenizer and tree builder buffers in the future.
- int worstCase = strBufLen + inputLength + charRefBufLen + 2;
- tokenHandler.ensureBufferSpace(worstCase);
- if (commentPolicy == XmlViolationPolicy.ALTER_INFOSET) {
- // When altering infoset, if the comment contents are consecutive
- // hyphens, each hyphen generates a space, too. These buffer
- // contents never get emitted as characters() to the tokenHandler,
- // which is why this calculation happens after the call to
- // ensureBufferSpace on tokenHandler.
- worstCase *= 2;
- }
- if (strBuf == null) {
- // Add an arbitrary small value to avoid immediate reallocation
- // once there are a few characters in the buffer.
- strBuf = new char[worstCase + 128];
- } else if (worstCase > strBuf.length) {
- // HotSpot reportedly allocates memory with 8-byte accuracy, so
- // there's no point in trying to do math here to avoid slop.
- // Maybe we should add some small constant to worstCase here
- // but not doing that without profiling. In C++ with jemalloc,
- // the corresponding method should do math to round up here
- // to avoid slop.
- char[] newBuf = new char[worstCase];
- System.arraycopy(strBuf, 0, newBuf, 0, strBufLen);
- strBuf = newBuf;
- }
- }
- // ]NOCPP]
-
- @SuppressWarnings("unused") private int stateLoop(int state, char c,
- int pos, @NoLength char[] buf, boolean reconsume, int returnState,
- int endPos) throws SAXException {
- /*
- * Idioms used in this code:
- *
- *
- * Consuming the next input character
- *
- * To consume the next input character, the code does this: if (++pos ==
- * endPos) { break stateloop; } c = checkChar(buf, pos);
- *
- *
- * Staying in a state
- *
- * When there's a state that the tokenizer may stay in over multiple
- * input characters, the state has a wrapper |for(;;)| loop and staying
- * in the state continues the loop.
- *
- *
- * Switching to another state
- *
- * To switch to another state, the code sets the state variable to the
- * magic number of the new state. Then it either continues stateloop or
- * breaks out of the state's own wrapper loop if the target state is
- * right after the current state in source order. (This is a partial
- * workaround for Java's lack of goto.)
- *
- *
- * Reconsume support
- *
- * The spec sometimes says that an input character is reconsumed in
- * another state. If a state can ever be entered so that an input
- * character can be reconsumed in it, the state's code starts with an
- * |if (reconsume)| that sets reconsume to false and skips over the
- * normal code for consuming a new character.
- *
- * To reconsume the current character in another state, the code sets
- * |reconsume| to true and then switches to the other state.
- *
- *
- * Emitting character tokens
- *
- * This method emits character tokens lazily. Whenever a new range of
- * character tokens starts, the field cstart must be set to the start
- * index of the range. The flushChars() method must be called at the end
- * of a range to flush it.
- *
- *
- * U+0000 handling
- *
- * The various states have to handle the replacement of U+0000 with
- * U+FFFD. However, if U+0000 would be reconsumed in another state, the
- * replacement doesn't need to happen, because it's handled by the
- * reconsuming state.
- *
- *
- * LF handling
- *
- * Every state needs to increment the line number upon LF unless the LF
- * gets reconsumed by another state which increments the line number.
- *
- *
- * CR handling
- *
- * Every state needs to handle CR unless the CR gets reconsumed and is
- * handled by the reconsuming state. The CR needs to be handled as if it
- * were and LF, the lastCR field must be set to true and then this
- * method must return. The IO driver will then swallow the next
- * character if it is an LF to coalesce CRLF.
- */
- stateloop: for (;;) {
- switch (state) {
- case DATA:
- dataloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- switch (c) {
- case '&':
- /*
- * U+0026 AMPERSAND (&) Switch to the character
- * reference in data state.
- */
- flushChars(buf, pos);
- assert charRefBufLen == 0: "charRefBufLen not reset after previous use!";
- appendCharRefBuf(c);
- setAdditionalAndRememberAmpersandLocation('\u0000');
- returnState = state;
- state = transition(state, Tokenizer.CONSUME_CHARACTER_REFERENCE, reconsume, pos);
- continue stateloop;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the tag
- * open state.
- */
- flushChars(buf, pos);
-
- state = transition(state, Tokenizer.TAG_OPEN, reconsume, pos);
- break dataloop; // FALL THROUGH continue
- // stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the input character as a
- * character token.
- *
- * Stay in the data state.
- */
- continue;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case TAG_OPEN:
- tagopenloop: for (;;) {
- /*
- * The behavior of this state depends on the content
- * model flag.
- */
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * If the content model flag is set to the PCDATA state
- * Consume the next input character:
- */
- if (c >= 'A' && c <= 'Z') {
- /*
- * U+0041 LATIN CAPITAL LETTER A through to U+005A
- * LATIN CAPITAL LETTER Z Create a new start tag
- * token,
- */
- endTag = false;
- /*
- * set its tag name to the lowercase version of the
- * input character (add 0x0020 to the character's
- * code point),
- */
- clearStrBufBeforeUse();
- appendStrBuf((char) (c + 0x20));
- /* then switch to the tag name state. */
- state = transition(state, Tokenizer.TAG_NAME, reconsume, pos);
- /*
- * (Don't emit the token yet; further details will
- * be filled in before it is emitted.)
- */
- break tagopenloop;
- // continue stateloop;
- } else if (c >= 'a' && c <= 'z') {
- /*
- * U+0061 LATIN SMALL LETTER A through to U+007A
- * LATIN SMALL LETTER Z Create a new start tag
- * token,
- */
- endTag = false;
- /*
- * set its tag name to the input character,
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- /* then switch to the tag name state. */
- state = transition(state, Tokenizer.TAG_NAME, reconsume, pos);
- /*
- * (Don't emit the token yet; further details will
- * be filled in before it is emitted.)
- */
- break tagopenloop;
- // continue stateloop;
- }
- switch (c) {
- case '!':
- /*
- * U+0021 EXCLAMATION MARK (!) Switch to the
- * markup declaration open state.
- */
- state = transition(state, Tokenizer.MARKUP_DECLARATION_OPEN, reconsume, pos);
- continue stateloop;
- case '/':
- /*
- * U+002F SOLIDUS (/) Switch to the close tag
- * open state.
- */
- state = transition(state, Tokenizer.CLOSE_TAG_OPEN, reconsume, pos);
- continue stateloop;
- case '?':
- // CPPONLY: if (viewingXmlSource) {
- // CPPONLY: state = transition(state,
- // CPPONLY: Tokenizer.PROCESSING_INSTRUCTION,
- // CPPONLY: reconsume,
- // CPPONLY: pos);
- // CPPONLY: continue stateloop;
- // CPPONLY: }
- /*
- * U+003F QUESTION MARK (?) Parse error.
- */
- errProcessingInstruction();
- /*
- * Switch to the bogus comment state.
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Parse error.
- */
- errLtGt();
- /*
- * Emit a U+003C LESS-THAN SIGN character token
- * and a U+003E GREATER-THAN SIGN character
- * token.
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 2);
- /* Switch to the data state. */
- cstart = pos + 1;
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- /*
- * Anything else Parse error.
- */
- errBadCharAfterLt(c);
- /*
- * Emit a U+003C LESS-THAN SIGN character token
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- /*
- * and reconsume the current input character in
- * the data state.
- */
- cstart = pos;
- reconsume = true;
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- }
- }
- // FALL THROUGH DON'T REORDER
- case TAG_NAME:
- tagnameloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- strBufToElementNameString();
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the before attribute name state.
- */
- strBufToElementNameString();
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- break tagnameloop;
- // continue stateloop;
- case '/':
- /*
- * U+002F SOLIDUS (/) Switch to the self-closing
- * start tag state.
- */
- strBufToElementNameString();
- state = transition(state, Tokenizer.SELF_CLOSING_START_TAG, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * tag token.
- */
- strBufToElementNameString();
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- if (c >= 'A' && c <= 'Z') {
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Append the
- * lowercase version of the current input
- * character (add 0x0020 to the character's
- * code point) to the current tag token's
- * tag name.
- */
- c += 0x20;
- }
- /*
- * Anything else Append the current input
- * character to the current tag token's tag
- * name.
- */
- appendStrBuf(c);
- /*
- * Stay in the tag name state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_ATTRIBUTE_NAME:
- beforeattributenameloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the before attribute name state.
- */
- continue;
- case '/':
- /*
- * U+002F SOLIDUS (/) Switch to the self-closing
- * start tag state.
- */
- state = transition(state, Tokenizer.SELF_CLOSING_START_TAG, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * tag token.
- */
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- case '\"':
- case '\'':
- case '<':
- case '=':
- /*
- * U+0022 QUOTATION MARK (") U+0027 APOSTROPHE
- * (') U+003C LESS-THAN SIGN (<) U+003D EQUALS
- * SIGN (=) Parse error.
- */
- errBadCharBeforeAttributeNameOrNull(c);
- /*
- * Treat it as per the "anything else" entry
- * below.
- */
- default:
- /*
- * Anything else Start a new attribute in the
- * current tag token.
- */
- if (c >= 'A' && c <= 'Z') {
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Set that
- * attribute's name to the lowercase version
- * of the current input character (add
- * 0x0020 to the character's code point)
- */
- c += 0x20;
- }
- // CPPONLY: attributeLine = line;
- /*
- * Set that attribute's name to the current
- * input character,
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- /*
- * and its value to the empty string.
- */
- // Will do later.
- /*
- * Switch to the attribute name state.
- */
- state = transition(state, Tokenizer.ATTRIBUTE_NAME, reconsume, pos);
- break beforeattributenameloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case ATTRIBUTE_NAME:
- attributenameloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- attributeNameComplete();
- state = transition(state, Tokenizer.AFTER_ATTRIBUTE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the after attribute name state.
- */
- attributeNameComplete();
- state = transition(state, Tokenizer.AFTER_ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- case '/':
- /*
- * U+002F SOLIDUS (/) Switch to the self-closing
- * start tag state.
- */
- attributeNameComplete();
- addAttributeWithoutValue();
- state = transition(state, Tokenizer.SELF_CLOSING_START_TAG, reconsume, pos);
- continue stateloop;
- case '=':
- /*
- * U+003D EQUALS SIGN (=) Switch to the before
- * attribute value state.
- */
- attributeNameComplete();
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_VALUE, reconsume, pos);
- break attributenameloop;
- // continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * tag token.
- */
- attributeNameComplete();
- addAttributeWithoutValue();
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- case '\"':
- case '\'':
- case '<':
- /*
- * U+0022 QUOTATION MARK (") U+0027 APOSTROPHE
- * (') U+003C LESS-THAN SIGN (<) Parse error.
- */
- errQuoteOrLtInAttributeNameOrNull(c);
- /*
- * Treat it as per the "anything else" entry
- * below.
- */
- default:
- if (c >= 'A' && c <= 'Z') {
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Append the
- * lowercase version of the current input
- * character (add 0x0020 to the character's
- * code point) to the current attribute's
- * name.
- */
- c += 0x20;
- }
- /*
- * Anything else Append the current input
- * character to the current attribute's name.
- */
- appendStrBuf(c);
- /*
- * Stay in the attribute name state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_ATTRIBUTE_VALUE:
- beforeattributevalueloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the before attribute value state.
- */
- continue;
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Switch to the
- * attribute value (double-quoted) state.
- */
- // CPPONLY: attributeLine = line;
- clearStrBufBeforeUse();
- state = transition(state, Tokenizer.ATTRIBUTE_VALUE_DOUBLE_QUOTED, reconsume, pos);
- break beforeattributevalueloop;
- // continue stateloop;
- case '&':
- /*
- * U+0026 AMPERSAND (&) Switch to the attribute
- * value (unquoted) state and reconsume this
- * input character.
- */
- // CPPONLY: attributeLine = line;
- clearStrBufBeforeUse();
- reconsume = true;
- state = transition(state, Tokenizer.ATTRIBUTE_VALUE_UNQUOTED, reconsume, pos);
- noteUnquotedAttributeValue();
- continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Switch to the attribute
- * value (single-quoted) state.
- */
- // CPPONLY: attributeLine = line;
- clearStrBufBeforeUse();
- state = transition(state, Tokenizer.ATTRIBUTE_VALUE_SINGLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Parse error.
- */
- errAttributeValueMissing();
- /*
- * Emit the current tag token.
- */
- addAttributeWithoutValue();
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- case '<':
- case '=':
- case '`':
- /*
- * U+003C LESS-THAN SIGN (<) U+003D EQUALS SIGN
- * (=) U+0060 GRAVE ACCENT (`)
- */
- errLtOrEqualsOrGraveInUnquotedAttributeOrNull(c);
- /*
- * Treat it as per the "anything else" entry
- * below.
- */
- default:
- // [NOCPP[
- errHtml4NonNameInUnquotedAttribute(c);
- // ]NOCPP]
- /*
- * Anything else Append the current input
- * character to the current attribute's value.
- */
- // CPPONLY: attributeLine = line;
- clearStrBufBeforeUse();
- appendStrBuf(c);
- /*
- * Switch to the attribute value (unquoted)
- * state.
- */
-
- state = transition(state, Tokenizer.ATTRIBUTE_VALUE_UNQUOTED, reconsume, pos);
- noteUnquotedAttributeValue();
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case ATTRIBUTE_VALUE_DOUBLE_QUOTED:
- attributevaluedoublequotedloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Switch to the after
- * attribute value (quoted) state.
- */
- addAttributeWithValue();
-
- state = transition(state, Tokenizer.AFTER_ATTRIBUTE_VALUE_QUOTED, reconsume, pos);
- break attributevaluedoublequotedloop;
- // continue stateloop;
- case '&':
- /*
- * U+0026 AMPERSAND (&) Switch to the character
- * reference in attribute value state, with the
- * additional allowed character being U+0022
- * QUOTATION MARK (").
- */
- assert charRefBufLen == 0: "charRefBufLen not reset after previous use!";
- appendCharRefBuf(c);
- setAdditionalAndRememberAmpersandLocation('\"');
- returnState = state;
- state = transition(state, Tokenizer.CONSUME_CHARACTER_REFERENCE, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the current input
- * character to the current attribute's value.
- */
- appendStrBuf(c);
- /*
- * Stay in the attribute value (double-quoted)
- * state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_ATTRIBUTE_VALUE_QUOTED:
- afterattributevaluequotedloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the before attribute name state.
- */
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- case '/':
- /*
- * U+002F SOLIDUS (/) Switch to the self-closing
- * start tag state.
- */
- state = transition(state, Tokenizer.SELF_CLOSING_START_TAG, reconsume, pos);
- break afterattributevaluequotedloop;
- // continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * tag token.
- */
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- default:
- /*
- * Anything else Parse error.
- */
- errNoSpaceBetweenAttributes();
- /*
- * Reconsume the character in the before
- * attribute name state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case SELF_CLOSING_START_TAG:
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Set the self-closing
- * flag of the current tag token. Emit the current
- * tag token.
- */
- // [NOCPP[
- errHtml4XmlVoidSyntax();
- // ]NOCPP]
- state = transition(state, emitCurrentTagToken(true, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- default:
- /* Anything else Parse error. */
- errSlashNotFollowedByGt();
- /*
- * Reconsume the character in the before attribute
- * name state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- }
- // XXX reorder point
- case ATTRIBUTE_VALUE_UNQUOTED:
- for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- addAttributeWithValue();
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the before attribute name state.
- */
- addAttributeWithValue();
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- case '&':
- /*
- * U+0026 AMPERSAND (&) Switch to the character
- * reference in attribute value state, with the
- * additional allowed character being U+003E
- * GREATER-THAN SIGN (>)
- */
- assert charRefBufLen == 0: "charRefBufLen not reset after previous use!";
- appendCharRefBuf(c);
- setAdditionalAndRememberAmpersandLocation('>');
- returnState = state;
- state = transition(state, Tokenizer.CONSUME_CHARACTER_REFERENCE, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * tag token.
- */
- addAttributeWithValue();
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- case '<':
- case '\"':
- case '\'':
- case '=':
- case '`':
- /*
- * U+0022 QUOTATION MARK (") U+0027 APOSTROPHE
- * (') U+003C LESS-THAN SIGN (<) U+003D EQUALS
- * SIGN (=) U+0060 GRAVE ACCENT (`) Parse error.
- */
- errUnquotedAttributeValOrNull(c);
- /*
- * Treat it as per the "anything else" entry
- * below.
- */
- // fall through
- default:
- // [NOCPP]
- errHtml4NonNameInUnquotedAttribute(c);
- // ]NOCPP]
- /*
- * Anything else Append the current input
- * character to the current attribute's value.
- */
- appendStrBuf(c);
- /*
- * Stay in the attribute value (unquoted) state.
- */
- continue;
- }
- }
- // XXX reorder point
- case AFTER_ATTRIBUTE_NAME:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the after attribute name state.
- */
- continue;
- case '/':
- /*
- * U+002F SOLIDUS (/) Switch to the self-closing
- * start tag state.
- */
- addAttributeWithoutValue();
- state = transition(state, Tokenizer.SELF_CLOSING_START_TAG, reconsume, pos);
- continue stateloop;
- case '=':
- /*
- * U+003D EQUALS SIGN (=) Switch to the before
- * attribute value state.
- */
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_VALUE, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * tag token.
- */
- addAttributeWithoutValue();
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- /*
- * Switch to the data state.
- */
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- case '\"':
- case '\'':
- case '<':
- errQuoteOrLtInAttributeNameOrNull(c);
- /*
- * Treat it as per the "anything else" entry
- * below.
- */
- default:
- addAttributeWithoutValue();
- /*
- * Anything else Start a new attribute in the
- * current tag token.
- */
- if (c >= 'A' && c <= 'Z') {
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Set that
- * attribute's name to the lowercase version
- * of the current input character (add
- * 0x0020 to the character's code point)
- */
- c += 0x20;
- }
- /*
- * Set that attribute's name to the current
- * input character,
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- /*
- * and its value to the empty string.
- */
- // Will do later.
- /*
- * Switch to the attribute name state.
- */
- state = transition(state, Tokenizer.ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case MARKUP_DECLARATION_OPEN:
- markupdeclarationopenloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * If the next two characters are both U+002D
- * HYPHEN-MINUS characters (-), consume those two
- * characters, create a comment token whose data is the
- * empty string, and switch to the comment start state.
- *
- * Otherwise, if the next seven characters are an ASCII
- * case-insensitive match for the word "DOCTYPE", then
- * consume those characters and switch to the DOCTYPE
- * state.
- *
- * Otherwise, if the insertion mode is
- * "in foreign content" and the current node is not an
- * element in the HTML namespace and the next seven
- * characters are an case-sensitive match for the string
- * "[CDATA[" (the five uppercase letters "CDATA" with a
- * U+005B LEFT SQUARE BRACKET character before and
- * after), then consume those characters and switch to
- * the CDATA section state.
- *
- * Otherwise, is is a parse error. Switch to the bogus
- * comment state. The next character that is consumed,
- * if any, is the first character that will be in the
- * comment.
- */
- switch (c) {
- case '-':
- clearStrBufBeforeUse();
- appendStrBuf(c);
- state = transition(state, Tokenizer.MARKUP_DECLARATION_HYPHEN, reconsume, pos);
- break markupdeclarationopenloop;
- // continue stateloop;
- case 'd':
- case 'D':
- clearStrBufBeforeUse();
- appendStrBuf(c);
- index = 0;
- state = transition(state, Tokenizer.MARKUP_DECLARATION_OCTYPE, reconsume, pos);
- continue stateloop;
- case '[':
- if (tokenHandler.cdataSectionAllowed()) {
- clearStrBufBeforeUse();
- appendStrBuf(c);
- index = 0;
- state = transition(state, Tokenizer.CDATA_START, reconsume, pos);
- continue stateloop;
- }
- // else fall through
- default:
- errBogusComment();
- clearStrBufBeforeUse();
- reconsume = true;
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case MARKUP_DECLARATION_HYPHEN:
- markupdeclarationhyphenloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case '\u0000':
- break stateloop;
- case '-':
- clearStrBufAfterOneHyphen();
- state = transition(state, Tokenizer.COMMENT_START, reconsume, pos);
- break markupdeclarationhyphenloop;
- // continue stateloop;
- default:
- errBogusComment();
- reconsume = true;
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT_START:
- commentstartloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Comment start state
- *
- *
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Switch to the comment
- * start dash state.
- */
- appendStrBuf(c);
- state = transition(state, Tokenizer.COMMENT_START_DASH, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Parse error.
- */
- errPrematureEndOfComment();
- /* Emit the comment token. */
- emitComment(0, pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- break commentstartloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the input character to
- * the comment token's data.
- */
- appendStrBuf(c);
- /*
- * Switch to the comment state.
- */
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- break commentstartloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT:
- commentloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Comment state Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Switch to the comment
- * end dash state
- */
- appendStrBuf(c);
- state = transition(state, Tokenizer.COMMENT_END_DASH, reconsume, pos);
- break commentloop;
- // continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the input character to
- * the comment token's data.
- */
- appendStrBuf(c);
- /*
- * Stay in the comment state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT_END_DASH:
- commentenddashloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Comment end dash state Consume the next input
- * character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Switch to the comment
- * end state
- */
- appendStrBuf(c);
- state = transition(state, Tokenizer.COMMENT_END, reconsume, pos);
- break commentenddashloop;
- // continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append a U+002D HYPHEN-MINUS
- * (-) character and the input character to the
- * comment token's data.
- */
- appendStrBuf(c);
- /*
- * Switch to the comment state.
- */
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case COMMENT_END:
- commentendloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Comment end dash state Consume the next input
- * character:
- */
- switch (c) {
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the comment
- * token.
- */
- emitComment(2, pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '-':
- /* U+002D HYPHEN-MINUS (-) Parse error. */
- /*
- * Append a U+002D HYPHEN-MINUS (-) character to
- * the comment token's data.
- */
- adjustDoubleHyphenAndAppendToStrBufAndErr(c);
- /*
- * Stay in the comment end state.
- */
- continue;
- case '\r':
- adjustDoubleHyphenAndAppendToStrBufCarriageReturn();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- break stateloop;
- case '\n':
- adjustDoubleHyphenAndAppendToStrBufLineFeed();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- case '!':
- errHyphenHyphenBang();
- appendStrBuf(c);
- state = transition(state, Tokenizer.COMMENT_END_BANG, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Append two U+002D HYPHEN-MINUS (-) characters
- * and the input character to the comment
- * token's data.
- */
- adjustDoubleHyphenAndAppendToStrBufAndErr(c);
- /*
- * Switch to the comment state.
- */
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case COMMENT_END_BANG:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Comment end bang state
- *
- * Consume the next input character:
- */
- switch (c) {
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the comment
- * token.
- */
- emitComment(3, pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '-':
- /*
- * Append two U+002D HYPHEN-MINUS (-) characters
- * and a U+0021 EXCLAMATION MARK (!) character
- * to the comment token's data.
- */
- appendStrBuf(c);
- /*
- * Switch to the comment end dash state.
- */
- state = transition(state, Tokenizer.COMMENT_END_DASH, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append two U+002D HYPHEN-MINUS
- * (-) characters, a U+0021 EXCLAMATION MARK (!)
- * character, and the input character to the
- * comment token's data. Switch to the comment
- * state.
- */
- appendStrBuf(c);
- /*
- * Switch to the comment state.
- */
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case COMMENT_START_DASH:
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Comment start dash state
- *
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Switch to the comment end
- * state
- */
- appendStrBuf(c);
- state = transition(state, Tokenizer.COMMENT_END, reconsume, pos);
- continue stateloop;
- case '>':
- errPrematureEndOfComment();
- /* Emit the comment token. */
- emitComment(1, pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Append a U+002D HYPHEN-MINUS character (-) and
- * the current input character to the comment
- * token's data.
- */
- appendStrBuf(c);
- /*
- * Switch to the comment state.
- */
- state = transition(state, Tokenizer.COMMENT, reconsume, pos);
- continue stateloop;
- }
- // XXX reorder point
- case CDATA_START:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- if (index < 6) { // CDATA_LSQB.length
- if (c == Tokenizer.CDATA_LSQB[index]) {
- appendStrBuf(c);
- } else {
- errBogusComment();
- reconsume = true;
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- }
- index++;
- continue;
- } else {
- clearStrBufAfterUse();
- cstart = pos; // start coalescing
- reconsume = true;
- state = transition(state, Tokenizer.CDATA_SECTION, reconsume, pos);
- break; // FALL THROUGH continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case CDATA_SECTION:
- cdatasectionloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- switch (c) {
- case ']':
- flushChars(buf, pos);
- state = transition(state, Tokenizer.CDATA_RSQB, reconsume, pos);
- break cdatasectionloop; // FALL THROUGH
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- default:
- continue;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case CDATA_RSQB:
- cdatarsqb: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case ']':
- state = transition(state, Tokenizer.CDATA_RSQB_RSQB, reconsume, pos);
- break cdatarsqb;
- default:
- tokenHandler.characters(Tokenizer.RSQB_RSQB, 0,
- 1);
- cstart = pos;
- reconsume = true;
- state = transition(state, Tokenizer.CDATA_SECTION, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case CDATA_RSQB_RSQB:
- cdatarsqbrsqb: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case ']':
- // Saw a third ]. Emit one ] (logically the
- // first one) and stay in this state to
- // remember that the last two characters seen
- // have been ]].
- tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 1);
- continue;
- case '>':
- cstart = pos + 1;
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 2);
- cstart = pos;
- reconsume = true;
- state = transition(state, Tokenizer.CDATA_SECTION, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case ATTRIBUTE_VALUE_SINGLE_QUOTED:
- attributevaluesinglequotedloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Switch to the after
- * attribute value (quoted) state.
- */
- addAttributeWithValue();
-
- state = transition(state, Tokenizer.AFTER_ATTRIBUTE_VALUE_QUOTED, reconsume, pos);
- continue stateloop;
- case '&':
- /*
- * U+0026 AMPERSAND (&) Switch to the character
- * reference in attribute value state, with the
- * + additional allowed character being U+0027
- * APOSTROPHE (').
- */
- assert charRefBufLen == 0: "charRefBufLen not reset after previous use!";
- appendCharRefBuf(c);
- setAdditionalAndRememberAmpersandLocation('\'');
- returnState = state;
- state = transition(state, Tokenizer.CONSUME_CHARACTER_REFERENCE, reconsume, pos);
- break attributevaluesinglequotedloop;
- // continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the current input
- * character to the current attribute's value.
- */
- appendStrBuf(c);
- /*
- * Stay in the attribute value (double-quoted)
- * state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case CONSUME_CHARACTER_REFERENCE:
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- if (c == '\u0000') {
- break stateloop;
- }
- /*
- * Unlike the definition is the spec, this state does not
- * return a value and never requires the caller to
- * backtrack. This state takes care of emitting characters
- * or appending to the current attribute value. It also
- * takes care of that in the case when consuming the
- * character reference fails.
- */
- /*
- * This section defines how to consume a character
- * reference. This definition is used when parsing character
- * references in text and in attributes.
- *
- * The behavior depends on the identity of the next
- * character (the one immediately after the U+0026 AMPERSAND
- * character):
- */
- switch (c) {
- case ' ':
- case '\t':
- case '\n':
- case '\r': // we'll reconsume!
- case '\u000C':
- case '<':
- case '&':
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- case '#':
- /*
- * U+0023 NUMBER SIGN (#) Consume the U+0023 NUMBER
- * SIGN.
- */
- appendCharRefBuf('#');
- state = transition(state, Tokenizer.CONSUME_NCR, reconsume, pos);
- continue stateloop;
- default:
- if (c == additional) {
- emitOrAppendCharRefBuf(returnState);
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- if (c >= 'a' && c <= 'z') {
- firstCharKey = c - 'a' + 26;
- } else if (c >= 'A' && c <= 'Z') {
- firstCharKey = c - 'A';
- } else {
- // No match
- /*
- * If no match can be made, then this is a parse
- * error.
- */
- errNoNamedCharacterMatch();
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- // Didn't fail yet
- appendCharRefBuf(c);
- state = transition(state, Tokenizer.CHARACTER_REFERENCE_HILO_LOOKUP, reconsume, pos);
- // FALL THROUGH continue stateloop;
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case CHARACTER_REFERENCE_HILO_LOOKUP:
- {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- if (c == '\u0000') {
- break stateloop;
- }
- /*
- * The data structure is as follows:
- *
- * HILO_ACCEL is a two-dimensional int array whose major
- * index corresponds to the second character of the
- * character reference (code point as index) and the
- * minor index corresponds to the first character of the
- * character reference (packed so that A-Z runs from 0
- * to 25 and a-z runs from 26 to 51). This layout makes
- * it easier to use the sparseness of the data structure
- * to omit parts of it: The second dimension of the
- * table is null when no character reference starts with
- * the character corresponding to that row.
- *
- * The int value HILO_ACCEL (by these indeces) is zero
- * if there exists no character reference starting with
- * that two-letter prefix. Otherwise, the value is an
- * int that packs two shorts so that the higher short is
- * the index of the highest character reference name
- * with that prefix in NAMES and the lower short
- * corresponds to the index of the lowest character
- * reference name with that prefix. (It happens that the
- * first two character reference names share their
- * prefix so the packed int cannot be 0 by packing the
- * two shorts.)
- *
- * NAMES is an array of byte arrays where each byte
- * array encodes the name of a character references as
- * ASCII. The names omit the first two letters of the
- * name. (Since storing the first two letters would be
- * redundant with the data contained in HILO_ACCEL.) The
- * entries are lexically sorted.
- *
- * For a given index in NAMES, the same index in VALUES
- * contains the corresponding expansion as an array of
- * two UTF-16 code units (either the character and
- * U+0000 or a suggogate pair).
- */
- int hilo = 0;
- if (c <= 'z') {
- @Const @NoLength int[] row = NamedCharactersAccel.HILO_ACCEL[c];
- if (row != null) {
- hilo = row[firstCharKey];
- }
- }
- if (hilo == 0) {
- /*
- * If no match can be made, then this is a parse
- * error.
- */
- errNoNamedCharacterMatch();
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- // Didn't fail yet
- appendCharRefBuf(c);
- lo = hilo & 0xFFFF;
- hi = hilo >> 16;
- entCol = -1;
- candidate = -1;
- charRefBufMark = 0;
- state = transition(state, Tokenizer.CHARACTER_REFERENCE_TAIL, reconsume, pos);
- // FALL THROUGH continue stateloop;
- }
- case CHARACTER_REFERENCE_TAIL:
- outer: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- if (c == '\u0000') {
- break stateloop;
- }
- entCol++;
- /*
- * Consume the maximum number of characters possible,
- * with the consumed characters matching one of the
- * identifiers in the first column of the named
- * character references table (in a case-sensitive
- * manner).
- */
- loloop: for (;;) {
- if (hi < lo) {
- break outer;
- }
- if (entCol == NamedCharacters.NAMES[lo].length()) {
- candidate = lo;
- charRefBufMark = charRefBufLen;
- lo++;
- } else if (entCol > NamedCharacters.NAMES[lo].length()) {
- break outer;
- } else if (c > NamedCharacters.NAMES[lo].charAt(entCol)) {
- lo++;
- } else {
- break loloop;
- }
- }
-
- hiloop: for (;;) {
- if (hi < lo) {
- break outer;
- }
- if (entCol == NamedCharacters.NAMES[hi].length()) {
- break hiloop;
- }
- if (entCol > NamedCharacters.NAMES[hi].length()) {
- break outer;
- } else if (c < NamedCharacters.NAMES[hi].charAt(entCol)) {
- hi--;
- } else {
- break hiloop;
- }
- }
-
- if (c == ';') {
- // If we see a semicolon, there cannot be a
- // longer match. Break the loop. However, before
- // breaking, take the longest match so far as the
- // candidate, if we are just about to complete a
- // match.
- if (entCol + 1 == NamedCharacters.NAMES[lo].length()) {
- candidate = lo;
- charRefBufMark = charRefBufLen;
- }
- break outer;
- }
-
- if (hi < lo) {
- break outer;
- }
- appendCharRefBuf(c);
- continue;
- }
-
- if (candidate == -1) {
- // reconsume deals with CR, LF or nul
- /*
- * If no match can be made, then this is a parse error.
- */
- errNoNamedCharacterMatch();
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- } else {
- // c can't be CR, LF or nul if we got here
- @Const @CharacterName String candidateName = NamedCharacters.NAMES[candidate];
- if (candidateName.length() == 0
- || candidateName.charAt(candidateName.length() - 1) != ';') {
- /*
- * If the last character matched is not a U+003B
- * SEMICOLON (;), there is a parse error.
- */
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- /*
- * If the entity is being consumed as part of an
- * attribute, and the last character matched is
- * not a U+003B SEMICOLON (;),
- */
- char ch;
- if (charRefBufMark == charRefBufLen) {
- ch = c;
- } else {
- ch = charRefBuf[charRefBufMark];
- }
- if (ch == '=' || (ch >= '0' && ch <= '9')
- || (ch >= 'A' && ch <= 'Z')
- || (ch >= 'a' && ch <= 'z')) {
- /*
- * and the next character is either a U+003D
- * EQUALS SIGN character (=) or in the range
- * U+0030 DIGIT ZERO to U+0039 DIGIT NINE,
- * U+0041 LATIN CAPITAL LETTER A to U+005A
- * LATIN CAPITAL LETTER Z, or U+0061 LATIN
- * SMALL LETTER A to U+007A LATIN SMALL
- * LETTER Z, then, for historical reasons,
- * all the characters that were matched
- * after the U+0026 AMPERSAND (&) must be
- * unconsumed, and nothing is returned.
- */
- errNoNamedCharacterMatch();
- appendCharRefBufToStrBuf();
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- }
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- errUnescapedAmpersandInterpretedAsCharacterReference();
- } else {
- errNotSemicolonTerminated();
- }
- }
-
- /*
- * Otherwise, return a character token for the character
- * corresponding to the entity name (as given by the
- * second column of the named character references
- * table).
- */
- // CPPONLY: completedNamedCharacterReference();
- @Const @NoLength char[] val = NamedCharacters.VALUES[candidate];
- if (
- // [NOCPP[
- val.length == 1
- // ]NOCPP]
- // CPPONLY: val[1] == 0
- ) {
- emitOrAppendOne(val, returnState);
- } else {
- emitOrAppendTwo(val, returnState);
- }
- // this is so complicated!
- if (charRefBufMark < charRefBufLen) {
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- appendStrBuf(charRefBuf, charRefBufMark,
- charRefBufLen - charRefBufMark);
- } else {
- tokenHandler.characters(charRefBuf, charRefBufMark,
- charRefBufLen - charRefBufMark);
- }
- }
- // charRefBufLen will be zeroed below!
-
- // Check if we broke out early with c being the last
- // character that matched as opposed to being the
- // first one that didn't match. In the case of an
- // early break, the next run on text should start
- // *after* the current character and the current
- // character shouldn't be reconsumed.
- boolean earlyBreak = (c == ';' && charRefBufMark == charRefBufLen);
- charRefBufLen = 0;
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = earlyBreak ? pos + 1 : pos;
- }
- reconsume = !earlyBreak;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- /*
- * If the markup contains I'm ¬it; I tell you, the
- * entity is parsed as "not", as in, I'm ¬it; I tell
- * you. But if the markup was I'm ∉ I tell you,
- * the entity would be parsed as "notin;", resulting in
- * I'm ∉ I tell you.
- */
- }
- // XXX reorder point
- case CONSUME_NCR:
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- value = 0;
- seenDigits = false;
- /*
- * The behavior further depends on the character after the
- * U+0023 NUMBER SIGN:
- */
- switch (c) {
- case 'x':
- case 'X':
-
- /*
- * U+0078 LATIN SMALL LETTER X U+0058 LATIN CAPITAL
- * LETTER X Consume the X.
- *
- * Follow the steps below, but using the range of
- * characters U+0030 DIGIT ZERO through to U+0039
- * DIGIT NINE, U+0061 LATIN SMALL LETTER A through
- * to U+0066 LATIN SMALL LETTER F, and U+0041 LATIN
- * CAPITAL LETTER A, through to U+0046 LATIN CAPITAL
- * LETTER F (in other words, 0-9, A-F, a-f).
- *
- * When it comes to interpreting the number,
- * interpret it as a hexadecimal number.
- */
- appendCharRefBuf(c);
- state = transition(state, Tokenizer.HEX_NCR_LOOP, reconsume, pos);
- continue stateloop;
- default:
- /*
- * Anything else Follow the steps below, but using
- * the range of characters U+0030 DIGIT ZERO through
- * to U+0039 DIGIT NINE (i.e. just 0-9).
- *
- * When it comes to interpreting the number,
- * interpret it as a decimal number.
- */
- reconsume = true;
- state = transition(state, Tokenizer.DECIMAL_NRC_LOOP, reconsume, pos);
- // FALL THROUGH continue stateloop;
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case DECIMAL_NRC_LOOP:
- decimalloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume as many characters as match the range of
- * characters given above.
- */
- assert value >= 0: "value must not become negative.";
- if (c >= '0' && c <= '9') {
- seenDigits = true;
- // Avoid overflow
- if (value <= 0x10FFFF) {
- value *= 10;
- value += c - '0';
- }
- continue;
- } else if (c == ';') {
- if (seenDigits) {
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos + 1;
- }
- state = transition(state, Tokenizer.HANDLE_NCR_VALUE, reconsume, pos);
- // FALL THROUGH continue stateloop;
- break decimalloop;
- } else {
- errNoDigitsInNCR();
- appendCharRefBuf(';');
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos + 1;
- }
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- } else {
- /*
- * If no characters match the range, then don't
- * consume any characters (and unconsume the U+0023
- * NUMBER SIGN character and, if appropriate, the X
- * character). This is a parse error; nothing is
- * returned.
- *
- * Otherwise, if the next character is a U+003B
- * SEMICOLON, consume that too. If it isn't, there
- * is a parse error.
- */
- if (!seenDigits) {
- errNoDigitsInNCR();
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- } else {
- errCharRefLacksSemicolon();
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, Tokenizer.HANDLE_NCR_VALUE, reconsume, pos);
- // FALL THROUGH continue stateloop;
- break decimalloop;
- }
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case HANDLE_NCR_VALUE:
- // WARNING previous state sets reconsume
- // We are not going to emit the contents of charRefBuf.
- charRefBufLen = 0;
- // XXX inline this case if the method size can take it
- handleNcrValue(returnState);
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- // XXX reorder point
- case HEX_NCR_LOOP:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume as many characters as match the range of
- * characters given above.
- */
- assert value >= 0: "value must not become negative.";
- if (c >= '0' && c <= '9') {
- seenDigits = true;
- // Avoid overflow
- if (value <= 0x10FFFF) {
- value *= 16;
- value += c - '0';
- }
- continue;
- } else if (c >= 'A' && c <= 'F') {
- seenDigits = true;
- // Avoid overflow
- if (value <= 0x10FFFF) {
- value *= 16;
- value += c - 'A' + 10;
- }
- continue;
- } else if (c >= 'a' && c <= 'f') {
- seenDigits = true;
- // Avoid overflow
- if (value <= 0x10FFFF) {
- value *= 16;
- value += c - 'a' + 10;
- }
- continue;
- } else if (c == ';') {
- if (seenDigits) {
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos + 1;
- }
- state = transition(state, Tokenizer.HANDLE_NCR_VALUE, reconsume, pos);
- continue stateloop;
- } else {
- errNoDigitsInNCR();
- appendCharRefBuf(';');
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos + 1;
- }
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- } else {
- /*
- * If no characters match the range, then don't
- * consume any characters (and unconsume the U+0023
- * NUMBER SIGN character and, if appropriate, the X
- * character). This is a parse error; nothing is
- * returned.
- *
- * Otherwise, if the next character is a U+003B
- * SEMICOLON, consume that too. If it isn't, there
- * is a parse error.
- */
- if (!seenDigits) {
- errNoDigitsInNCR();
- emitOrAppendCharRefBuf(returnState);
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- } else {
- errCharRefLacksSemicolon();
- if ((returnState & DATA_AND_RCDATA_MASK) == 0) {
- cstart = pos;
- }
- reconsume = true;
- state = transition(state, Tokenizer.HANDLE_NCR_VALUE, reconsume, pos);
- continue stateloop;
- }
- }
- }
- // XXX reorder point
- case PLAINTEXT:
- plaintextloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- switch (c) {
- case '\u0000':
- emitPlaintextReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Stay in the
- * RAWTEXT state.
- */
- continue;
- }
- }
- // XXX reorder point
- case CLOSE_TAG_OPEN:
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Otherwise, if the content model flag is set to the PCDATA
- * state, or if the next few characters do match that tag
- * name, consume the next input character:
- */
- switch (c) {
- case '>':
- /* U+003E GREATER-THAN SIGN (>) Parse error. */
- errLtSlashGt();
- /*
- * Switch to the data state.
- */
- cstart = pos + 1;
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- silentCarriageReturn();
- /* Anything else Parse error. */
- errGarbageAfterLtSlash();
- /*
- * Switch to the bogus comment state.
- */
- clearStrBufBeforeUse();
- appendStrBuf('\n');
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- /* Anything else Parse error. */
- errGarbageAfterLtSlash();
- /*
- * Switch to the bogus comment state.
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- if (c >= 'A' && c <= 'Z') {
- c += 0x20;
- }
- if (c >= 'a' && c <= 'z') {
- /*
- * U+0061 LATIN SMALL LETTER A through to U+007A
- * LATIN SMALL LETTER Z Create a new end tag
- * token,
- */
- endTag = true;
- /*
- * set its tag name to the input character,
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- /*
- * then switch to the tag name state. (Don't
- * emit the token yet; further details will be
- * filled in before it is emitted.)
- */
- state = transition(state, Tokenizer.TAG_NAME, reconsume, pos);
- continue stateloop;
- } else {
- /* Anything else Parse error. */
- errGarbageAfterLtSlash();
- /*
- * Switch to the bogus comment state.
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case RCDATA:
- rcdataloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- switch (c) {
- case '&':
- /*
- * U+0026 AMPERSAND (&) Switch to the character
- * reference in RCDATA state.
- */
- flushChars(buf, pos);
- assert charRefBufLen == 0: "charRefBufLen not reset after previous use!";
- appendCharRefBuf(c);
- setAdditionalAndRememberAmpersandLocation('\u0000');
- returnState = state;
- state = transition(state, Tokenizer.CONSUME_CHARACTER_REFERENCE, reconsume, pos);
- continue stateloop;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the
- * RCDATA less-than sign state.
- */
- flushChars(buf, pos);
-
- returnState = state;
- state = transition(state, Tokenizer.RAWTEXT_RCDATA_LESS_THAN_SIGN, reconsume, pos);
- continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Emit the current input character as a
- * character token. Stay in the RCDATA state.
- */
- continue;
- }
- }
- // XXX reorder point
- case RAWTEXT:
- rawtextloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- switch (c) {
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the
- * RAWTEXT less-than sign state.
- */
- flushChars(buf, pos);
-
- returnState = state;
- state = transition(state, Tokenizer.RAWTEXT_RCDATA_LESS_THAN_SIGN, reconsume, pos);
- break rawtextloop;
- // FALL THRU continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Emit the current input character as a
- * character token. Stay in the RAWTEXT state.
- */
- continue;
- }
- }
- // XXX fallthru don't reorder
- case RAWTEXT_RCDATA_LESS_THAN_SIGN:
- rawtextrcdatalessthansignloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case '/':
- /*
- * U+002F SOLIDUS (/) Set the temporary buffer
- * to the empty string. Switch to the script
- * data end tag open state.
- */
- index = 0;
- clearStrBufBeforeUse();
- state = transition(state, Tokenizer.NON_DATA_END_TAG_NAME, reconsume, pos);
- break rawtextrcdatalessthansignloop;
- // FALL THRU continue stateloop;
- default:
- /*
- * Otherwise, emit a U+003C LESS-THAN SIGN
- * character token
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- /*
- * and reconsume the current input character in
- * the data state.
- */
- cstart = pos;
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX fall thru. don't reorder.
- case NON_DATA_END_TAG_NAME:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * ASSERT! when entering this state, set index to 0 and
- * call clearStrBufBeforeUse(); Let's implement the above
- * without lookahead. strBuf is the 'temporary buffer'.
- */
- if (endTagExpectationAsArray == null) {
- tokenHandler.characters(Tokenizer.LT_SOLIDUS,
- 0, 2);
- cstart = pos;
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- } else if (index < endTagExpectationAsArray.length) {
- char e = endTagExpectationAsArray[index];
- char folded = c;
- if (c >= 'A' && c <= 'Z') {
- folded += 0x20;
- }
- if (folded != e) {
- // [NOCPP[
- errHtml4LtSlashInRcdata(folded);
- // ]NOCPP]
- tokenHandler.characters(Tokenizer.LT_SOLIDUS,
- 0, 2);
- emitStrBuf();
- cstart = pos;
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- appendStrBuf(c);
- index++;
- continue;
- } else {
- endTag = true;
- // XXX replace contentModelElement with different
- // type
- tagName = endTagExpectation;
- switch (c) {
- case '\r':
- silentCarriageReturn();
- clearStrBufAfterUse(); // strBuf not used
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE
- * FEED (LF) U+000C FORM FEED (FF) U+0020
- * SPACE If the current end tag token is an
- * appropriate end tag token, then switch to
- * the before attribute name state.
- */
- clearStrBufAfterUse(); // strBuf not used
- state = transition(state, Tokenizer.BEFORE_ATTRIBUTE_NAME, reconsume, pos);
- continue stateloop;
- case '/':
- /*
- * U+002F SOLIDUS (/) If the current end tag
- * token is an appropriate end tag token,
- * then switch to the self-closing start tag
- * state.
- */
- clearStrBufAfterUse(); // strBuf not used
- state = transition(state, Tokenizer.SELF_CLOSING_START_TAG, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) If the
- * current end tag token is an appropriate
- * end tag token, then emit the current tag
- * token and switch to the data state.
- */
- clearStrBufAfterUse(); // strBuf not used
- state = transition(state, emitCurrentTagToken(false, pos), reconsume, pos);
- if (shouldSuspend) {
- break stateloop;
- }
- continue stateloop;
- default:
- /*
- * Emit a U+003C LESS-THAN SIGN character
- * token, a U+002F SOLIDUS character token,
- * a character token for each of the
- * characters in the temporary buffer (in
- * the order they were added to the buffer),
- * and reconsume the current input character
- * in the RAWTEXT state.
- */
- // [NOCPP[
- errWarnLtSlashInRcdata();
- // ]NOCPP]
- tokenHandler.characters(
- Tokenizer.LT_SOLIDUS, 0, 2);
- emitStrBuf();
- cstart = pos; // don't drop the
- // character
- reconsume = true;
- state = transition(state, returnState, reconsume, pos);
- continue stateloop;
- }
- }
- }
- // XXX reorder point
- // BEGIN HOTSPOT WORKAROUND
- case BOGUS_COMMENT:
- boguscommentloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume every character up to and including the first
- * U+003E GREATER-THAN SIGN character (>) or the end of
- * the file (EOF), whichever comes first. Emit a comment
- * token whose data is the concatenation of all the
- * characters starting from and including the character
- * that caused the state machine to switch into the
- * bogus comment state, up to and including the
- * character immediately before the last consumed
- * character (i.e. up to the character just before the
- * U+003E or EOF character). (If the comment was started
- * by the end of the file (EOF), the token is empty.)
- *
- * Switch to the data state.
- *
- * If the end of the file was reached, reconsume the EOF
- * character.
- */
- switch (c) {
- case '>':
- emitComment(0, pos);
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '-':
- appendStrBuf(c);
- state = transition(state, Tokenizer.BOGUS_COMMENT_HYPHEN, reconsume, pos);
- break boguscommentloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- appendStrBuf(c);
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case BOGUS_COMMENT_HYPHEN:
- boguscommenthyphenloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case '>':
- // [NOCPP[
- maybeAppendSpaceToBogusComment();
- // ]NOCPP]
- emitComment(0, pos);
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '-':
- appendSecondHyphenToBogusComment();
- continue boguscommenthyphenloop;
- case '\r':
- appendStrBufCarriageReturn();
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- appendStrBuf(c);
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case SCRIPT_DATA:
- scriptdataloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- switch (c) {
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the
- * script data less-than sign state.
- */
- flushChars(buf, pos);
- returnState = state;
- state = transition(state, Tokenizer.SCRIPT_DATA_LESS_THAN_SIGN, reconsume, pos);
- break scriptdataloop; // FALL THRU continue
- // stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Stay in the
- * script data state.
- */
- continue;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_LESS_THAN_SIGN:
- scriptdatalessthansignloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case '/':
- /*
- * U+002F SOLIDUS (/) Set the temporary buffer
- * to the empty string. Switch to the script
- * data end tag open state.
- */
- index = 0;
- clearStrBufBeforeUse();
- state = transition(state, Tokenizer.NON_DATA_END_TAG_NAME, reconsume, pos);
- continue stateloop;
- case '!':
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- cstart = pos;
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPE_START, reconsume, pos);
- break scriptdatalessthansignloop; // FALL THRU
- // continue
- // stateloop;
- default:
- /*
- * Otherwise, emit a U+003C LESS-THAN SIGN
- * character token
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- /*
- * and reconsume the current input character in
- * the data state.
- */
- cstart = pos;
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_ESCAPE_START:
- scriptdataescapestartloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Switch to the
- * script data escape start dash state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPE_START_DASH, reconsume, pos);
- break scriptdataescapestartloop; // FALL THRU
- // continue
- // stateloop;
- default:
- /*
- * Anything else Reconsume the current input
- * character in the script data state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_ESCAPE_START_DASH:
- scriptdataescapestartdashloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Switch to the
- * script data escaped dash dash state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED_DASH_DASH, reconsume, pos);
- break scriptdataescapestartdashloop;
- // continue stateloop;
- default:
- /*
- * Anything else Reconsume the current input
- * character in the script data state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_ESCAPED_DASH_DASH:
- scriptdataescapeddashdashloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Stay in the
- * script data escaped dash dash state.
- */
- continue;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the
- * script data escaped less-than sign state.
- */
- flushChars(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit a U+003E
- * GREATER-THAN SIGN character token. Switch to
- * the script data state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA, reconsume, pos);
- continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- break scriptdataescapeddashdashloop;
- case '\r':
- emitCarriageReturn(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Switch to the
- * script data escaped state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- break scriptdataescapeddashdashloop;
- // continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_ESCAPED:
- scriptdataescapedloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Switch to the
- * script data escaped dash state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED_DASH, reconsume, pos);
- break scriptdataescapedloop; // FALL THRU
- // continue
- // stateloop;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the
- * script data escaped less-than sign state.
- */
- flushChars(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN, reconsume, pos);
- continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Stay in the
- * script data escaped state.
- */
- continue;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_ESCAPED_DASH:
- scriptdataescapeddashloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Switch to the
- * script data escaped dash dash state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED_DASH_DASH, reconsume, pos);
- continue stateloop;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Switch to the
- * script data escaped less-than sign state.
- */
- flushChars(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN, reconsume, pos);
- break scriptdataescapeddashloop;
- // continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- continue stateloop;
- case '\r':
- emitCarriageReturn(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Switch to the
- * script data escaped state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:
- scriptdataescapedlessthanloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '/':
- /*
- * U+002F SOLIDUS (/) Set the temporary buffer
- * to the empty string. Switch to the script
- * data escaped end tag open state.
- */
- index = 0;
- clearStrBufBeforeUse();
- returnState = Tokenizer.SCRIPT_DATA_ESCAPED;
- state = transition(state, Tokenizer.NON_DATA_END_TAG_NAME, reconsume, pos);
- continue stateloop;
- case 'S':
- case 's':
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Emit a U+003C
- * LESS-THAN SIGN character token and the
- * current input character as a character token.
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- cstart = pos;
- index = 1;
- /*
- * Set the temporary buffer to the empty string.
- * Append the lowercase version of the current
- * input character (add 0x0020 to the
- * character's code point) to the temporary
- * buffer. Switch to the script data double
- * escape start state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPE_START, reconsume, pos);
- break scriptdataescapedlessthanloop;
- // continue stateloop;
- default:
- /*
- * Anything else Emit a U+003C LESS-THAN SIGN
- * character token and reconsume the current
- * input character in the script data escaped
- * state.
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- cstart = pos;
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_DOUBLE_ESCAPE_START:
- scriptdatadoubleescapestartloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- assert index > 0;
- if (index < 6) { // SCRIPT_ARR.length
- char folded = c;
- if (c >= 'A' && c <= 'Z') {
- folded += 0x20;
- }
- if (folded != Tokenizer.SCRIPT_ARR[index]) {
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- index++;
- continue;
- }
- switch (c) {
- case '\r':
- emitCarriageReturn(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- case ' ':
- case '\t':
- case '\u000C':
- case '/':
- case '>':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * U+002F SOLIDUS (/) U+003E GREATER-THAN SIGN
- * (>) Emit the current input character as a
- * character token. If the temporary buffer is
- * the string "script", then switch to the
- * script data double escaped state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- break scriptdatadoubleescapestartloop;
- // continue stateloop;
- default:
- /*
- * Anything else Reconsume the current input
- * character in the script data escaped state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_DOUBLE_ESCAPED:
- scriptdatadoubleescapedloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Switch to the
- * script data double escaped dash state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED_DASH, reconsume, pos);
- break scriptdatadoubleescapedloop; // FALL THRU
- // continue
- // stateloop;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Emit a U+003C
- * LESS-THAN SIGN character token. Switch to the
- * script data double escaped less-than sign
- * state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN, reconsume, pos);
- continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- continue;
- case '\r':
- emitCarriageReturn(buf, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Stay in the
- * script data double escaped state.
- */
- continue;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_DOUBLE_ESCAPED_DASH:
- scriptdatadoubleescapeddashloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Switch to the
- * script data double escaped dash dash state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH, reconsume, pos);
- break scriptdatadoubleescapeddashloop;
- // continue stateloop;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Emit a U+003C
- * LESS-THAN SIGN character token. Switch to the
- * script data double escaped less-than sign
- * state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN, reconsume, pos);
- continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- case '\r':
- emitCarriageReturn(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Switch to the
- * script data double escaped state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:
- scriptdatadoubleescapeddashdashloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '-':
- /*
- * U+002D HYPHEN-MINUS (-) Emit a U+002D
- * HYPHEN-MINUS character token. Stay in the
- * script data double escaped dash dash state.
- */
- continue;
- case '<':
- /*
- * U+003C LESS-THAN SIGN (<) Emit a U+003C
- * LESS-THAN SIGN character token. Switch to the
- * script data double escaped less-than sign
- * state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN, reconsume, pos);
- break scriptdatadoubleescapeddashdashloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit a U+003E
- * GREATER-THAN SIGN character token. Switch to
- * the script data state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA, reconsume, pos);
- continue stateloop;
- case '\u0000':
- emitReplacementCharacter(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- case '\r':
- emitCarriageReturn(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- default:
- /*
- * Anything else Emit the current input
- * character as a character token. Switch to the
- * script data double escaped state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:
- scriptdatadoubleescapedlessthanloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '/':
- /*
- * U+002F SOLIDUS (/) Emit a U+002F SOLIDUS
- * character token. Set the temporary buffer to
- * the empty string. Switch to the script data
- * double escape end state.
- */
- index = 0;
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPE_END, reconsume, pos);
- break scriptdatadoubleescapedlessthanloop;
- default:
- /*
- * Anything else Reconsume the current input
- * character in the script data double escaped
- * state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
- case SCRIPT_DATA_DOUBLE_ESCAPE_END:
- scriptdatadoubleescapeendloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- if (index < 6) { // SCRIPT_ARR.length
- char folded = c;
- if (c >= 'A' && c <= 'Z') {
- folded += 0x20;
- }
- if (folded != Tokenizer.SCRIPT_ARR[index]) {
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- index++;
- continue;
- }
- switch (c) {
- case '\r':
- emitCarriageReturn(buf, pos);
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- case ' ':
- case '\t':
- case '\u000C':
- case '/':
- case '>':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * U+002F SOLIDUS (/) U+003E GREATER-THAN SIGN
- * (>) Emit the current input character as a
- * character token. If the temporary buffer is
- * the string "script", then switch to the
- * script data escaped state.
- */
- state = transition(state, Tokenizer.SCRIPT_DATA_ESCAPED, reconsume, pos);
- continue stateloop;
- default:
- /*
- * Reconsume the current input character in the
- * script data double escaped state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.SCRIPT_DATA_DOUBLE_ESCAPED, reconsume, pos);
- continue stateloop;
- }
- }
- // XXX reorder point
- case MARKUP_DECLARATION_OCTYPE:
- markupdeclarationdoctypeloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- if (index < 6) { // OCTYPE.length
- char folded = c;
- if (c >= 'A' && c <= 'Z') {
- folded += 0x20;
- }
- if (folded == Tokenizer.OCTYPE[index]) {
- appendStrBuf(c);
- } else {
- errBogusComment();
- reconsume = true;
- state = transition(state, Tokenizer.BOGUS_COMMENT, reconsume, pos);
- continue stateloop;
- }
- index++;
- continue;
- } else {
- reconsume = true;
- state = transition(state, Tokenizer.DOCTYPE, reconsume, pos);
- break markupdeclarationdoctypeloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case DOCTYPE:
- doctypeloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- initDoctypeFields();
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the before DOCTYPE name state.
- */
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_NAME, reconsume, pos);
- break doctypeloop;
- // continue stateloop;
- default:
- /*
- * Anything else Parse error.
- */
- errMissingSpaceBeforeDoctypeName();
- /*
- * Reconsume the current character in the before
- * DOCTYPE name state.
- */
- reconsume = true;
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_NAME, reconsume, pos);
- break doctypeloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_DOCTYPE_NAME:
- beforedoctypenameloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the before DOCTYPE name state.
- */
- continue;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Parse error.
- */
- errNamelessDoctype();
- /*
- * Create a new DOCTYPE token. Set its
- * force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit the token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- if (c >= 'A' && c <= 'Z') {
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Create a
- * new DOCTYPE token. Set the token's name
- * to the lowercase version of the input
- * character (add 0x0020 to the character's
- * code point).
- */
- c += 0x20;
- }
- /* Anything else Create a new DOCTYPE token. */
- /*
- * Set the token's name name to the current
- * input character.
- */
- clearStrBufBeforeUse();
- appendStrBuf(c);
- /*
- * Switch to the DOCTYPE name state.
- */
- state = transition(state, Tokenizer.DOCTYPE_NAME, reconsume, pos);
- break beforedoctypenameloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case DOCTYPE_NAME:
- doctypenameloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- strBufToDoctypeName();
- state = transition(state, Tokenizer.AFTER_DOCTYPE_NAME, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the after DOCTYPE name state.
- */
- strBufToDoctypeName();
- state = transition(state, Tokenizer.AFTER_DOCTYPE_NAME, reconsume, pos);
- break doctypenameloop;
- // continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * DOCTYPE token.
- */
- strBufToDoctypeName();
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * U+0041 LATIN CAPITAL LETTER A through to
- * U+005A LATIN CAPITAL LETTER Z Append the
- * lowercase version of the input character (add
- * 0x0020 to the character's code point) to the
- * current DOCTYPE token's name.
- */
- if (c >= 'A' && c <= 'Z') {
- c += 0x0020;
- }
- /*
- * Anything else Append the current input
- * character to the current DOCTYPE token's
- * name.
- */
- appendStrBuf(c);
- /*
- * Stay in the DOCTYPE name state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_DOCTYPE_NAME:
- afterdoctypenameloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the after DOCTYPE name state.
- */
- continue;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case 'p':
- case 'P':
- index = 0;
- state = transition(state, Tokenizer.DOCTYPE_UBLIC, reconsume, pos);
- break afterdoctypenameloop;
- // continue stateloop;
- case 's':
- case 'S':
- index = 0;
- state = transition(state, Tokenizer.DOCTYPE_YSTEM, reconsume, pos);
- continue stateloop;
- default:
- /*
- * Otherwise, this is the parse error.
- */
- bogusDoctype();
-
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case DOCTYPE_UBLIC:
- doctypeublicloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * If the six characters starting from the current input
- * character are an ASCII case-insensitive match for the
- * word "PUBLIC", then consume those characters and
- * switch to the before DOCTYPE public identifier state.
- */
- if (index < 5) { // UBLIC.length
- char folded = c;
- if (c >= 'A' && c <= 'Z') {
- folded += 0x20;
- }
- if (folded != Tokenizer.UBLIC[index]) {
- bogusDoctype();
- // forceQuirks = true;
- reconsume = true;
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- index++;
- continue;
- } else {
- reconsume = true;
- state = transition(state, Tokenizer.AFTER_DOCTYPE_PUBLIC_KEYWORD, reconsume, pos);
- break doctypeublicloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_DOCTYPE_PUBLIC_KEYWORD:
- afterdoctypepublickeywordloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the before DOCTYPE public
- * identifier state.
- */
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER, reconsume, pos);
- break afterdoctypepublickeywordloop;
- // FALL THROUGH continue stateloop
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Parse Error.
- */
- errNoSpaceBetweenDoctypePublicKeywordAndQuote();
- /*
- * Set the DOCTYPE token's public identifier to
- * the empty string (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE public identifier
- * (double-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Parse Error.
- */
- errNoSpaceBetweenDoctypePublicKeywordAndQuote();
- /*
- * Set the DOCTYPE token's public identifier to
- * the empty string (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE public identifier
- * (single-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '>':
- /* U+003E GREATER-THAN SIGN (>) Parse error. */
- errExpectedPublicId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- bogusDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:
- beforedoctypepublicidentifierloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the before DOCTYPE public identifier
- * state.
- */
- continue;
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Set the DOCTYPE
- * token's public identifier to the empty string
- * (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE public identifier
- * (double-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED, reconsume, pos);
- break beforedoctypepublicidentifierloop;
- // continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Set the DOCTYPE token's
- * public identifier to the empty string (not
- * missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE public identifier
- * (single-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '>':
- /* U+003E GREATER-THAN SIGN (>) Parse error. */
- errExpectedPublicId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- bogusDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:
- doctypepublicidentifierdoublequotedloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Switch to the after
- * DOCTYPE public identifier state.
- */
- publicIdentifier = strBufToString();
- state = transition(state, Tokenizer.AFTER_DOCTYPE_PUBLIC_IDENTIFIER, reconsume, pos);
- break doctypepublicidentifierdoublequotedloop;
- // continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Parse error.
- */
- errGtInPublicId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- publicIdentifier = strBufToString();
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the current input
- * character to the current DOCTYPE token's
- * public identifier.
- */
- appendStrBuf(c);
- /*
- * Stay in the DOCTYPE public identifier
- * (double-quoted) state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_DOCTYPE_PUBLIC_IDENTIFIER:
- afterdoctypepublicidentifierloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- state = transition(state, Tokenizer.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the between DOCTYPE public and
- * system identifiers state.
- */
- state = transition(state, Tokenizer.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS, reconsume, pos);
- break afterdoctypepublicidentifierloop;
- // continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Parse error.
- */
- errNoSpaceBetweenPublicAndSystemIds();
- /*
- * Set the DOCTYPE token's system identifier to
- * the empty string (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE system identifier
- * (double-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Parse error.
- */
- errNoSpaceBetweenPublicAndSystemIds();
- /*
- * Set the DOCTYPE token's system identifier to
- * the empty string (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE system identifier
- * (single-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED, reconsume, pos);
- continue stateloop;
- default:
- bogusDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:
- betweendoctypepublicandsystemidentifiersloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the between DOCTYPE public and system
- * identifiers state.
- */
- continue;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Set the DOCTYPE
- * token's system identifier to the empty string
- * (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE system identifier
- * (double-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED, reconsume, pos);
- break betweendoctypepublicandsystemidentifiersloop;
- // continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Set the DOCTYPE token's
- * system identifier to the empty string (not
- * missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE system identifier
- * (single-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED, reconsume, pos);
- continue stateloop;
- default:
- bogusDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:
- doctypesystemidentifierdoublequotedloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Switch to the after
- * DOCTYPE system identifier state.
- */
- systemIdentifier = strBufToString();
- state = transition(state, Tokenizer.AFTER_DOCTYPE_SYSTEM_IDENTIFIER, reconsume, pos);
- continue stateloop;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Parse error.
- */
- errGtInSystemId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- systemIdentifier = strBufToString();
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the current input
- * character to the current DOCTYPE token's
- * system identifier.
- */
- appendStrBuf(c);
- /*
- * Stay in the DOCTYPE system identifier
- * (double-quoted) state.
- */
- continue;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_DOCTYPE_SYSTEM_IDENTIFIER:
- afterdoctypesystemidentifierloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the after DOCTYPE system identifier state.
- */
- continue;
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit the current
- * DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- /*
- * Switch to the bogus DOCTYPE state. (This does
- * not set the DOCTYPE token's force-quirks flag
- * to on.)
- */
- bogusDoctypeWithoutQuirks();
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- break afterdoctypesystemidentifierloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case BOGUS_DOCTYPE:
- for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '>':
- /*
- * U+003E GREATER-THAN SIGN (>) Emit that
- * DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- default:
- /*
- * Anything else Stay in the bogus DOCTYPE
- * state.
- */
- continue;
- }
- }
- // XXX reorder point
- case DOCTYPE_YSTEM:
- doctypeystemloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Otherwise, if the six characters starting from the
- * current input character are an ASCII case-insensitive
- * match for the word "SYSTEM", then consume those
- * characters and switch to the before DOCTYPE system
- * identifier state.
- */
- if (index < 5) { // YSTEM.length
- char folded = c;
- if (c >= 'A' && c <= 'Z') {
- folded += 0x20;
- }
- if (folded != Tokenizer.YSTEM[index]) {
- bogusDoctype();
- reconsume = true;
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- index++;
- continue stateloop;
- } else {
- reconsume = true;
- state = transition(state, Tokenizer.AFTER_DOCTYPE_SYSTEM_KEYWORD, reconsume, pos);
- break doctypeystemloop;
- // continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case AFTER_DOCTYPE_SYSTEM_KEYWORD:
- afterdoctypesystemkeywordloop: for (;;) {
- if (reconsume) {
- reconsume = false;
- } else {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- }
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER, reconsume, pos);
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE
- * Switch to the before DOCTYPE public
- * identifier state.
- */
- state = transition(state, Tokenizer.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER, reconsume, pos);
- break afterdoctypesystemkeywordloop;
- // FALL THROUGH continue stateloop
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Parse Error.
- */
- errNoSpaceBetweenDoctypeSystemKeywordAndQuote();
- /*
- * Set the DOCTYPE token's system identifier to
- * the empty string (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE public identifier
- * (double-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Parse Error.
- */
- errNoSpaceBetweenDoctypeSystemKeywordAndQuote();
- /*
- * Set the DOCTYPE token's public identifier to
- * the empty string (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE public identifier
- * (single-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '>':
- /* U+003E GREATER-THAN SIGN (>) Parse error. */
- errExpectedPublicId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- bogusDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:
- beforedoctypesystemidentifierloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\r':
- silentCarriageReturn();
- break stateloop;
- case '\n':
- silentLineFeed();
- // fall thru
- case ' ':
- case '\t':
- case '\u000C':
- /*
- * U+0009 CHARACTER TABULATION U+000A LINE FEED
- * (LF) U+000C FORM FEED (FF) U+0020 SPACE Stay
- * in the before DOCTYPE system identifier
- * state.
- */
- continue;
- case '"':
- /*
- * U+0022 QUOTATION MARK (") Set the DOCTYPE
- * token's system identifier to the empty string
- * (not missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE system identifier
- * (double-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED, reconsume, pos);
- continue stateloop;
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Set the DOCTYPE token's
- * system identifier to the empty string (not
- * missing),
- */
- clearStrBufBeforeUse();
- /*
- * then switch to the DOCTYPE system identifier
- * (single-quoted) state.
- */
- state = transition(state, Tokenizer.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED, reconsume, pos);
- break beforedoctypesystemidentifierloop;
- // continue stateloop;
- case '>':
- /* U+003E GREATER-THAN SIGN (>) Parse error. */
- errExpectedSystemId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- default:
- bogusDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- // done by bogusDoctype();
- /*
- * Switch to the bogus DOCTYPE state.
- */
- state = transition(state, Tokenizer.BOGUS_DOCTYPE, reconsume, pos);
- continue stateloop;
- }
- }
- // FALLTHRU DON'T REORDER
- case DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Switch to the after
- * DOCTYPE system identifier state.
- */
- systemIdentifier = strBufToString();
- state = transition(state, Tokenizer.AFTER_DOCTYPE_SYSTEM_IDENTIFIER, reconsume, pos);
- continue stateloop;
- case '>':
- errGtInSystemId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- systemIdentifier = strBufToString();
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the current input
- * character to the current DOCTYPE token's
- * system identifier.
- */
- appendStrBuf(c);
- /*
- * Stay in the DOCTYPE system identifier
- * (double-quoted) state.
- */
- continue;
- }
- }
- // XXX reorder point
- case DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:
- for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- /*
- * Consume the next input character:
- */
- switch (c) {
- case '\'':
- /*
- * U+0027 APOSTROPHE (') Switch to the after
- * DOCTYPE public identifier state.
- */
- publicIdentifier = strBufToString();
- state = transition(state, Tokenizer.AFTER_DOCTYPE_PUBLIC_IDENTIFIER, reconsume, pos);
- continue stateloop;
- case '>':
- errGtInPublicId();
- /*
- * Set the DOCTYPE token's force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- publicIdentifier = strBufToString();
- emitDoctypeToken(pos);
- /*
- * Switch to the data state.
- */
- state = transition(state, Tokenizer.DATA, reconsume, pos);
- continue stateloop;
- case '\r':
- appendStrBufCarriageReturn();
- break stateloop;
- case '\n':
- appendStrBufLineFeed();
- continue;
- case '\u0000':
- c = '\uFFFD';
- // fall thru
- default:
- /*
- * Anything else Append the current input
- * character to the current DOCTYPE token's
- * public identifier.
- */
- appendStrBuf(c);
- /*
- * Stay in the DOCTYPE public identifier
- * (single-quoted) state.
- */
- continue;
- }
- }
- // XXX reorder point
- case PROCESSING_INSTRUCTION:
- processinginstructionloop: for (;;) {
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case '?':
- state = transition(
- state,
- Tokenizer.PROCESSING_INSTRUCTION_QUESTION_MARK,
- reconsume, pos);
- break processinginstructionloop;
- // continue stateloop;
- default:
- continue;
- }
- }
- case PROCESSING_INSTRUCTION_QUESTION_MARK:
- if (++pos == endPos) {
- break stateloop;
- }
- c = checkChar(buf, pos);
- switch (c) {
- case '>':
- state = transition(state, Tokenizer.DATA,
- reconsume, pos);
- continue stateloop;
- default:
- state = transition(state,
- Tokenizer.PROCESSING_INSTRUCTION,
- reconsume, pos);
- continue stateloop;
- }
- // END HOTSPOT WORKAROUND
- }
- }
- flushChars(buf, pos);
- /*
- * if (prevCR && pos != endPos) { // why is this needed? pos--; col--; }
- */
- // Save locals
- stateSave = state;
- returnStateSave = returnState;
- return pos;
- }
-
- // HOTSPOT WORKAROUND INSERTION POINT
-
- // [NOCPP[
-
- protected int transition(int from, int to, boolean reconsume, int pos) throws SAXException {
- return to;
- }
-
- // ]NOCPP]
-
- private void initDoctypeFields() {
- // Discard the characters "DOCTYPE" accumulated as a potential bogus
- // comment into strBuf.
- clearStrBufAfterUse();
- doctypeName = "";
- if (systemIdentifier != null) {
- Portability.releaseString(systemIdentifier);
- systemIdentifier = null;
- }
- if (publicIdentifier != null) {
- Portability.releaseString(publicIdentifier);
- publicIdentifier = null;
- }
- forceQuirks = false;
- }
-
- @Inline private void adjustDoubleHyphenAndAppendToStrBufCarriageReturn()
- throws SAXException {
- silentCarriageReturn();
- adjustDoubleHyphenAndAppendToStrBufAndErr('\n');
- }
-
- @Inline private void adjustDoubleHyphenAndAppendToStrBufLineFeed()
- throws SAXException {
- silentLineFeed();
- adjustDoubleHyphenAndAppendToStrBufAndErr('\n');
- }
-
- @Inline private void appendStrBufLineFeed() {
- silentLineFeed();
- appendStrBuf('\n');
- }
-
- @Inline private void appendStrBufCarriageReturn() {
- silentCarriageReturn();
- appendStrBuf('\n');
- }
-
- @Inline protected void silentCarriageReturn() {
- ++line;
- lastCR = true;
- }
-
- @Inline protected void silentLineFeed() {
- ++line;
- }
-
- private void emitCarriageReturn(@NoLength char[] buf, int pos)
- throws SAXException {
- silentCarriageReturn();
- flushChars(buf, pos);
- tokenHandler.characters(Tokenizer.LF, 0, 1);
- cstart = Integer.MAX_VALUE;
- }
-
- private void emitReplacementCharacter(@NoLength char[] buf, int pos)
- throws SAXException {
- flushChars(buf, pos);
- tokenHandler.zeroOriginatingReplacementCharacter();
- cstart = pos + 1;
- }
-
- private void emitPlaintextReplacementCharacter(@NoLength char[] buf, int pos)
- throws SAXException {
- flushChars(buf, pos);
- tokenHandler.characters(REPLACEMENT_CHARACTER, 0, 1);
- cstart = pos + 1;
- }
-
- private void setAdditionalAndRememberAmpersandLocation(char add) {
- additional = add;
- // [NOCPP[
- ampersandLocation = new LocatorImpl(this);
- // ]NOCPP]
- }
-
- private void bogusDoctype() throws SAXException {
- errBogusDoctype();
- forceQuirks = true;
- }
-
- private void bogusDoctypeWithoutQuirks() throws SAXException {
- errBogusDoctype();
- forceQuirks = false;
- }
-
- private void handleNcrValue(int returnState) throws SAXException {
- /*
- * If one or more characters match the range, then take them all and
- * interpret the string of characters as a number (either hexadecimal or
- * decimal as appropriate).
- */
- if (value <= 0xFFFF) {
- if (value >= 0x80 && value <= 0x9f) {
- /*
- * If that number is one of the numbers in the first column of
- * the following table, then this is a parse error.
- */
- errNcrInC1Range();
- /*
- * Find the row with that number in the first column, and return
- * a character token for the Unicode character given in the
- * second column of that row.
- */
- @NoLength char[] val = NamedCharacters.WINDOWS_1252[value - 0x80];
- emitOrAppendOne(val, returnState);
- // [NOCPP[
- } else if (value == 0xC
- && contentSpacePolicy != XmlViolationPolicy.ALLOW) {
- if (contentSpacePolicy == XmlViolationPolicy.ALTER_INFOSET) {
- emitOrAppendOne(Tokenizer.SPACE, returnState);
- } else if (contentSpacePolicy == XmlViolationPolicy.FATAL) {
- fatal("A character reference expanded to a form feed which is not legal XML 1.0 white space.");
- }
- // ]NOCPP]
- } else if (value == 0x0) {
- errNcrZero();
- emitOrAppendOne(Tokenizer.REPLACEMENT_CHARACTER, returnState);
- } else if ((value & 0xF800) == 0xD800) {
- errNcrSurrogate();
- emitOrAppendOne(Tokenizer.REPLACEMENT_CHARACTER, returnState);
- } else {
- /*
- * Otherwise, return a character token for the Unicode character
- * whose code point is that number.
- */
- char ch = (char) value;
- // [NOCPP[
- if (value == 0x0D) {
- errNcrCr();
- } else if ((value <= 0x0008) || (value == 0x000B)
- || (value >= 0x000E && value <= 0x001F)) {
- ch = errNcrControlChar(ch);
- } else if (value >= 0xFDD0 && value <= 0xFDEF) {
- errNcrUnassigned();
- } else if ((value & 0xFFFE) == 0xFFFE) {
- ch = errNcrNonCharacter(ch);
- } else if (value >= 0x007F && value <= 0x009F) {
- errNcrControlChar();
- } else {
- maybeWarnPrivateUse(ch);
- }
- // ]NOCPP]
- bmpChar[0] = ch;
- emitOrAppendOne(bmpChar, returnState);
- }
- } else if (value <= 0x10FFFF) {
- // [NOCPP[
- maybeWarnPrivateUseAstral();
- if ((value & 0xFFFE) == 0xFFFE) {
- errAstralNonCharacter(value);
- }
- // ]NOCPP]
- astralChar[0] = (char) (Tokenizer.LEAD_OFFSET + (value >> 10));
- astralChar[1] = (char) (0xDC00 + (value & 0x3FF));
- emitOrAppendTwo(astralChar, returnState);
- } else {
- errNcrOutOfRange();
- emitOrAppendOne(Tokenizer.REPLACEMENT_CHARACTER, returnState);
- }
- }
-
- public void eof() throws SAXException {
- int state = stateSave;
- int returnState = returnStateSave;
-
- eofloop: for (;;) {
- switch (state) {
- case SCRIPT_DATA_LESS_THAN_SIGN:
- case SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:
- /*
- * Otherwise, emit a U+003C LESS-THAN SIGN character token
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- /*
- * and reconsume the current input character in the data
- * state.
- */
- break eofloop;
- case TAG_OPEN:
- /*
- * The behavior of this state depends on the content model
- * flag.
- */
- /*
- * Anything else Parse error.
- */
- errEofAfterLt();
- /*
- * Emit a U+003C LESS-THAN SIGN character token
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- /*
- * and reconsume the current input character in the data
- * state.
- */
- break eofloop;
- case RAWTEXT_RCDATA_LESS_THAN_SIGN:
- /*
- * Emit a U+003C LESS-THAN SIGN character token
- */
- tokenHandler.characters(Tokenizer.LT_GT, 0, 1);
- /*
- * and reconsume the current input character in the RCDATA
- * state.
- */
- break eofloop;
- case NON_DATA_END_TAG_NAME:
- /*
- * Emit a U+003C LESS-THAN SIGN character token, a U+002F
- * SOLIDUS character token,
- */
- tokenHandler.characters(Tokenizer.LT_SOLIDUS, 0, 2);
- /*
- * a character token for each of the characters in the
- * temporary buffer (in the order they were added to the
- * buffer),
- */
- emitStrBuf();
- /*
- * and reconsume the current input character in the RCDATA
- * state.
- */
- break eofloop;
- case CLOSE_TAG_OPEN:
- /* EOF Parse error. */
- errEofAfterLt();
- /*
- * Emit a U+003C LESS-THAN SIGN character token and a U+002F
- * SOLIDUS character token.
- */
- tokenHandler.characters(Tokenizer.LT_SOLIDUS, 0, 2);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case TAG_NAME:
- /*
- * EOF Parse error.
- */
- errEofInTagName();
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case BEFORE_ATTRIBUTE_NAME:
- case AFTER_ATTRIBUTE_VALUE_QUOTED:
- case SELF_CLOSING_START_TAG:
- /* EOF Parse error. */
- errEofWithoutGt();
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case ATTRIBUTE_NAME:
- /*
- * EOF Parse error.
- */
- errEofInAttributeName();
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case AFTER_ATTRIBUTE_NAME:
- case BEFORE_ATTRIBUTE_VALUE:
- /* EOF Parse error. */
- errEofWithoutGt();
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case ATTRIBUTE_VALUE_DOUBLE_QUOTED:
- case ATTRIBUTE_VALUE_SINGLE_QUOTED:
- case ATTRIBUTE_VALUE_UNQUOTED:
- /* EOF Parse error. */
- errEofInAttributeValue();
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case BOGUS_COMMENT:
- emitComment(0, 0);
- break eofloop;
- case BOGUS_COMMENT_HYPHEN:
- // [NOCPP[
- maybeAppendSpaceToBogusComment();
- // ]NOCPP]
- emitComment(0, 0);
- break eofloop;
- case MARKUP_DECLARATION_OPEN:
- errBogusComment();
- emitComment(0, 0);
- break eofloop;
- case MARKUP_DECLARATION_HYPHEN:
- errBogusComment();
- emitComment(0, 0);
- break eofloop;
- case MARKUP_DECLARATION_OCTYPE:
- if (index < 6) {
- errBogusComment();
- emitComment(0, 0);
- } else {
- /* EOF Parse error. */
- errEofInDoctype();
- /*
- * Create a new DOCTYPE token. Set its force-quirks flag
- * to on.
- */
- doctypeName = "";
- if (systemIdentifier != null) {
- Portability.releaseString(systemIdentifier);
- systemIdentifier = null;
- }
- if (publicIdentifier != null) {
- Portability.releaseString(publicIdentifier);
- publicIdentifier = null;
- }
- forceQuirks = true;
- /*
- * Emit the token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- }
- break eofloop;
- case COMMENT_START:
- case COMMENT:
- /*
- * EOF Parse error.
- */
- errEofInComment();
- /* Emit the comment token. */
- emitComment(0, 0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case COMMENT_END:
- errEofInComment();
- /* Emit the comment token. */
- emitComment(2, 0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case COMMENT_END_DASH:
- case COMMENT_START_DASH:
- errEofInComment();
- /* Emit the comment token. */
- emitComment(1, 0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case COMMENT_END_BANG:
- errEofInComment();
- /* Emit the comment token. */
- emitComment(3, 0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case DOCTYPE:
- case BEFORE_DOCTYPE_NAME:
- errEofInDoctype();
- /*
- * Create a new DOCTYPE token. Set its force-quirks flag to
- * on.
- */
- forceQuirks = true;
- /*
- * Emit the token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case DOCTYPE_NAME:
- errEofInDoctype();
- strBufToDoctypeName();
- /*
- * Set the DOCTYPE token's force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case DOCTYPE_UBLIC:
- case DOCTYPE_YSTEM:
- case AFTER_DOCTYPE_NAME:
- case AFTER_DOCTYPE_PUBLIC_KEYWORD:
- case AFTER_DOCTYPE_SYSTEM_KEYWORD:
- case BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:
- errEofInDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:
- case DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:
- /* EOF Parse error. */
- errEofInPublicId();
- /*
- * Set the DOCTYPE token's force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- publicIdentifier = strBufToString();
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case AFTER_DOCTYPE_PUBLIC_IDENTIFIER:
- case BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:
- case BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:
- errEofInDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:
- case DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:
- /* EOF Parse error. */
- errEofInSystemId();
- /*
- * Set the DOCTYPE token's force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- systemIdentifier = strBufToString();
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case AFTER_DOCTYPE_SYSTEM_IDENTIFIER:
- errEofInDoctype();
- /*
- * Set the DOCTYPE token's force-quirks flag to on.
- */
- forceQuirks = true;
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case BOGUS_DOCTYPE:
- /*
- * Emit that DOCTYPE token.
- */
- emitDoctypeToken(0);
- /*
- * Reconsume the EOF character in the data state.
- */
- break eofloop;
- case CONSUME_CHARACTER_REFERENCE:
- /*
- * Unlike the definition is the spec, this state does not
- * return a value and never requires the caller to
- * backtrack. This state takes care of emitting characters
- * or appending to the current attribute value. It also
- * takes care of that in the case when consuming the entity
- * fails.
- */
- /*
- * This section defines how to consume an entity. This
- * definition is used when parsing entities in text and in
- * attributes.
- *
- * The behavior depends on the identity of the next
- * character (the one immediately after the U+0026 AMPERSAND
- * character):
- */
-
- emitOrAppendCharRefBuf(returnState);
- state = returnState;
- continue;
- case CHARACTER_REFERENCE_HILO_LOOKUP:
- errNoNamedCharacterMatch();
- emitOrAppendCharRefBuf(returnState);
- state = returnState;
- continue;
- case CHARACTER_REFERENCE_TAIL:
- outer: for (;;) {
- char c = '\u0000';
- entCol++;
- /*
- * Consume the maximum number of characters possible,
- * with the consumed characters matching one of the
- * identifiers in the first column of the named
- * character references table (in a case-sensitive
- * manner).
- */
- hiloop: for (;;) {
- if (hi == -1) {
- break hiloop;
- }
- if (entCol == NamedCharacters.NAMES[hi].length()) {
- break hiloop;
- }
- if (entCol > NamedCharacters.NAMES[hi].length()) {
- break outer;
- } else if (c < NamedCharacters.NAMES[hi].charAt(entCol)) {
- hi--;
- } else {
- break hiloop;
- }
- }
-
- loloop: for (;;) {
- if (hi < lo) {
- break outer;
- }
- if (entCol == NamedCharacters.NAMES[lo].length()) {
- candidate = lo;
- charRefBufMark = charRefBufLen;
- lo++;
- } else if (entCol > NamedCharacters.NAMES[lo].length()) {
- break outer;
- } else if (c > NamedCharacters.NAMES[lo].charAt(entCol)) {
- lo++;
- } else {
- break loloop;
- }
- }
- if (hi < lo) {
- break outer;
- }
- continue;
- }
-
- if (candidate == -1) {
- /*
- * If no match can be made, then this is a parse error.
- */
- errNoNamedCharacterMatch();
- emitOrAppendCharRefBuf(returnState);
- state = returnState;
- continue eofloop;
- } else {
- @Const @CharacterName String candidateName = NamedCharacters.NAMES[candidate];
- if (candidateName.length() == 0
- || candidateName.charAt(candidateName.length() - 1) != ';') {
- /*
- * If the last character matched is not a U+003B
- * SEMICOLON (;), there is a parse error.
- */
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- /*
- * If the entity is being consumed as part of an
- * attribute, and the last character matched is
- * not a U+003B SEMICOLON (;),
- */
- char ch;
- if (charRefBufMark == charRefBufLen) {
- ch = '\u0000';
- } else {
- ch = charRefBuf[charRefBufMark];
- }
- if ((ch >= '0' && ch <= '9')
- || (ch >= 'A' && ch <= 'Z')
- || (ch >= 'a' && ch <= 'z')) {
- /*
- * and the next character is in the range
- * U+0030 DIGIT ZERO to U+0039 DIGIT NINE,
- * U+0041 LATIN CAPITAL LETTER A to U+005A
- * LATIN CAPITAL LETTER Z, or U+0061 LATIN
- * SMALL LETTER A to U+007A LATIN SMALL
- * LETTER Z, then, for historical reasons,
- * all the characters that were matched
- * after the U+0026 AMPERSAND (&) must be
- * unconsumed, and nothing is returned.
- */
- errNoNamedCharacterMatch();
- appendCharRefBufToStrBuf();
- state = returnState;
- continue eofloop;
- }
- }
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- errUnescapedAmpersandInterpretedAsCharacterReference();
- } else {
- errNotSemicolonTerminated();
- }
- }
-
- /*
- * Otherwise, return a character token for the character
- * corresponding to the entity name (as given by the
- * second column of the named character references
- * table).
- */
- @Const @NoLength char[] val = NamedCharacters.VALUES[candidate];
- if (
- // [NOCPP[
- val.length == 1
- // ]NOCPP]
- // CPPONLY: val[1] == 0
- ) {
- emitOrAppendOne(val, returnState);
- } else {
- emitOrAppendTwo(val, returnState);
- }
- // this is so complicated!
- if (charRefBufMark < charRefBufLen) {
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- appendStrBuf(charRefBuf, charRefBufMark,
- charRefBufLen - charRefBufMark);
- } else {
- tokenHandler.characters(charRefBuf, charRefBufMark,
- charRefBufLen - charRefBufMark);
- }
- }
- charRefBufLen = 0;
- state = returnState;
- continue eofloop;
- /*
- * If the markup contains I'm ¬it; I tell you, the
- * entity is parsed as "not", as in, I'm ¬it; I tell
- * you. But if the markup was I'm ∉ I tell you,
- * the entity would be parsed as "notin;", resulting in
- * I'm ∉ I tell you.
- */
- }
- case CONSUME_NCR:
- case DECIMAL_NRC_LOOP:
- case HEX_NCR_LOOP:
- /*
- * If no characters match the range, then don't consume any
- * characters (and unconsume the U+0023 NUMBER SIGN
- * character and, if appropriate, the X character). This is
- * a parse error; nothing is returned.
- *
- * Otherwise, if the next character is a U+003B SEMICOLON,
- * consume that too. If it isn't, there is a parse error.
- */
- if (!seenDigits) {
- errNoDigitsInNCR();
- emitOrAppendCharRefBuf(returnState);
- state = returnState;
- continue;
- } else {
- errCharRefLacksSemicolon();
- }
- // WARNING previous state sets reconsume
- handleNcrValue(returnState);
- state = returnState;
- continue;
- case CDATA_RSQB:
- tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 1);
- break eofloop;
- case CDATA_RSQB_RSQB:
- tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 2);
- break eofloop;
- case DATA:
- default:
- break eofloop;
- }
- }
- // case DATA:
- /*
- * EOF Emit an end-of-file token.
- */
- tokenHandler.eof();
- return;
- }
-
- private void emitDoctypeToken(int pos) throws SAXException {
- cstart = pos + 1;
- tokenHandler.doctype(doctypeName, publicIdentifier, systemIdentifier,
- forceQuirks);
- // It is OK and sufficient to release these here, since
- // there's no way out of the doctype states than through paths
- // that call this method.
- doctypeName = null;
- Portability.releaseString(publicIdentifier);
- publicIdentifier = null;
- Portability.releaseString(systemIdentifier);
- systemIdentifier = null;
- }
-
- @Inline protected char checkChar(@NoLength char[] buf, int pos)
- throws SAXException {
- return buf[pos];
- }
-
- public boolean internalEncodingDeclaration(String internalCharset)
- throws SAXException {
- if (encodingDeclarationHandler != null) {
- return encodingDeclarationHandler.internalEncodingDeclaration(internalCharset);
- }
- return false;
- }
-
- /**
- * @param val
- * @throws SAXException
- */
- private void emitOrAppendTwo(@Const @NoLength char[] val, int returnState)
- throws SAXException {
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- appendStrBuf(val[0]);
- appendStrBuf(val[1]);
- } else {
- tokenHandler.characters(val, 0, 2);
- }
- }
-
- private void emitOrAppendOne(@Const @NoLength char[] val, int returnState)
- throws SAXException {
- if ((returnState & DATA_AND_RCDATA_MASK) != 0) {
- appendStrBuf(val[0]);
- } else {
- tokenHandler.characters(val, 0, 1);
- }
- }
-
- public void end() throws SAXException {
- strBuf = null;
- doctypeName = null;
- if (systemIdentifier != null) {
- Portability.releaseString(systemIdentifier);
- systemIdentifier = null;
- }
- if (publicIdentifier != null) {
- Portability.releaseString(publicIdentifier);
- publicIdentifier = null;
- }
- if (tagName != null) {
- tagName.release();
- tagName = null;
- }
- if (attributeName != null) {
- attributeName.release();
- attributeName = null;
- }
- tokenHandler.endTokenization();
- if (attributes != null) {
- // [NOCPP[
- attributes = null;
- // ]NOCPP]
- // CPPONLY: attributes.clear(mappingLangToXmlLang);
- }
- }
-
- public void requestSuspension() {
- shouldSuspend = true;
- }
-
- // [NOCPP[
-
- public void becomeConfident() {
- confident = true;
- }
-
- /**
- * Returns the nextCharOnNewLine.
- *
- * @return the nextCharOnNewLine
- */
- public boolean isNextCharOnNewLine() {
- return false;
- }
-
- public boolean isPrevCR() {
- return lastCR;
- }
-
- /**
- * Returns the line.
- *
- * @return the line
- */
- public int getLine() {
- return -1;
- }
-
- /**
- * Returns the col.
- *
- * @return the col
- */
- public int getCol() {
- return -1;
- }
-
- // ]NOCPP]
-
- public boolean isInDataState() {
- return (stateSave == DATA);
- }
-
- public void resetToDataState() {
- clearStrBufAfterUse();
- charRefBufLen = 0;
- stateSave = Tokenizer.DATA;
- // line = 1; XXX line numbers
- lastCR = false;
- index = 0;
- forceQuirks = false;
- additional = '\u0000';
- entCol = -1;
- firstCharKey = -1;
- lo = 0;
- hi = 0; // will always be overwritten before use anyway
- candidate = -1;
- charRefBufMark = 0;
- value = 0;
- seenDigits = false;
- endTag = false;
- shouldSuspend = false;
- initDoctypeFields();
- if (tagName != null) {
- tagName.release();
- tagName = null;
- }
- if (attributeName != null) {
- attributeName.release();
- attributeName = null;
- }
- if (newAttributesEachTime) {
- if (attributes != null) {
- Portability.delete(attributes);
- attributes = null;
- }
- }
- }
-
- public void loadState(Tokenizer other) throws SAXException {
- strBufLen = other.strBufLen;
- if (strBufLen > strBuf.length) {
- strBuf = new char[strBufLen];
- }
- System.arraycopy(other.strBuf, 0, strBuf, 0, strBufLen);
-
- charRefBufLen = other.charRefBufLen;
- System.arraycopy(other.charRefBuf, 0, charRefBuf, 0, charRefBufLen);
-
- stateSave = other.stateSave;
- returnStateSave = other.returnStateSave;
- endTagExpectation = other.endTagExpectation;
- endTagExpectationAsArray = other.endTagExpectationAsArray;
- // line = 1; XXX line numbers
- lastCR = other.lastCR;
- index = other.index;
- forceQuirks = other.forceQuirks;
- additional = other.additional;
- entCol = other.entCol;
- firstCharKey = other.firstCharKey;
- lo = other.lo;
- hi = other.hi;
- candidate = other.candidate;
- charRefBufMark = other.charRefBufMark;
- value = other.value;
- seenDigits = other.seenDigits;
- endTag = other.endTag;
- shouldSuspend = false;
-
- if (other.doctypeName == null) {
- doctypeName = null;
- } else {
- doctypeName = Portability.newLocalFromLocal(other.doctypeName,
- interner);
- }
-
- Portability.releaseString(systemIdentifier);
- if (other.systemIdentifier == null) {
- systemIdentifier = null;
- } else {
- systemIdentifier = Portability.newStringFromString(other.systemIdentifier);
- }
-
- Portability.releaseString(publicIdentifier);
- if (other.publicIdentifier == null) {
- publicIdentifier = null;
- } else {
- publicIdentifier = Portability.newStringFromString(other.publicIdentifier);
- }
-
- if (tagName != null) {
- tagName.release();
- }
- if (other.tagName == null) {
- tagName = null;
- } else {
- tagName = other.tagName.cloneElementName(interner);
- }
-
- if (attributeName != null) {
- attributeName.release();
- }
- if (other.attributeName == null) {
- attributeName = null;
- } else {
- attributeName = other.attributeName.cloneAttributeName(interner);
- }
-
- Portability.delete(attributes);
- if (other.attributes == null) {
- attributes = null;
- } else {
- attributes = other.attributes.cloneAttributes(interner);
- }
- }
-
- public void initializeWithoutStarting() throws SAXException {
- confident = false;
- strBuf = null;
- line = 1;
- // CPPONLY: attributeLine = 1;
- // [NOCPP[
- html4 = false;
- metaBoundaryPassed = false;
- wantsComments = tokenHandler.wantsComments();
- if (!newAttributesEachTime) {
- attributes = new HtmlAttributes(mappingLangToXmlLang);
- }
- // ]NOCPP]
- resetToDataState();
- }
-
- protected void errGarbageAfterLtSlash() throws SAXException {
- }
-
- protected void errLtSlashGt() throws SAXException {
- }
-
- protected void errWarnLtSlashInRcdata() throws SAXException {
- }
-
- protected void errHtml4LtSlashInRcdata(char folded) throws SAXException {
- }
-
- protected void errCharRefLacksSemicolon() throws SAXException {
- }
-
- protected void errNoDigitsInNCR() throws SAXException {
- }
-
- protected void errGtInSystemId() throws SAXException {
- }
-
- protected void errGtInPublicId() throws SAXException {
- }
-
- protected void errNamelessDoctype() throws SAXException {
- }
-
- protected void errConsecutiveHyphens() throws SAXException {
- }
-
- protected void errPrematureEndOfComment() throws SAXException {
- }
-
- protected void errBogusComment() throws SAXException {
- }
-
- protected void errUnquotedAttributeValOrNull(char c) throws SAXException {
- }
-
- protected void errSlashNotFollowedByGt() throws SAXException {
- }
-
- protected void errHtml4XmlVoidSyntax() throws SAXException {
- }
-
- protected void errNoSpaceBetweenAttributes() throws SAXException {
- }
-
- protected void errHtml4NonNameInUnquotedAttribute(char c)
- throws SAXException {
- }
-
- protected void errLtOrEqualsOrGraveInUnquotedAttributeOrNull(char c)
- throws SAXException {
- }
-
- protected void errAttributeValueMissing() throws SAXException {
- }
-
- protected void errBadCharBeforeAttributeNameOrNull(char c)
- throws SAXException {
- }
-
- protected void errEqualsSignBeforeAttributeName() throws SAXException {
- }
-
- protected void errBadCharAfterLt(char c) throws SAXException {
- }
-
- protected void errLtGt() throws SAXException {
- }
-
- protected void errProcessingInstruction() throws SAXException {
- }
-
- protected void errUnescapedAmpersandInterpretedAsCharacterReference()
- throws SAXException {
- }
-
- protected void errNotSemicolonTerminated() throws SAXException {
- }
-
- protected void errNoNamedCharacterMatch() throws SAXException {
- }
-
- protected void errQuoteBeforeAttributeName(char c) throws SAXException {
- }
-
- protected void errQuoteOrLtInAttributeNameOrNull(char c)
- throws SAXException {
- }
-
- protected void errExpectedPublicId() throws SAXException {
- }
-
- protected void errBogusDoctype() throws SAXException {
- }
-
- protected void maybeWarnPrivateUseAstral() throws SAXException {
- }
-
- protected void maybeWarnPrivateUse(char ch) throws SAXException {
- }
-
- protected void maybeErrAttributesOnEndTag(HtmlAttributes attrs)
- throws SAXException {
- }
-
- protected void maybeErrSlashInEndTag(boolean selfClosing)
- throws SAXException {
- }
-
- protected char errNcrNonCharacter(char ch) throws SAXException {
- return ch;
- }
-
- protected void errAstralNonCharacter(int ch) throws SAXException {
- }
-
- protected void errNcrSurrogate() throws SAXException {
- }
-
- protected char errNcrControlChar(char ch) throws SAXException {
- return ch;
- }
-
- protected void errNcrCr() throws SAXException {
- }
-
- protected void errNcrInC1Range() throws SAXException {
- }
-
- protected void errEofInPublicId() throws SAXException {
- }
-
- protected void errEofInComment() throws SAXException {
- }
-
- protected void errEofInDoctype() throws SAXException {
- }
-
- protected void errEofInAttributeValue() throws SAXException {
- }
-
- protected void errEofInAttributeName() throws SAXException {
- }
-
- protected void errEofWithoutGt() throws SAXException {
- }
-
- protected void errEofInTagName() throws SAXException {
- }
-
- protected void errEofInEndTag() throws SAXException {
- }
-
- protected void errEofAfterLt() throws SAXException {
- }
-
- protected void errNcrOutOfRange() throws SAXException {
- }
-
- protected void errNcrUnassigned() throws SAXException {
- }
-
- protected void errDuplicateAttribute() throws SAXException {
- }
-
- protected void errEofInSystemId() throws SAXException {
- }
-
- protected void errExpectedSystemId() throws SAXException {
- }
-
- protected void errMissingSpaceBeforeDoctypeName() throws SAXException {
- }
-
- protected void errHyphenHyphenBang() throws SAXException {
- }
-
- protected void errNcrControlChar() throws SAXException {
- }
-
- protected void errNcrZero() throws SAXException {
- }
-
- protected void errNoSpaceBetweenDoctypeSystemKeywordAndQuote()
- throws SAXException {
- }
-
- protected void errNoSpaceBetweenPublicAndSystemIds() throws SAXException {
- }
-
- protected void errNoSpaceBetweenDoctypePublicKeywordAndQuote()
- throws SAXException {
- }
-
- protected void noteAttributeWithoutValue() throws SAXException {
- }
-
- protected void noteUnquotedAttributeValue() throws SAXException {
- }
-
- /**
- * Sets the encodingDeclarationHandler.
- *
- * @param encodingDeclarationHandler
- * the encodingDeclarationHandler to set
- */
- public void setEncodingDeclarationHandler(
- EncodingDeclarationHandler encodingDeclarationHandler) {
- this.encodingDeclarationHandler = encodingDeclarationHandler;
- }
-
- void destructor() {
- // The translator will write refcount tracing stuff here
- Portability.delete(attributes);
- attributes = null;
- }
-
- // [NOCPP[
-
- /**
- * Sets an offset to be added to the position reported to
- * TransitionHandler.
- *
- * @param offset the offset
- */
- public void setTransitionBaseOffset(int offset) {
-
- }
-
- // ]NOCPP]
-
-}
diff --git a/parser/html/javasrc/TreeBuilder.java b/parser/html/javasrc/TreeBuilder.java
deleted file mode 100644
index 58074086d3..0000000000
--- a/parser/html/javasrc/TreeBuilder.java
+++ /dev/null
@@ -1,6552 +0,0 @@
-/*
- * Copyright (c) 2007 Henri Sivonen
- * Copyright (c) 2007-2015 Mozilla Foundation
- * Copyright (c) 2018-2019 Moonchild Productions
- * 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
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * The comments following this one that use the same comment syntax as this
- * comment are quotes from the WHATWG HTML 5 spec as of 27 June 2007
- * amended as of June 28 2007.
- * That document came with this statement:
- * "© Copyright 2004-2007 Apple Computer, Inc., Mozilla Foundation, and
- * Opera Software ASA. You are granted a license to use, reproduce and
- * create derivative works of this document."
- */
-
-package nu.validator.htmlparser.impl;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import nu.validator.htmlparser.annotation.Auto;
-import nu.validator.htmlparser.annotation.Const;
-import nu.validator.htmlparser.annotation.IdType;
-import nu.validator.htmlparser.annotation.Inline;
-import nu.validator.htmlparser.annotation.Literal;
-import nu.validator.htmlparser.annotation.Local;
-import nu.validator.htmlparser.annotation.NoLength;
-import nu.validator.htmlparser.annotation.NsUri;
-import nu.validator.htmlparser.common.DoctypeExpectation;
-import nu.validator.htmlparser.common.DocumentMode;
-import nu.validator.htmlparser.common.DocumentModeHandler;
-import nu.validator.htmlparser.common.Interner;
-import nu.validator.htmlparser.common.TokenHandler;
-import nu.validator.htmlparser.common.XmlViolationPolicy;
-
-public abstract class TreeBuilder