From 3c3f765634daeb0a78f207f678a64e8e5fbcf834 Mon Sep 17 00:00:00 2001 From: Henri Sivonen Date: Wed, 13 May 2026 11:25:30 +0300 Subject: [PATCH] Mozilla bug 2037935 - Special-case the most common element and attribute names in Speedometer3 innerHTML/DOMParser parsing. --- .../htmlparser/impl/AttributeName.java | 851 +++++++++--------- .../htmlparser/impl/ElementName.java | 578 ++++++------ .../htmlparser/impl/Portability.java | 20 + .../htmlparser/cpptranslate/CppTypes.java | 6 +- .../htmlparser/cpptranslate/CppVisitor.java | 2 + 5 files changed, 793 insertions(+), 664 deletions(-) diff --git a/src/nu/validator/htmlparser/impl/AttributeName.java b/src/nu/validator/htmlparser/impl/AttributeName.java index bf4e204d..26b3ceb7 100644 --- a/src/nu/validator/htmlparser/impl/AttributeName.java +++ b/src/nu/validator/htmlparser/impl/AttributeName.java @@ -212,7 +212,42 @@ public final class AttributeName */ @Inline static AttributeName nameByBuffer(@NoLength char[] buf, int length, Interner interner) { - // XXX deal with offset + if (length == 5) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "class")) { + return AttributeName.CLASS; + } + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "value")) { + return AttributeName.VALUE; + } + } else if (length > 5) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "data-")) { + if (length == 7 && Portability.bufferStartsWithLiteralAtOffsetAssumeSufficientLength(buf, "id", 5)) { + return AttributeName.DATA_ID; + } + if (length == 13 && Portability.bufferStartsWithLiteralAtOffsetAssumeSufficientLength(buf, "priority", 5)) { + return AttributeName.DATA_PRIORITY; + } + return null; + } + if (length == 7) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "checked")) { + return AttributeName.CHECKED; + } + } + } else if (length == 4) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "type")) { + return AttributeName.TYPE; + } + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "href")) { + return AttributeName.HREF; + } + } else if (length == 2) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "id")) { + return AttributeName.ID; + } + // Should we have `is` here? + } + // Should be have `src`, `alt`, etc. here? @Unsigned int hash = AttributeName.bufToHash(buf, length); int[] hashes; hashes = AttributeName.ATTRIBUTE_HASHES; @@ -486,6 +521,22 @@ boolean equalsAnother(AttributeName another) { return this.getLocal(AttributeName.HTML) == another.getLocal(AttributeName.HTML); } + public static final AttributeName DATA_ID = new AttributeName(ALL_NO_NS, "data-id", "data-id", "data-id", "data-id", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + + public static final AttributeName DATA_PRIORITY = new AttributeName(ALL_NO_NS, "data-priority", "data-priority", "data-priority", "data-priority", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + + public static final AttributeName CLASS = new AttributeName(ALL_NO_NS, "class", "class", "class", "class", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + + public static final AttributeName VALUE = new AttributeName(ALL_NO_NS, "value", "value", "value", "value", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + + public static final AttributeName CHECKED = new AttributeName(ALL_NO_NS, "checked", "checked", "checked", "checked", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN); + + public static final AttributeName TYPE = new AttributeName(ALL_NO_NS, "type", "type", "type", "type", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED); + + public static final AttributeName HREF = new AttributeName(ALL_NO_NS, "href", "href", "href", "href", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + + public static final AttributeName ID = new AttributeName(ALL_NO_NS, "id", "id", "id", "id", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + // START CODE ONLY USED FOR GENERATING CODE uncomment to regenerate // /** @@ -779,7 +830,6 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName ONDBLCLICK = new AttributeName(ALL_NO_NS, "ondblclick", "ondblclick", "ondblclick", "ondblclick", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName ONABORT = new AttributeName(ALL_NO_NS, "onabort", "onabort", "onabort", "onabort", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName CALCMODE = new AttributeName(ALL_NO_NS, "calcmode", "calcmode", "calcMode", "calcmode", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); - public static final AttributeName CHECKED = new AttributeName(ALL_NO_NS, "checked", "checked", "checked", "checked", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN); public static final AttributeName FENCE = new AttributeName(ALL_NO_NS, "fence", "fence", "fence", "fence", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName FETCHPRIORITY = new AttributeName(ALL_NO_NS, "fetchpriority", "fetchpriority", "fetchpriority", "fetchpriority", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName NONCE = new AttributeName(ALL_NO_NS, "nonce", "nonce", "nonce", "nonce", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); @@ -790,7 +840,6 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName SPECULAREXPONENT = new AttributeName(ALL_NO_NS, "specularexponent", "specularexponent", "specularExponent", "specularexponent", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SPECULARCONSTANT = new AttributeName(ALL_NO_NS, "specularconstant", "specularconstant", "specularConstant", "specularconstant", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName BORDER = new AttributeName(ALL_NO_NS, "border", "border", "border", "border", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); - public static final AttributeName ID = new AttributeName(ALL_NO_NS, "id", "id", "id", "id", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName GRADIENTTRANSFORM = new AttributeName(ALL_NO_NS, "gradienttransform", "gradienttransform", "gradientTransform", "gradienttransform", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName GRADIENTUNITS = new AttributeName(ALL_NO_NS, "gradientunits", "gradientunits", "gradientUnits", "gradientunits", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName HIDDEN = new AttributeName(ALL_NO_NS, "hidden", "hidden", "hidden", "hidden", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); @@ -804,11 +853,11 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName SHADOWROOTCLONABLE = new AttributeName(ALL_NO_NS, "shadowrootclonable", "shadowrootclonable", "shadowrootclonable", "shadowrootclonable", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SHADOWROOTSERIALIZABLE = new AttributeName(ALL_NO_NS, "shadowrootserializable", "shadowrootserializable", "shadowrootserializable", "shadowrootserializable", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SRCDOC = new AttributeName(ALL_NO_NS, "srcdoc", "srcdoc", "srcdoc", "srcdoc", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); + public static final AttributeName SHADOWROOTSLOTASSIGNMENT = new AttributeName(ALL_NO_NS, "shadowrootslotassignment", "shadowrootslotassignment", "shadowrootslotassignment", "shadowrootslotassignment", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName STDDEVIATION = new AttributeName(ALL_NO_NS, "stddeviation", "stddeviation", "stdDeviation", "stddeviation", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SANDBOX = new AttributeName(ALL_NO_NS, "sandbox", "sandbox", "sandbox", "sandbox", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SHADOWROOTCUSTOMELEMENTREGISTRY = new AttributeName(ALL_NO_NS, "shadowrootcustomelementregistry", "shadowrootcustomelementregistry", "shadowrootcustomelementregistry", "shadowrootcustomelementregistry", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SHADOWROOTDELEGATESFOCUS = new AttributeName(ALL_NO_NS, "shadowrootdelegatesfocus", "shadowrootdelegatesfocus", "shadowrootdelegatesfocus", "shadowrootdelegatesfocus", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); - public static final AttributeName SHADOWROOTSLOTASSIGNMENT = new AttributeName(ALL_NO_NS, "shadowrootslotassignment", "shadowrootslotassignment", "shadowrootslotassignment", "shadowrootslotassignment", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName WORD_SPACING = new AttributeName(ALL_NO_NS, "word-spacing", "word-spacing", "word-spacing", "word-spacing", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName ACCENTUNDER = new AttributeName(ALL_NO_NS, "accentunder", "accentunder", "accentunder", "accentunder", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName ACCEPT_CHARSET = new AttributeName(ALL_NO_NS, "accept-charset", "accept-charset", "accept-charset", "accept-charset", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); @@ -876,9 +925,7 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName SPREADMETHOD = new AttributeName(ALL_NO_NS, "spreadmethod", "spreadmethod", "spreadMethod", "spreadmethod", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SELECTION = new AttributeName(ALL_NO_NS, "selection", "selection", "selection", "selection", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName SIZE = new AttributeName(ALL_NO_NS, "size", "size", "size", "size", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); - public static final AttributeName TYPE = new AttributeName(ALL_NO_NS, "type", "type", "type", "type", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED); public static final AttributeName DIFFUSECONSTANT = new AttributeName(ALL_NO_NS, "diffuseconstant", "diffuseconstant", "diffuseConstant", "diffuseconstant", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); - public static final AttributeName HREF = new AttributeName(ALL_NO_NS, "href", "href", "href", "href", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName HREFLANG = new AttributeName(ALL_NO_NS, "hreflang", "hreflang", "hreflang", "hreflang", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName ONAFTERPRINT = new AttributeName(ALL_NO_NS, "onafterprint", "onafterprint", "onafterprint", "onafterprint", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName PROFILE = new AttributeName(ALL_NO_NS, "profile", "profile", "profile", "profile", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); @@ -1111,7 +1158,6 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName CURSOR = new AttributeName(ALL_NO_NS, "cursor", "cursor", "cursor", "cursor", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName CLOSURE = new AttributeName(ALL_NO_NS, "closure", "closure", "closure", "closure", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName CLOSE = new AttributeName(ALL_NO_NS, "close", "close", "close", "close", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); - public static final AttributeName CLASS = new AttributeName(ALL_NO_NS, "class", "class", "class", "class", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName IS = new AttributeName(ALL_NO_NS, "is", "is", "is", "is", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName KEYSYSTEM = new AttributeName(ALL_NO_NS, "keysystem", "keysystem", "keysystem", "keysystem", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName KEYSPLINES = new AttributeName(ALL_NO_NS, "keysplines", "keysplines", "keySplines", "keysplines", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); @@ -1185,7 +1231,6 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName REQUIREDEXTENSIONS = new AttributeName(ALL_NO_NS, "requiredextensions", "requiredextensions", "requiredExtensions", "requiredextensions", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName VALUES = new AttributeName(ALL_NO_NS, "values", "values", "values", "values", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName VALUETYPE = new AttributeName(ALL_NO_NS, "valuetype", "valuetype", "valuetype", "valuetype", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED); - public static final AttributeName VALUE = new AttributeName(ALL_NO_NS, "value", "value", "value", "value", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName ELEVATION = new AttributeName(ALL_NO_NS, "elevation", "elevation", "elevation", "elevation", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName VIEWTARGET = new AttributeName(ALL_NO_NS, "viewtarget", "viewtarget", "viewTarget", "viewtarget", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName VIEWBOX = new AttributeName(ALL_NO_NS, "viewbox", "viewbox", "viewBox", "viewbox", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); @@ -1201,133 +1246,133 @@ boolean equalsAnother(AttributeName another) { public static final AttributeName RY = new AttributeName(ALL_NO_NS, "ry", "ry", "ry", "ry", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); public static final AttributeName REFY = new AttributeName(ALL_NO_NS, "refy", "refy", "refY", "refy", ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG); private final static @NoLength AttributeName[] ATTRIBUTE_NAMES = { - MARKERWIDTH, - BASELINE_SHIFT, - SHAPE, + AMPLITUDE, + BASELINE, + TEMPLATE, CLEAR, - PROFILE, - XLINK_SHOW, - FONT_WEIGHT, + ALIGNMENT_BASELINE, + AUTOCOMPLETE, + FONT_VARIANT, ARIA_DISABLED, - OPACITY, - ONMESSAGE, - ONCHANGE, - ZOOMANDPAN, - ONMOUSEOUT, - CLASSID, - ACCUMULATE, + SPACING, + ONBEFOREPRINT, + ACTIONTYPE, + EVENT, + RQUOTE, + CLOSURE, + COLUMNWIDTH, Y, ARIA_MULTISELECTABLE, ROTATE, - SHADOWROOTCLONABLE, - INTERCEPT, - ROLE, - MARGINHEIGHT, - OPTIMUM, - SCALE, - POINTSATX, - FLOOD_OPACITY, - CLIP_RULE, - ONDRAGENTER, - ROWSPAN, - ONSTART, - VALUE, + SRCDOC, + LINEBREAK, + REPEATDUR, + TARGET, + SCRIPTSIZEMULTIPLIER, + AZIMUTH, + STANDBY, + ONLOAD, + DISPLAYSTYLE, + ONDRAGDROP, + VERSION, + PATTERNCONTENTUNITS, + FX, MIN, K3, ARIA_CHANNEL, ARIA_VALUENOW, LOCAL, ONABORT, - HIDDEN, - WORD_SPACING, - DEFER, - ONBEFOREUNLOAD, - ONKEYPRESS, - SPREADMETHOD, - IMAGESIZES, - HIGH, - BEGIN, - VISIBILITY, - FILL_RULE, - FRAMESPACING, - KERNELUNITLENGTH, - WHEN, - COLOR_PROFILE, - ONFOCUSIN, - STROKE_LINEJOIN, - HTTP_EQUIV, - ATTRIBUTETYPE, - ONDRAGSTART, - KEYSYSTEM, - CONTROLS, - FONTSIZE, - SYSTEMLANGUAGE, - ONSUBMIT, - REFX, - END, - SRC, - Y1, - ARIA_GRAB, - ARIA_REQUIRED, - ARIA_ATOMIC, - ARIA_OWNS, - ARIA_BUSY, - EQUALCOLUMNS, - ONDATAAVAILABLE, - XCHANNELSELECTOR, - FETCHPRIORITY, - BORDER, - RENDERING_INTENT, - STDDEVIATION, - ACCENT, - CODE, - EDGE, - LINETHICKNESS, - ORDER, - ORIENTATION, - ONRESIZE, - SIZES, - DIFFUSECONSTANT, - ALIGNMENT_BASELINE, + LOADING, + ACCEPT_CHARSET, + DIRECTION, + OBJECT, + ONBEFORECUT, + SIZE, LANG, - TARGET, MATHVARIANT, - ACTIONTYPE, LIMITINGCONEANGLE, - SCRIPTSIZEMULTIPLIER, MARKERHEIGHT, - AMPLITUDE, ONCLICK, - AZIMUTH, PRIMITIVEUNITS, - EVENT, ONEND, - STANDBY, XLINK_ARCROLE, - AUTOCOMPLETE, COLOR_INTERPOLATION_FILTERS, - ONLOAD, ONMOUSELEAVE, - RQUOTE, STROKE_WIDTH, - DISPLAYSTYLE, SCOPED, - TEMPLATE, CHARSET, - ONDRAGDROP, AS, - CLOSURE, - MINSIZE, - SUBSCRIPTSHIFT, - ENCTYPE, - FONT_FAMILY, - LIST, - PATTERNUNITS, - TEXTLENGTH, - COLUMNSPACING, - RESULT, - CX, - FY, + OFFSET, + FONT_STRETCH, + MULTIPLE, + TEXT, + REQUIREDEXTENSIONS, + DY, + END, + SRC, + Y1, + ARIA_GRAB, + ARIA_REQUIRED, + ARIA_ATOMIC, + ARIA_OWNS, + ARIA_BUSY, + EQUALCOLUMNS, + ONDATAAVAILABLE, + XCHANNELSELECTOR, + NONCE, + GRADIENTTRANSFORM, + SEED, + SHADOWROOTCUSTOMELEMENTREGISTRY, + BEVELLED, + CODEBASE, + FACE, + NAME, + ONRESET, + ONSELECTSTART, + REFERRERPOLICY, + STRETCHY, + PROFILE, + IMAGESIZES, + MARGINHEIGHT, + HIGH, + ONCHANGE, + BEGIN, + OPTIMUM, + VISIBILITY, + MARKERWIDTH, + FILL_RULE, + SCALE, + FRAMESPACING, + ZOOMANDPAN, + KERNELUNITLENGTH, + POINTSATX, + WHEN, + XLINK_SHOW, + COLOR_PROFILE, + FLOOD_OPACITY, + ONFOCUSIN, + ONMOUSEOUT, + STROKE_LINEJOIN, + CLIP_RULE, + HTTP_EQUIV, + SHAPE, + ATTRIBUTETYPE, + ONDRAGENTER, + ONDRAGSTART, + CLASSID, + KEYSPLINES, + ROWSPACING, + CONTENT, + FONTSTYLE, + FONT_SIZE, + POSTER, + TEXT_RENDERING, + COLUMNSPAN, + ONCUT, + VIEWTARGET, + BY, + RY, DIR, IN2, REL, @@ -1350,31 +1395,30 @@ boolean equalsAnother(AttributeName another) { RSPACE, SEPARATORS, ENABLE_BACKGROUND, - CHECKED, - ONSCROLL, - SPECULAREXPONENT, - GRADIENTTRANSFORM, - LOADING, - SEED, - SRCDOC, - SHADOWROOTCUSTOMELEMENTREGISTRY, - ACCEPT_CHARSET, - BEVELLED, - BASELINE, - CODEBASE, - DIRECTION, - FACE, - LINEBREAK, - NAME, - OBJECT, - ONRESET, - ONBEFOREPRINT, - ONSELECTSTART, - ONBEFORECUT, - REFERRERPOLICY, - REPEATDUR, - STRETCHY, - SIZE, + FENCE, + ONACTIVATE, + SPECULARCONSTANT, + HIDDEN, + RENDERING_INTENT, + SHADOWROOTCLONABLE, + STDDEVIATION, + WORD_SPACING, + ACCENT, + BASELINE_SHIFT, + CODE, + DEFER, + EDGE, + INTERCEPT, + LINETHICKNESS, + ONBEFOREUNLOAD, + ORDER, + ONMESSAGE, + ORIENTATION, + ONKEYPRESS, + ONRESIZE, + ROLE, + SIZES, + SPREADMETHOD, HREFLANG, XREF, DRAGGABLE, @@ -1433,28 +1477,29 @@ boolean equalsAnother(AttributeName another) { STARTOFFSET, BIAS, COLS, - CLASS, - LOWSRC, - PRESERVEALPHA, - ROWS, - ALTTEXT, - CONTEXTMENU, - FILTER, - FONT_STYLE, - FONT_SIZE_ADJUST, - KEYTIMES, - RT, - PATTERNTRANSFORM, - RESTART, - TEXT_DECORATION, - WRITING_MODE, - COLUMNLINES, - GROUPALIGN, - REQUIRED, - VALUES, - VIEWTARGET, - FX, + IS, + MAXSIZE, + PRESERVEASPECTRATIO, + SRCSET, + CONTENTEDITABLE, + DEPTH, + FONTWEIGHT, + FONTFAMILY, + FILTERUNITS, + LETTER_SPACING, + ONSTOP, + PATTERN, + STITCHTILES, + TEXT_ANCHOR, + WIDTH, + COLUMNALIGN, + INPUTMODE, + REQUIREDFEATURES, + VALUETYPE, + CX, + REFX, CY, + FY, REFY, ALT, DUR, @@ -1501,12 +1546,11 @@ boolean equalsAnother(AttributeName another) { YCHANNELSELECTOR, ONDBLCLICK, CALCMODE, - FENCE, - NONCE, - ONACTIVATE, - SPACING, - SPECULARCONSTANT, - ID, + FETCHPRIORITY, + ONSCROLL, + OPACITY, + SPECULAREXPONENT, + BORDER, GRADIENTUNITS, HEADERS, READONLY, @@ -1549,8 +1593,7 @@ boolean equalsAnother(AttributeName another) { SUPERSCRIPTSHIFT, SCHEME, SELECTION, - TYPE, - HREF, + DIFFUSECONSTANT, ONAFTERPRINT, SURFACESCALE, ALIGN, @@ -1667,179 +1710,175 @@ boolean equalsAnother(AttributeName another) { CROSSORIGIN, CURSOR, CLOSE, - IS, - KEYSPLINES, - MAXSIZE, - OFFSET, - PRESERVEASPECTRATIO, - ROWSPACING, - SRCSET, - VERSION, - CONTENTEDITABLE, - CONTENT, - DEPTH, - FONT_STRETCH, - FONTWEIGHT, - FONTSTYLE, - FONTFAMILY, - FONT_VARIANT, - FILTERUNITS, - FONT_SIZE, - LETTER_SPACING, - MULTIPLE, - ONSTOP, - POSTER, - PATTERN, - PATTERNCONTENTUNITS, - STITCHTILES, - TEXT_RENDERING, - TEXT_ANCHOR, - TEXT, - WIDTH, - COLUMNSPAN, - COLUMNALIGN, - COLUMNWIDTH, - INPUTMODE, - ONCUT, - REQUIREDFEATURES, - REQUIREDEXTENSIONS, - VALUETYPE, + KEYSYSTEM, + LOWSRC, + MINSIZE, + PRESERVEALPHA, + ROWSPAN, + ROWS, + SUBSCRIPTSHIFT, + ALTTEXT, + CONTROLS, + CONTEXTMENU, + ENCTYPE, + FILTER, + FONT_WEIGHT, + FONT_STYLE, + FONT_FAMILY, + FONT_SIZE_ADJUST, + FONTSIZE, + KEYTIMES, + LIST, + RT, + ONSTART, + PATTERNTRANSFORM, + PATTERNUNITS, + RESTART, + SYSTEMLANGUAGE, + TEXT_DECORATION, + TEXTLENGTH, + WRITING_MODE, + ACCUMULATE, + COLUMNLINES, + COLUMNSPACING, + GROUPALIGN, + ONSUBMIT, + REQUIRED, + RESULT, + VALUES, ELEVATION, VIEWBOX, DX, RX, - BY, - DY, - RY, }; private final static int[] ATTRIBUTE_HASHES = { - 1854474395, - 1747839118, - 1941438085, + 1864698185, + 1747939528, + 1942026440, 1681174213, - 1772032615, - 1910527802, - 2001634459, + 1780975314, + 1915295948, + 2001732764, 1680165421, - 1721347639, - 1754647353, - 1804978712, - 1894552650, - 1922679386, - 1983266615, - 2015950026, + 1723309623, + 1754792749, + 1814558026, + 1900548965, + 1924206934, + 1983416119, + 2017010843, 71827457, 1680282148, 1689324870, - 1740045858, - 1751679545, - 1756302628, - 1787193500, - 1822002839, - 1874261045, - 1906419001, - 1917953597, - 1932986153, - 1972744939, - 1991021879, - 2006516551, - 2026975253, + 1740096054, + 1752985897, + 1756471625, + 1790814502, + 1823841492, + 1881750231, + 1907701479, + 1922319046, + 1933508940, + 1972904522, + 1993343287, + 2007064819, + 2066743298, 57205395, 911736834, 1680181996, 1680368221, 1685882101, 1704526375, - 1734182982, - 1742183484, - 1748869205, - 1754546894, - 1754872618, - 1756874572, - 1785051290, - 1801312388, - 1814986837, - 1825677514, - 1867448617, - 1884267068, - 1903759600, - 1909819252, - 1916210285, - 1922470745, - 1924570799, - 1935597338, - 1965561677, - 1972962123, - 1987410233, - 2000125224, - 2001898808, - 2008408414, - 2023146024, - 2075005220, - 53006051, - 60345635, - 885522434, - 1680095865, - 1680165533, - 1680229115, - 1680343801, - 1680437801, - 1682440540, - 1687620127, - 1692408896, - 1716623661, - 1731048742, - 1739583824, - 1740119884, - 1747446838, - 1748306996, - 1749399124, - 1753297133, - 1754643237, - 1754798923, - 1754958648, - 1756737685, - 1765800271, - 1780975314, + 1736416327, + 1747299630, + 1749027145, + 1754606246, + 1754907227, + 1757053236, 1786740932, - 1790814502, 1804069019, - 1814558026, 1820262641, - 1823841492, 1854302364, - 1864698185, 1872034503, - 1881750231, - 1889633006, - 1900548965, - 1905754853, - 1907701479, - 1910441773, - 1915295948, - 1916337499, - 1922319046, - 1922665052, - 1924206934, - 1924738716, - 1933508940, - 1941253366, - 1942026440, - 1966454567, - 1972904522, - 1980235778, - 1983416119, - 1988788535, - 1991643278, - 2001210183, - 2001710299, - 2004957380, - 2007064812, - 2009141482, - 2016910397, - 2024763702, - 2065170434, - 2083520514, + 1889633006, + 1905754853, + 1910441773, + 1916337499, + 1922665052, + 1924738716, + 1941253366, + 1966454567, + 1980235778, + 1989522022, + 2001527900, + 2005342360, + 2009231684, + 2024794274, + 2082471938, + 53006051, + 60345635, + 885522434, + 1680095865, + 1680165533, + 1680229115, + 1680343801, + 1680437801, + 1682440540, + 1687620127, + 1692408896, + 1720503541, + 1733874289, + 1739927860, + 1740185423, + 1747792072, + 1748552744, + 1749856356, + 1754214628, + 1754645079, + 1754858317, + 1756190926, + 1756804936, + 1772032615, + 1785051290, + 1787193500, + 1801312388, + 1804978712, + 1814986837, + 1822002839, + 1825677514, + 1854474395, + 1867448617, + 1874261045, + 1884267068, + 1894552650, + 1903759600, + 1906419001, + 1909819252, + 1910527802, + 1916210285, + 1917953597, + 1922470745, + 1922679386, + 1924570799, + 1932986153, + 1935597338, + 1941438085, + 1965561677, + 1972744939, + 1972962123, + 1983266615, + 1987422362, + 1991220282, + 2000160071, + 2001669449, + 2001898809, + 2006824246, + 2009041198, + 2016711994, + 2023342821, + 2060302634, + 2081423362, + 2089811970, 52488851, 55077603, 59825747, @@ -1862,31 +1901,30 @@ boolean equalsAnother(AttributeName another) { 1689048326, 1689839946, 1699185409, - 1714763319, - 1721189160, - 1723336432, - 1733874289, - 1736416327, - 1739927860, - 1740096054, - 1740185423, - 1747299630, - 1747792072, - 1747939528, - 1748552744, - 1749027145, - 1749856356, - 1752985897, - 1754214628, - 1754606246, - 1754645079, - 1754792749, - 1754858317, - 1754907227, - 1756190926, - 1756471625, - 1756804936, - 1757053236, + 1716303957, + 1721305962, + 1723336528, + 1734182982, + 1739583824, + 1740045858, + 1740119884, + 1742183484, + 1747446838, + 1747839118, + 1748306996, + 1748869205, + 1749399124, + 1751679545, + 1753297133, + 1754546894, + 1754643237, + 1754647353, + 1754798923, + 1754872618, + 1754958648, + 1756302628, + 1756737685, + 1756874572, 1767875272, 1776114564, 1782518297, @@ -1945,28 +1983,29 @@ boolean equalsAnother(AttributeName another) { 1974849131, 1982640164, 1983347764, - 1983461061, - 1988132214, - 1990062797, - 1991392548, - 1999273799, - 2000162011, - 2001578182, - 2001669450, - 2001814704, - 2004199576, - 2005925890, - 2007019632, - 2008084807, - 2009071951, - 2010452700, - 2016787611, - 2018908874, - 2024616088, - 2026741958, - 2060302634, - 2066743298, + 1984430082, + 1988784439, + 1990107683, + 1991625270, + 2000096287, + 2000752725, + 2001634458, + 2001710298, + 2001826027, + 2004846654, + 2006459190, + 2007021895, + 2008401563, + 2009079867, + 2010716309, + 2016810187, + 2019887833, + 2024647008, + 2026893641, + 2065170434, + 2075005220, 2081947650, + 2083520514, 2091784484, 50917059, 52489043, @@ -2013,12 +2052,11 @@ boolean equalsAnother(AttributeName another) { 1692933184, 1704262346, 1714745560, - 1716303957, - 1720503541, - 1721305962, - 1723309623, - 1723336528, - 1732771842, + 1716623661, + 1721189160, + 1721347639, + 1723336432, + 1731048742, 1733919469, 1734404167, 1739561208, @@ -2061,8 +2099,7 @@ boolean equalsAnother(AttributeName another) { 1756762256, 1756836998, 1756889417, - 1757421892, - 1767725700, + 1765800271, 1771569964, 1773606972, 1780879045, @@ -2179,49 +2216,45 @@ boolean equalsAnother(AttributeName another) { 1983290011, 1983398182, 1983432389, - 1984430082, - 1987422362, - 1988784439, - 1989522022, - 1990107683, - 1991220282, - 1991625270, - 1993343287, - 2000096287, - 2000160071, - 2000752725, - 2001527900, - 2001634458, - 2001669449, - 2001710298, - 2001732764, - 2001826027, - 2001898809, - 2004846654, - 2005342360, - 2006459190, - 2006824246, - 2007021895, - 2007064819, - 2008401563, - 2009041198, - 2009079867, - 2009231684, - 2010716309, - 2016711994, - 2016810187, - 2017010843, - 2019887833, - 2023342821, - 2024647008, - 2024794274, - 2026893641, + 1987410233, + 1988132214, + 1988788535, + 1990062797, + 1991021879, + 1991392548, + 1991643278, + 1999273799, + 2000125224, + 2000162011, + 2001210183, + 2001578182, + 2001634459, + 2001669450, + 2001710299, + 2001814704, + 2001898808, + 2004199576, + 2004957380, + 2005925890, + 2006516551, + 2007019632, + 2007064812, + 2008084807, + 2008408414, + 2009071951, + 2009141482, + 2010452700, + 2015950026, + 2016787611, + 2016910397, + 2018908874, + 2023146024, + 2024616088, + 2024763702, + 2026741958, 2034765641, 2060474743, 2065694722, 2073034754, - 2081423362, - 2082471938, - 2089811970, }; } diff --git a/src/nu/validator/htmlparser/impl/ElementName.java b/src/nu/validator/htmlparser/impl/ElementName.java index 961570cd..89b48b90 100644 --- a/src/nu/validator/htmlparser/impl/ElementName.java +++ b/src/nu/validator/htmlparser/impl/ElementName.java @@ -159,6 +159,59 @@ public final class ElementName @Inline static ElementName elementNameByBuffer(@NoLength char[] buf, int length) { + if (length == 3) { + // `div` is less common on Speedometer 3.1 than lengths 5 and 6, but + // surely `div` must be more common on the Web. + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "div")) { + return ElementName.DIV; + } + // Not necessary for Speedometer 3.1 but otherwise obvious + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "img")) { + return ElementName.IMG; + } + } else if (length == 4) { + // `span` is less common on Speedometer 3.1 than lengths 5 and 6, but + // surely `span` must be more common on the Web. + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "span")) { + return ElementName.SPAN; + } + // Should `link` and `meta` go here for full page loads? + } else if (length == 2) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "li")) { + return ElementName.LI; + } + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "ul")) { + return ElementName.UL; + } + // Other workloads might benefit from `th`, `td`, and `tr` here. + } else if (length == 1) { + // `a` is less common on Speedometer 3.1 than lengths 5 and 6, but + // surely `a` must be more common on the Web. + if (buf[0] == 'a') { + return ElementName.A; + } + // Not necessary for Speedometer 3.1 but otherwise obvious + if (buf[0] == 'p') { + return ElementName.P; + } + // Other workloads might benefit from `i` and `b` here. + } else if (length == 5) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "label")) { + return ElementName.LABEL; + } + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "input")) { + return ElementName.INPUT; + } + // Should `style` go here for other workloads? + } else if (length == 6) { + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "button")) { + return ElementName.BUTTON; + } + if (Portability.bufferStartsWithLiteralAssumeSufficientLength(buf, "strong")) { + return ElementName.STRONG; + } + // Should `script` go here for other workloads? + } @Unsigned int hash = ElementName.bufToHash(buf, length); int[] hashes; hashes = ElementName.ELEMENT_HASHES; @@ -263,6 +316,61 @@ public void destructor() { // CPPONLY: NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, TreeBuilder.ANNOTATION_XML | SCOPING_AS_MATHML); + public static final ElementName DIV = new ElementName("div", "div", + // CPPONLY: NS_NewHTMLDivElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL); + + public static final ElementName IMG = new ElementName("img", "img", + // CPPONLY: NS_NewHTMLImageElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.IMG | SPECIAL); + + public static final ElementName SPAN = new ElementName("span", "span", + // CPPONLY: NS_NewHTMLSpanElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR); + + public static final ElementName LI = new ElementName("li", "li", + // CPPONLY: NS_NewHTMLLIElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.LI | SPECIAL | OPTIONAL_END_TAG); + + public static final ElementName UL = new ElementName("ul", "ul", + // CPPONLY: NS_NewHTMLSharedListElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.UL_OR_OL_OR_DL | SPECIAL); + + public static final ElementName A = new ElementName("a", "a", + // CPPONLY: NS_NewHTMLAnchorElement, + // CPPONLY: NS_NewSVGAElement, + TreeBuilder.A); + + public static final ElementName P = new ElementName("p", "p", + // CPPONLY: NS_NewHTMLParagraphElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.P | SPECIAL | OPTIONAL_END_TAG); + + public static final ElementName LABEL = new ElementName("label", "label", + // CPPONLY: NS_NewHTMLLabelElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.OTHER); + + public static final ElementName INPUT = new ElementName("input", "input", + // CPPONLY: NS_NewHTMLInputElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.INPUT | SPECIAL); + + public static final ElementName BUTTON = new ElementName("button", "button", + // CPPONLY: NS_NewHTMLButtonElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.BUTTON | SPECIAL); + + public static final ElementName STRONG = new ElementName("strong", "strong", + // CPPONLY: NS_NewHTMLElement, + // CPPONLY: NS_NewSVGUnknownElement, + TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U); + // START CODE ONLY USED FOR GENERATING CODE uncomment and run to regenerate // private static final Pattern HTML_TAG_DEF = Pattern.compile( @@ -278,6 +386,10 @@ public void destructor() { // // private static final Map svgMap = new HashMap(); // +// private static final String[] HARDCODED_HTML_ELEMENTS = { "input", "strong", "a", "p", "li", "span", "div", "ul", "img", "button", "label" }; +// +// private static final String[] HARDCODED_SVG_ELEMENTS = { "a" }; +// // private static void ingestHtmlTags(File htmlList) throws IOException { // // This doesn't need to be efficient, so let's make it easy to write. // BufferedReader htmlReader = new BufferedReader( @@ -312,6 +424,24 @@ public void destructor() { // } // } // +// private static boolean isHardcodedHtmlElement(String name) { +// for (int i = 0; i < HARDCODED_HTML_ELEMENTS.length; i++) { +// if (HARDCODED_HTML_ELEMENTS[i].equals(name)) { +// return true; +// } +// } +// return false; +// } +// +// private static boolean isHardcodedSvgElement(String name) { +// for (int i = 0; i < HARDCODED_SVG_ELEMENTS.length; i++) { +// if (HARDCODED_SVG_ELEMENTS[i].equals(name)) { +// return true; +// } +// } +// return false; +// } +// // private static void ingestSvgTags(File svgList) throws IOException { // // This doesn't need to be efficient, so let's make it easy to write. // BufferedReader svgReader = new BufferedReader( @@ -645,10 +775,16 @@ public void destructor() { // System.out.println("};"); // // for (Entry entry : htmlMap.entrySet()) { -// System.err.println("Missing HTML element: " + entry.getKey()); +// String n = entry.getKey(); +// if (!isHardcodedHtmlElement(n)) { +// System.err.println("Missing HTML element: " + n); +// } // } // for (Entry entry : svgMap.entrySet()) { -// System.err.println("Missing SVG element: " + entry.getKey()); +// String n = entry.getKey(); +// if (!isHardcodedSvgElement(n)) { +// System.err.println("Missing SVG element: " + entry.getKey()); +// } // } // } @@ -681,14 +817,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLSharedElement, // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SEARCH_OR_SECTION_OR_SUMMARY | SPECIAL); -public static final ElementName DIV = new ElementName("div", "div", -// CPPONLY: NS_NewHTMLDivElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU | SPECIAL); -public static final ElementName IMG = new ElementName("img", "img", -// CPPONLY: NS_NewHTMLImageElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.IMG | SPECIAL); public static final ElementName INS = new ElementName("ins", "ins", // CPPONLY: NS_NewHTMLModElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -709,10 +837,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLPreElement, // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.PRE_OR_LISTING | SPECIAL); -public static final ElementName A = new ElementName("a", "a", -// CPPONLY: NS_NewHTMLAnchorElement, -// CPPONLY: NS_NewSVGAElement, -TreeBuilder.A); public static final ElementName B = new ElementName("b", "b", // CPPONLY: NS_NewHTMLElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -761,10 +885,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLElement, // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U); -public static final ElementName P = new ElementName("p", "p", -// CPPONLY: NS_NewHTMLParagraphElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.P | SPECIAL | OPTIONAL_END_TAG); public static final ElementName Q = new ElementName("q", "q", // CPPONLY: NS_NewHTMLSharedElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -1025,10 +1145,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLPreElement, // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.PRE_OR_LISTING | SPECIAL); -public static final ElementName STRONG = new ElementName("strong", "strong", -// CPPONLY: NS_NewHTMLElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U); public static final ElementName ALTGLYPH = new ElementName("altglyph", "altGlyph", // CPPONLY: NS_NewHTMLUnknownElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -1069,10 +1185,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLUnknownElement, // CPPONLY: NS_NewSVGTextPathElement, TreeBuilder.OTHER); -public static final ElementName LI = new ElementName("li", "li", -// CPPONLY: NS_NewHTMLLIElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.LI | SPECIAL | OPTIONAL_END_TAG); public static final ElementName MI = new ElementName("mi", "mi", // CPPONLY: NS_NewHTMLUnknownElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -1109,14 +1221,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLSharedListElement, // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.UL_OR_OL_OR_DL | SPECIAL); -public static final ElementName LABEL = new ElementName("label", "label", -// CPPONLY: NS_NewHTMLLabelElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.OTHER); -public static final ElementName UL = new ElementName("ul", "ul", -// CPPONLY: NS_NewHTMLSharedListElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.UL_OR_OL_OR_DL | SPECIAL); public static final ElementName SMALL = new ElementName("small", "small", // CPPONLY: NS_NewHTMLElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -1153,10 +1257,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLUnknownElement, // CPPONLY: NS_NewSVGAnimateMotionElement, TreeBuilder.OTHER); -public static final ElementName BUTTON = new ElementName("button", "button", -// CPPONLY: NS_NewHTMLButtonElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.BUTTON | SPECIAL); public static final ElementName CAPTION = new ElementName("caption", "caption", // CPPONLY: NS_NewHTMLTableCaptionElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -1189,10 +1289,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLUnknownElement, // CPPONLY: NS_NewSVGPatternElement, TreeBuilder.OTHER); -public static final ElementName SPAN = new ElementName("span", "span", -// CPPONLY: NS_NewHTMLSpanElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR); public static final ElementName SECTION = new ElementName("section", "section", // CPPONLY: NS_NewHTMLElement, // CPPONLY: NS_NewSVGUnknownElement, @@ -1377,10 +1473,6 @@ public void destructor() { // CPPONLY: NS_NewHTMLFontElement, // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.FONT); -public static final ElementName INPUT = new ElementName("input", "input", -// CPPONLY: NS_NewHTMLInputElement, -// CPPONLY: NS_NewSVGUnknownElement, -TreeBuilder.INPUT | SPECIAL); public static final ElementName LINEARGRADIENT = new ElementName("lineargradient", "linearGradient", // CPPONLY: NS_NewHTMLUnknownElement, // CPPONLY: NS_NewSVGLinearGradientElement, @@ -1486,62 +1578,62 @@ public void destructor() { // CPPONLY: NS_NewSVGUnknownElement, TreeBuilder.TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG); private final static @NoLength ElementName[] ELEMENT_NAMES = { -FIGCAPTION, -CITE, -FEOFFSET, -H1, -CLIPPATH, +AUDIO, +FEIMAGE, +FRAMESET, +H5, +TH, METER, SELECT, -B, -BGSOUND, -SOURCE, -DL, -RP, -PROGRESS, -NOSCRIPT, -VIEW, -DIV, -G, -FEFUNCA, -THEAD, -FIGURE, -GLYPHREF, -TEXTPATH, +SVG, +HEAD, +TITLE, ANIMATETRANSFORM, -SECTION, HR, -DEFS, -DATALIST, -FONT, -PLAINTEXT, -TFOOT, -FEMORPHOLOGY, -COL, -MAP, -SUP, -P, -H5, +NOFRAMES, +NOSCRIPT, +VIEW, +INS, +I, FEFUNCB, -HEAD, BASE, -FEIMAGE, LINE, -TITLE, FESPECULARLIGHTING, -PATH, -MARK, -UL, -PARAM, -OPTION, -VIDEO, -BR, +MASK, +MN, +SAMP, FOOTER, -ADDRESS, -MS, -APPLET, -FIELDSET, -FEPOINTLIGHT, +CANVAS, +BASEFONT, +FEDISTANTLIGHT, +PLAINTEXT, +TFOOT, +FEMORPHOLOGY, +COL, +PRE, +VAR, +H1, +FEFUNCA, +BGSOUND, +THEAD, +CITE, +FIGURE, +SOURCE, +GLYPHREF, +MGLYPH, +MI, +OL, +PARAM, +POLYGON, +FEDISPLACEMENTMAP, +ANIMATECOLOR, +FECOMPONENTTRANSFER, +HEADER, +TR, +DETAILS, +DT, +FOREIGNOBJECT, +FESPOTLIGHT, LINEARGRADIENT, OBJECT, RECT, @@ -1551,11 +1643,10 @@ public void destructor() { SUMMARY, BDI, DFN, -INS, -PRE, -SUB, -USE, -XMP, +MAP, +RTC, +SET, +WBR, S, H3, AREA, @@ -1572,34 +1663,35 @@ public void destructor() { STYLE, TEMPLATE, FEFUNCG, -STRONG, -MATH, -SEARCH, -MI, -MASK, -OL, +ALTGLYPH, +MPATH, +SWITCH, +MARK, +DL, SYMBOL, EM, -BUTTON, -KEYGEN, -PATTERN, -AUDIO, -FEDISPLACEMENTMAP, -SAMP, -ANIMATECOLOR, -FECOMPONENTTRANSFER, -HEADER, -TR, -CANVAS, -DETAILS, -NOFRAMES, -DT, -BASEFONT, -FOREIGNOBJECT, -FRAMESET, -FESPOTLIGHT, -FEDISTANTLIGHT, -INPUT, +CAPTION, +MAIN, +SECTION, +VIDEO, +RP, +BR, +CENTER, +FEFUNCR, +FILTER, +FEGAUSSIANBLUR, +MARKER, +NOBR, +ADDRESS, +DEFS, +MS, +PROGRESS, +APPLET, +DATALIST, +FIELDSET, +FEOFFSET, +FEPOINTLIGHT, +FONT, MTEXT, RT, OUTPUT, @@ -1617,16 +1709,14 @@ public void destructor() { BDO, DEL, DIR, -IMG, KBD, NAV, -A, -RTC, -SVG, -SET, -VAR, -WBR, -I, +B, +SUB, +SUP, +USE, +G, +XMP, Q, U, H2, @@ -1660,27 +1750,24 @@ public void destructor() { DIALOG, FEDIFFUSELIGHTING, LISTING, -ALTGLYPH, -MGLYPH, -MPATH, -TH, -SWITCH, -LI, +CLIPPATH, +MATH, +PATH, +SEARCH, +TEXTPATH, LINK, MALIGNMARK, TRACK, HTML, -LABEL, SMALL, ALTGLYPHITEM, ACRONYM, FORM, ANIMATEMOTION, -CAPTION, -MN, -MAIN, -POLYGON, -SPAN, +FIGCAPTION, +KEYGEN, +OPTION, +PATTERN, TSPAN, MO, COLGROUP, @@ -1688,70 +1775,64 @@ public void destructor() { OPTGROUP, STOP, ABBR, -CENTER, -FEFUNCR, -FILTER, -FEGAUSSIANBLUR, -MARKER, -NOBR, }; private final static int[] ELEMENT_HASHES = { -1900845386, -1748359220, -2001349736, -876609538, -1798686984, +1914900309, +1749715159, +2001349720, +943718402, +1805647874, 1971465813, 2008125638, -59768833, -1730965751, -1756474198, -1864368130, -1938817026, -1990037800, -2005719336, -2060065124, -52490899, -62390273, -1682547543, -1740181637, -1749905526, -1766992520, -1807599880, +60347747, +1733890180, +1757146773, 1881498736, -1907661127, 1967128578, -1983533124, -2000525512, -2001495140, -2006896969, -2008851557, -2085266636, -51961587, -57206291, -60352339, -67108865, -943718402, +1988763672, +2005719336, +2060065124, +55110883, +63438849, 1699324759, -1733890180, 1747814436, -1749715159, 1752979652, -1757146773, 1783388498, -1805502724, -1854228692, -1873281026, -1889085973, -1905563974, -1925844629, -1963982850, +1854245076, +1902641154, +1941178676, 1967795958, -1982173479, -1986527234, -1998724870, -2001349704, -2001392796, +1982935782, +1999397992, +2001392798, +2006896969, +2008851557, +2085266636, +51961587, +58773795, +61925907, +876609538, +1682547543, +1730965751, +1740181637, +1748359220, +1749905526, +1756474198, +1766992520, +1803876550, +1818755074, +1870135298, +1889085973, +1906087319, +1934172497, +1965334268, +1967788867, +1968836118, +1973420034, +1983633431, +1998585858, +2001309869, +2001392795, 2004635806, 2006028454, 2007601444, @@ -1761,11 +1842,10 @@ public void destructor() { 2092255447, 51435587, 52486755, -55110883, -58773795, -60345171, -61395251, -62973651, +57206291, +59821379, +60354131, +62450211, 68681729, 910163970, 1679960596, @@ -1782,34 +1862,35 @@ public void destructor() { 1756625221, 1757268168, 1783210839, -1790207270, -1803929812, -1806805526, -1818755074, -1854245076, -1870135298, +1797585096, +1803929861, +1806806678, +1854228692, +1864368130, 1874102998, 1881669634, -1898753862, -1903302038, -1906135367, -1914900309, -1934172497, -1941178676, -1965334268, -1967788867, -1968836118, -1973420034, -1982935782, -1983633431, -1988763672, -1998585858, -1999397992, -2001309869, -2001349720, -2001392795, -2001392798, -2003183333, +1899272519, +1904412884, +1907661127, +1925844629, +1938817026, +1963982850, +1966223078, +1967760215, +1967795910, +1968053806, +1971461414, +1971938532, +1982173479, +1983533124, +1986527234, +1990037800, +1998724870, +2000525512, +2001349704, +2001349736, +2001392796, +2001495140, 2005324101, 2005925890, 2006329158, @@ -1827,16 +1908,14 @@ public void destructor() { 51438659, 52485715, 52488851, -55104723, 56151587, 57733651, -59244545, -59821379, -60347747, -60354131, -61925907, -62450211, -63438849, +59768833, +60345171, +60352339, +61395251, +62390273, +62973651, 67633153, 69730305, 893386754, @@ -1870,27 +1949,24 @@ public void destructor() { 1782357526, 1783388497, 1786534215, -1797585096, -1803876550, -1803929861, -1805647874, -1806806678, -1818230786, +1798686984, +1803929812, +1805502724, +1806805526, +1807599880, 1853642948, 1854228698, 1857653029, 1868312196, -1870268949, 1874053333, 1881288348, 1881613047, 1884120164, 1898223949, -1899272519, -1902641154, -1904412884, -1906087319, -1907435316, +1900845386, +1903302038, +1905563974, +1906135367, 1907959605, 1919418370, 1932928296, @@ -1898,11 +1974,5 @@ public void destructor() { 1939219752, 1941221172, 1965115924, -1966223078, -1967760215, -1967795910, -1968053806, -1971461414, -1971938532, }; } diff --git a/src/nu/validator/htmlparser/impl/Portability.java b/src/nu/validator/htmlparser/impl/Portability.java index cde64559..a0bcdc9c 100644 --- a/src/nu/validator/htmlparser/impl/Portability.java +++ b/src/nu/validator/htmlparser/impl/Portability.java @@ -151,6 +151,26 @@ public static boolean stringEqualsString(String one, String other) { return one.equals(other); } + // [NOCPP[ + public static boolean bufferStartsWithLiteralAssumeSufficientLength(char[] buf, String literal) { + for (int i = 0; i < literal.length(); i++) { + if (buf[i] != literal.charAt(i)) { + return false; + } + } + return true; + } + + public static boolean bufferStartsWithLiteralAtOffsetAssumeSufficientLength(char[] buf, String literal, int offset) { + for (int i = 0; i < literal.length(); i++) { + if (buf[offset + i] != literal.charAt(i)) { + return false; + } + } + return true; + } + // ]NOCPP] + public static void delete(Object o) { } diff --git a/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java b/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java index dc6569ba..46b2ded3 100644 --- a/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java +++ b/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java @@ -128,7 +128,7 @@ public class CppTypes { private static final String[] FORWARD_DECLARATIONS = { "nsHtml5StreamParser" }; private static final String[] CLASSES_THAT_NEED_SUPPLEMENT = { - "Tokenizer", "TreeBuilder", "UTF16Buffer", }; + "Portability", "Tokenizer", "TreeBuilder", "UTF16Buffer" }; private static final String[] STATE_LOOP_POLICIES = { "nsHtml5ViewSourcePolicy", "nsHtml5LineColPolicy", "nsHtml5FastestPolicy" }; @@ -377,6 +377,10 @@ public String stringForLiteral(String literal) { return '"' + literal + '"'; } + public String utf16StringForLiteral(String literal) { + return "u\"" + literal + '"'; + } + public String staticArrayTemplate() { return "staticJArray"; } diff --git a/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java index 6eadb0ad..e6fc6a08 100755 --- a/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java +++ b/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java @@ -1239,6 +1239,8 @@ public void visit(StringLiteralExpr n, LocalSymbolTable arg) { printer.print(cppTypes.stringForLiteral(val)); } else if ("isQuirky".equals(currentMethod) && "html".equals(val)) { printer.print(cppTypes.stringForLiteral(val)); + } else if ("nameByBuffer".equals(currentMethod) || "elementNameByBuffer".equals(currentMethod)) { + printer.print(cppTypes.utf16StringForLiteral(val)); } else { printer.print(cppTypes.localForLiteral(val)); }