Bug 1355779 - Skip interned nsHtml5ElementName lookup for Custom Elements (ones with hyphen). r=wchen

MozReview-Commit-ID: 4xQlhExyo7d
This commit is contained in:
Henri Sivonen
2017-04-12 14:28:49 +03:00
parent 9c3ac1b327
commit 89dc7f5ddb
6 changed files with 189 additions and 138 deletions

View File

@@ -190,6 +190,8 @@ public final class ElementName
assert this.flags == (TreeBuilder.OTHER | NOT_INTERNED);
}
public static final ElementName ANNOTATION_XML = new ElementName("annotation-xml", "annotation-xml", TreeBuilder.ANNOTATION_XML | SCOPING_AS_MATHML);
// START CODE ONLY USED FOR GENERATING CODE uncomment and run to regenerate
// /**
@@ -228,6 +230,9 @@ public final class ElementName
// for (int i = 0; i < name.length(); i++) {
// char c = name.charAt(i);
// if (c == '-') {
// if (!"annotation-xml".equals(name)) {
// throw new RuntimeException("Non-annotation-xml element name with hyphen: " + name);
// }
// buf[i] = '_';
// } else if (c >= '0' && c <= '9') {
// buf[i] = c;
@@ -547,7 +552,6 @@ public final class ElementName
public static final ElementName MASK = new ElementName("mask", "mask", TreeBuilder.OTHER);
public static final ElementName TRACK = new ElementName("track", "track", TreeBuilder.PARAM_OR_SOURCE_OR_TRACK | SPECIAL);
public static final ElementName DL = new ElementName("dl", "dl", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
public static final ElementName ANNOTATION_XML = new ElementName("annotation-xml", "annotation-xml", TreeBuilder.ANNOTATION_XML | SCOPING_AS_MATHML);
public static final ElementName HTML = new ElementName("html", "html", TreeBuilder.HTML | SPECIAL | SCOPING | OPTIONAL_END_TAG);
public static final ElementName OL = new ElementName("ol", "ol", TreeBuilder.UL_OR_OL_OR_DL | SPECIAL);
public static final ElementName LABEL = new ElementName("label", "label", TreeBuilder.OTHER);
@@ -753,7 +757,6 @@ public final class ElementName
MASK,
TRACK,
DL,
ANNOTATION_XML,
HTML,
OL,
LABEL,
@@ -960,7 +963,6 @@ public final class ElementName
1854245076,
1857653029,
1864368130,
1864643294,
1868312196,
1870135298,
1870268949,

View File

@@ -414,6 +414,12 @@ public class Tokenizer implements Locator {
*/
protected boolean endTag;
/**
* <code>true</code> iff the current element/attribute name contains
* a hyphen.
*/
private boolean containsHyphen;
/**
* The current tag token name. One of
* 1) null,
@@ -525,6 +531,7 @@ public class Tokenizer implements Locator {
this.charRefBuf = new char[32];
this.bmpChar = new char[1];
this.astralChar = new char[2];
this.containsHyphen = false;
this.tagName = null;
this.nonInternedTagName = new ElementName();
this.attributeName = null;
@@ -555,6 +562,7 @@ public class Tokenizer implements Locator {
this.charRefBuf = new char[32];
this.bmpChar = new char[1];
this.astralChar = new char[2];
this.containsHyphen = false;
this.tagName = null;
this.nonInternedTagName = new ElementName();
this.attributeName = null;
@@ -1101,6 +1109,17 @@ public class Tokenizer implements Locator {
}
private void strBufToElementNameString() {
if (containsHyphen) {
// We've got a custom element or annotation-xml.
@Local String annotationName = ElementName.ANNOTATION_XML.getName();
if (Portability.localEqualsBuffer(annotationName, strBuf, 0, strBufLen)) {
tagName = ElementName.ANNOTATION_XML;
} else {
nonInternedTagName.setNameForNonInterned(Portability.newLocalNameFromBuffer(strBuf, 0, strBufLen,
interner));
tagName = nonInternedTagName;
}
} else {
tagName = ElementName.elementNameByBuffer(strBuf, 0, strBufLen,
interner);
if (tagName == null) {
@@ -1108,6 +1127,8 @@ public class Tokenizer implements Locator {
interner));
tagName = nonInternedTagName;
}
}
containsHyphen = false;
clearStrBufAfterUse();
}
@@ -1558,6 +1579,7 @@ public class Tokenizer implements Locator {
*/
clearStrBufBeforeUse();
appendStrBuf((char) (c + 0x20));
containsHyphen = false;
/* then switch to the tag name state. */
state = transition(state, Tokenizer.TAG_NAME, reconsume, pos);
/*
@@ -1578,6 +1600,7 @@ public class Tokenizer implements Locator {
*/
clearStrBufBeforeUse();
appendStrBuf(c);
containsHyphen = false;
/* then switch to the tag name state. */
state = transition(state, Tokenizer.TAG_NAME, reconsume, pos);
/*
@@ -1721,6 +1744,8 @@ public class Tokenizer implements Locator {
* tag name.
*/
c += 0x20;
} else if (c == '-') {
containsHyphen = true;
}
/*
* Anything else Append the current input
@@ -3622,6 +3647,7 @@ public class Tokenizer implements Locator {
*/
clearStrBufBeforeUse();
appendStrBuf(c);
containsHyphen = false;
/*
* then switch to the tag name state. (Don't
* emit the token yet; further details will be
@@ -6734,6 +6760,7 @@ public class Tokenizer implements Locator {
endTag = false;
shouldSuspend = false;
initDoctypeFields();
containsHyphen = false;
if (tagName != null) {
tagName = null;
}
@@ -6800,6 +6827,7 @@ public class Tokenizer implements Locator {
publicIdentifier = Portability.newStringFromString(other.publicIdentifier);
}
containsHyphen = other.containsHyphen;
if (other.tagName == null) {
tagName = null;
} else if (other.tagName.isInterned()) {

View File

@@ -115,6 +115,7 @@ nsHtml5ElementName::setNameForNonInterned(nsIAtom* name)
(NS_HTML5TREE_BUILDER_OTHER | NS_HTML5ELEMENT_NAME_NOT_INTERNED));
}
nsHtml5ElementName* nsHtml5ElementName::ELT_ANNOTATION_XML = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_BIG = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_BDO = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_COL = nullptr;
@@ -224,7 +225,6 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_MALIGNMARK = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_MASK = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_TRACK = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_DL = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_ANNOTATION_XML = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_HTML = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_OL = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_LABEL = nullptr;
@@ -340,28 +340,32 @@ static int32_t const ELEMENT_HASHES_DATA[] = {
1786534215, 1790207270, 1797585096, 1798686984, 1803876550, 1803929812,
1803929861, 1805502724, 1805647874, 1806806678, 1807599880, 1818230786,
1818755074, 1853642948, 1854228692, 1854228698, 1854245076, 1857653029,
1864368130, 1864643294, 1868312196, 1870135298, 1870268949, 1873281026,
1874053333, 1874102998, 1881288348, 1881498736, 1881613047, 1881669634,
1884120164, 1887579800, 1889085973, 1898223949, 1898753862, 1899272519,
1900845386, 1902641154, 1903302038, 1904412884, 1905563974, 1906087319,
1906135367, 1907435316, 1907661127, 1907959605, 1914900309, 1919418370,
1925844629, 1932928296, 1934172497, 1935549734, 1938817026, 1939219752,
1941178676, 1941221172, 1963982850, 1965115924, 1965334268, 1966223078,
1967128578, 1967760215, 1967788867, 1967795910, 1967795958, 1968053806,
1968836118, 1971461414, 1971465813, 1971938532, 1973420034, 1982173479,
1982935782, 1983533124, 1983633431, 1986527234, 1988763672, 1990037800,
1998585858, 1998724870, 1999397992, 2001309869, 2001349704, 2001349720,
2001349736, 2001392795, 2001392796, 2001392798, 2001495140, 2003183333,
2004635806, 2005324101, 2005719336, 2005925890, 2006028454, 2006329158,
2006896969, 2006974466, 2007601444, 2007781534, 2008125638, 2008340774,
2008851557, 2008994116, 2021937364, 2051837468, 2060065124, 2068523853,
2068523856, 2070023911, 2083120164, 2085266636, 2091479332, 2092255447,
2092557349
1864368130, 1868312196, 1870135298, 1870268949, 1873281026, 1874053333,
1874102998, 1881288348, 1881498736, 1881613047, 1881669634, 1884120164,
1887579800, 1889085973, 1898223949, 1898753862, 1899272519, 1900845386,
1902641154, 1903302038, 1904412884, 1905563974, 1906087319, 1906135367,
1907435316, 1907661127, 1907959605, 1914900309, 1919418370, 1925844629,
1932928296, 1934172497, 1935549734, 1938817026, 1939219752, 1941178676,
1941221172, 1963982850, 1965115924, 1965334268, 1966223078, 1967128578,
1967760215, 1967788867, 1967795910, 1967795958, 1968053806, 1968836118,
1971461414, 1971465813, 1971938532, 1973420034, 1982173479, 1982935782,
1983533124, 1983633431, 1986527234, 1988763672, 1990037800, 1998585858,
1998724870, 1999397992, 2001309869, 2001349704, 2001349720, 2001349736,
2001392795, 2001392796, 2001392798, 2001495140, 2003183333, 2004635806,
2005324101, 2005719336, 2005925890, 2006028454, 2006329158, 2006896969,
2006974466, 2007601444, 2007781534, 2008125638, 2008340774, 2008851557,
2008994116, 2021937364, 2051837468, 2060065124, 2068523853, 2068523856,
2070023911, 2083120164, 2085266636, 2091479332, 2092255447, 2092557349
};
staticJArray<int32_t,int32_t> nsHtml5ElementName::ELEMENT_HASHES = { ELEMENT_HASHES_DATA, MOZ_ARRAY_LENGTH(ELEMENT_HASHES_DATA) };
void
nsHtml5ElementName::initializeStatics()
{
ELT_ANNOTATION_XML =
new nsHtml5ElementName(nsHtml5Atoms::annotation_xml,
nsHtml5Atoms::annotation_xml,
NS_HTML5TREE_BUILDER_ANNOTATION_XML |
NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
ELT_BIG = new nsHtml5ElementName(nsHtml5Atoms::big, nsHtml5Atoms::big, NS_HTML5TREE_BUILDER_B_OR_BIG_OR_CODE_OR_EM_OR_I_OR_S_OR_SMALL_OR_STRIKE_OR_STRONG_OR_TT_OR_U);
ELT_BDO = new nsHtml5ElementName(nsHtml5Atoms::bdo, nsHtml5Atoms::bdo, NS_HTML5TREE_BUILDER_OTHER);
ELT_COL = new nsHtml5ElementName(nsHtml5Atoms::col, nsHtml5Atoms::col, NS_HTML5TREE_BUILDER_COL | NS_HTML5ELEMENT_NAME_SPECIAL);
@@ -657,11 +661,6 @@ nsHtml5ElementName::initializeStatics()
nsHtml5Atoms::dl,
NS_HTML5TREE_BUILDER_UL_OR_OL_OR_DL |
NS_HTML5ELEMENT_NAME_SPECIAL);
ELT_ANNOTATION_XML =
new nsHtml5ElementName(nsHtml5Atoms::annotation_xml,
nsHtml5Atoms::annotation_xml,
NS_HTML5TREE_BUILDER_ANNOTATION_XML |
NS_HTML5ELEMENT_NAME_SCOPING_AS_MATHML);
ELT_HTML = new nsHtml5ElementName(
nsHtml5Atoms::html,
nsHtml5Atoms::html,
@@ -967,7 +966,7 @@ nsHtml5ElementName::initializeStatics()
NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT |
NS_HTML5ELEMENT_NAME_SPECIAL | NS_HTML5ELEMENT_NAME_FOSTER_PARENTING |
NS_HTML5ELEMENT_NAME_OPTIONAL_END_TAG);
ELEMENT_NAMES = new nsHtml5ElementName*[205];
ELEMENT_NAMES = new nsHtml5ElementName*[204];
ELEMENT_NAMES[0] = ELT_BIG;
ELEMENT_NAMES[1] = ELT_BDO;
ELEMENT_NAMES[2] = ELT_COL;
@@ -1077,107 +1076,107 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[106] = ELT_MASK;
ELEMENT_NAMES[107] = ELT_TRACK;
ELEMENT_NAMES[108] = ELT_DL;
ELEMENT_NAMES[109] = ELT_ANNOTATION_XML;
ELEMENT_NAMES[110] = ELT_HTML;
ELEMENT_NAMES[111] = ELT_OL;
ELEMENT_NAMES[112] = ELT_LABEL;
ELEMENT_NAMES[113] = ELT_UL;
ELEMENT_NAMES[114] = ELT_SMALL;
ELEMENT_NAMES[115] = ELT_SYMBOL;
ELEMENT_NAMES[116] = ELT_ALTGLYPHITEM;
ELEMENT_NAMES[117] = ELT_ANIMATETRANSFORM;
ELEMENT_NAMES[118] = ELT_ACRONYM;
ELEMENT_NAMES[119] = ELT_EM;
ELEMENT_NAMES[120] = ELT_FORM;
ELEMENT_NAMES[121] = ELT_MENUITEM;
ELEMENT_NAMES[122] = ELT_PARAM;
ELEMENT_NAMES[123] = ELT_ANIMATEMOTION;
ELEMENT_NAMES[124] = ELT_BUTTON;
ELEMENT_NAMES[125] = ELT_CAPTION;
ELEMENT_NAMES[126] = ELT_FIGCAPTION;
ELEMENT_NAMES[127] = ELT_MN;
ELEMENT_NAMES[128] = ELT_KEYGEN;
ELEMENT_NAMES[129] = ELT_MAIN;
ELEMENT_NAMES[130] = ELT_OPTION;
ELEMENT_NAMES[131] = ELT_POLYGON;
ELEMENT_NAMES[132] = ELT_PATTERN;
ELEMENT_NAMES[133] = ELT_SPAN;
ELEMENT_NAMES[134] = ELT_SECTION;
ELEMENT_NAMES[135] = ELT_TSPAN;
ELEMENT_NAMES[136] = ELT_AUDIO;
ELEMENT_NAMES[137] = ELT_MO;
ELEMENT_NAMES[138] = ELT_VIDEO;
ELEMENT_NAMES[139] = ELT_COLGROUP;
ELEMENT_NAMES[140] = ELT_FEDISPLACEMENTMAP;
ELEMENT_NAMES[141] = ELT_HGROUP;
ELEMENT_NAMES[142] = ELT_RP;
ELEMENT_NAMES[143] = ELT_OPTGROUP;
ELEMENT_NAMES[144] = ELT_SAMP;
ELEMENT_NAMES[145] = ELT_STOP;
ELEMENT_NAMES[146] = ELT_BR;
ELEMENT_NAMES[147] = ELT_ABBR;
ELEMENT_NAMES[148] = ELT_ANIMATECOLOR;
ELEMENT_NAMES[149] = ELT_CENTER;
ELEMENT_NAMES[150] = ELT_HR;
ELEMENT_NAMES[151] = ELT_FEFUNCR;
ELEMENT_NAMES[152] = ELT_FECOMPONENTTRANSFER;
ELEMENT_NAMES[153] = ELT_FILTER;
ELEMENT_NAMES[154] = ELT_FOOTER;
ELEMENT_NAMES[155] = ELT_FEGAUSSIANBLUR;
ELEMENT_NAMES[156] = ELT_HEADER;
ELEMENT_NAMES[157] = ELT_MARKER;
ELEMENT_NAMES[158] = ELT_METER;
ELEMENT_NAMES[159] = ELT_NOBR;
ELEMENT_NAMES[160] = ELT_TR;
ELEMENT_NAMES[161] = ELT_ADDRESS;
ELEMENT_NAMES[162] = ELT_CANVAS;
ELEMENT_NAMES[163] = ELT_DEFS;
ELEMENT_NAMES[164] = ELT_DETAILS;
ELEMENT_NAMES[165] = ELT_MS;
ELEMENT_NAMES[166] = ELT_NOFRAMES;
ELEMENT_NAMES[167] = ELT_PROGRESS;
ELEMENT_NAMES[168] = ELT_DT;
ELEMENT_NAMES[169] = ELT_APPLET;
ELEMENT_NAMES[170] = ELT_BASEFONT;
ELEMENT_NAMES[171] = ELT_FOREIGNOBJECT;
ELEMENT_NAMES[172] = ELT_FIELDSET;
ELEMENT_NAMES[173] = ELT_FRAMESET;
ELEMENT_NAMES[174] = ELT_FEOFFSET;
ELEMENT_NAMES[175] = ELT_FESPOTLIGHT;
ELEMENT_NAMES[176] = ELT_FEPOINTLIGHT;
ELEMENT_NAMES[177] = ELT_FEDISTANTLIGHT;
ELEMENT_NAMES[178] = ELT_FONT;
ELEMENT_NAMES[179] = ELT_INPUT;
ELEMENT_NAMES[180] = ELT_LINEARGRADIENT;
ELEMENT_NAMES[181] = ELT_MTEXT;
ELEMENT_NAMES[182] = ELT_NOSCRIPT;
ELEMENT_NAMES[183] = ELT_RT;
ELEMENT_NAMES[184] = ELT_OBJECT;
ELEMENT_NAMES[185] = ELT_OUTPUT;
ELEMENT_NAMES[186] = ELT_PLAINTEXT;
ELEMENT_NAMES[187] = ELT_TT;
ELEMENT_NAMES[188] = ELT_RECT;
ELEMENT_NAMES[189] = ELT_RADIALGRADIENT;
ELEMENT_NAMES[190] = ELT_SELECT;
ELEMENT_NAMES[191] = ELT_SCRIPT;
ELEMENT_NAMES[192] = ELT_TFOOT;
ELEMENT_NAMES[193] = ELT_TEXT;
ELEMENT_NAMES[194] = ELT_MENU;
ELEMENT_NAMES[195] = ELT_FEDROPSHADOW;
ELEMENT_NAMES[196] = ELT_VIEW;
ELEMENT_NAMES[197] = ELT_FECOLORMATRIX;
ELEMENT_NAMES[198] = ELT_FECONVOLVEMATRIX;
ELEMENT_NAMES[199] = ELT_ISINDEX;
ELEMENT_NAMES[200] = ELT_BODY;
ELEMENT_NAMES[201] = ELT_FEMORPHOLOGY;
ELEMENT_NAMES[202] = ELT_RUBY;
ELEMENT_NAMES[203] = ELT_SUMMARY;
ELEMENT_NAMES[204] = ELT_TBODY;
ELEMENT_NAMES[109] = ELT_HTML;
ELEMENT_NAMES[110] = ELT_OL;
ELEMENT_NAMES[111] = ELT_LABEL;
ELEMENT_NAMES[112] = ELT_UL;
ELEMENT_NAMES[113] = ELT_SMALL;
ELEMENT_NAMES[114] = ELT_SYMBOL;
ELEMENT_NAMES[115] = ELT_ALTGLYPHITEM;
ELEMENT_NAMES[116] = ELT_ANIMATETRANSFORM;
ELEMENT_NAMES[117] = ELT_ACRONYM;
ELEMENT_NAMES[118] = ELT_EM;
ELEMENT_NAMES[119] = ELT_FORM;
ELEMENT_NAMES[120] = ELT_MENUITEM;
ELEMENT_NAMES[121] = ELT_PARAM;
ELEMENT_NAMES[122] = ELT_ANIMATEMOTION;
ELEMENT_NAMES[123] = ELT_BUTTON;
ELEMENT_NAMES[124] = ELT_CAPTION;
ELEMENT_NAMES[125] = ELT_FIGCAPTION;
ELEMENT_NAMES[126] = ELT_MN;
ELEMENT_NAMES[127] = ELT_KEYGEN;
ELEMENT_NAMES[128] = ELT_MAIN;
ELEMENT_NAMES[129] = ELT_OPTION;
ELEMENT_NAMES[130] = ELT_POLYGON;
ELEMENT_NAMES[131] = ELT_PATTERN;
ELEMENT_NAMES[132] = ELT_SPAN;
ELEMENT_NAMES[133] = ELT_SECTION;
ELEMENT_NAMES[134] = ELT_TSPAN;
ELEMENT_NAMES[135] = ELT_AUDIO;
ELEMENT_NAMES[136] = ELT_MO;
ELEMENT_NAMES[137] = ELT_VIDEO;
ELEMENT_NAMES[138] = ELT_COLGROUP;
ELEMENT_NAMES[139] = ELT_FEDISPLACEMENTMAP;
ELEMENT_NAMES[140] = ELT_HGROUP;
ELEMENT_NAMES[141] = ELT_RP;
ELEMENT_NAMES[142] = ELT_OPTGROUP;
ELEMENT_NAMES[143] = ELT_SAMP;
ELEMENT_NAMES[144] = ELT_STOP;
ELEMENT_NAMES[145] = ELT_BR;
ELEMENT_NAMES[146] = ELT_ABBR;
ELEMENT_NAMES[147] = ELT_ANIMATECOLOR;
ELEMENT_NAMES[148] = ELT_CENTER;
ELEMENT_NAMES[149] = ELT_HR;
ELEMENT_NAMES[150] = ELT_FEFUNCR;
ELEMENT_NAMES[151] = ELT_FECOMPONENTTRANSFER;
ELEMENT_NAMES[152] = ELT_FILTER;
ELEMENT_NAMES[153] = ELT_FOOTER;
ELEMENT_NAMES[154] = ELT_FEGAUSSIANBLUR;
ELEMENT_NAMES[155] = ELT_HEADER;
ELEMENT_NAMES[156] = ELT_MARKER;
ELEMENT_NAMES[157] = ELT_METER;
ELEMENT_NAMES[158] = ELT_NOBR;
ELEMENT_NAMES[159] = ELT_TR;
ELEMENT_NAMES[160] = ELT_ADDRESS;
ELEMENT_NAMES[161] = ELT_CANVAS;
ELEMENT_NAMES[162] = ELT_DEFS;
ELEMENT_NAMES[163] = ELT_DETAILS;
ELEMENT_NAMES[164] = ELT_MS;
ELEMENT_NAMES[165] = ELT_NOFRAMES;
ELEMENT_NAMES[166] = ELT_PROGRESS;
ELEMENT_NAMES[167] = ELT_DT;
ELEMENT_NAMES[168] = ELT_APPLET;
ELEMENT_NAMES[169] = ELT_BASEFONT;
ELEMENT_NAMES[170] = ELT_FOREIGNOBJECT;
ELEMENT_NAMES[171] = ELT_FIELDSET;
ELEMENT_NAMES[172] = ELT_FRAMESET;
ELEMENT_NAMES[173] = ELT_FEOFFSET;
ELEMENT_NAMES[174] = ELT_FESPOTLIGHT;
ELEMENT_NAMES[175] = ELT_FEPOINTLIGHT;
ELEMENT_NAMES[176] = ELT_FEDISTANTLIGHT;
ELEMENT_NAMES[177] = ELT_FONT;
ELEMENT_NAMES[178] = ELT_INPUT;
ELEMENT_NAMES[179] = ELT_LINEARGRADIENT;
ELEMENT_NAMES[180] = ELT_MTEXT;
ELEMENT_NAMES[181] = ELT_NOSCRIPT;
ELEMENT_NAMES[182] = ELT_RT;
ELEMENT_NAMES[183] = ELT_OBJECT;
ELEMENT_NAMES[184] = ELT_OUTPUT;
ELEMENT_NAMES[185] = ELT_PLAINTEXT;
ELEMENT_NAMES[186] = ELT_TT;
ELEMENT_NAMES[187] = ELT_RECT;
ELEMENT_NAMES[188] = ELT_RADIALGRADIENT;
ELEMENT_NAMES[189] = ELT_SELECT;
ELEMENT_NAMES[190] = ELT_SCRIPT;
ELEMENT_NAMES[191] = ELT_TFOOT;
ELEMENT_NAMES[192] = ELT_TEXT;
ELEMENT_NAMES[193] = ELT_MENU;
ELEMENT_NAMES[194] = ELT_FEDROPSHADOW;
ELEMENT_NAMES[195] = ELT_VIEW;
ELEMENT_NAMES[196] = ELT_FECOLORMATRIX;
ELEMENT_NAMES[197] = ELT_FECONVOLVEMATRIX;
ELEMENT_NAMES[198] = ELT_ISINDEX;
ELEMENT_NAMES[199] = ELT_BODY;
ELEMENT_NAMES[200] = ELT_FEMORPHOLOGY;
ELEMENT_NAMES[201] = ELT_RUBY;
ELEMENT_NAMES[202] = ELT_SUMMARY;
ELEMENT_NAMES[203] = ELT_TBODY;
}
void
nsHtml5ElementName::releaseStatics()
{
delete ELT_ANNOTATION_XML;
delete ELT_BIG;
delete ELT_BDO;
delete ELT_COL;
@@ -1287,7 +1286,6 @@ nsHtml5ElementName::releaseStatics()
delete ELT_MASK;
delete ELT_TRACK;
delete ELT_DL;
delete ELT_ANNOTATION_XML;
delete ELT_HTML;
delete ELT_OL;
delete ELT_LABEL;

View File

@@ -112,6 +112,7 @@ private:
nsHtml5ElementName();
~nsHtml5ElementName();
void setNameForNonInterned(nsIAtom* name);
static nsHtml5ElementName* ELT_ANNOTATION_XML;
static nsHtml5ElementName* ELT_BIG;
static nsHtml5ElementName* ELT_BDO;
static nsHtml5ElementName* ELT_COL;
@@ -221,7 +222,6 @@ private:
static nsHtml5ElementName* ELT_MASK;
static nsHtml5ElementName* ELT_TRACK;
static nsHtml5ElementName* ELT_DL;
static nsHtml5ElementName* ELT_ANNOTATION_XML;
static nsHtml5ElementName* ELT_HTML;
static nsHtml5ElementName* ELT_OL;
static nsHtml5ElementName* ELT_LABEL;

View File

@@ -95,6 +95,7 @@ nsHtml5Tokenizer::nsHtml5Tokenizer(nsHtml5TreeBuilder* tokenHandler,
, charRefBuf(jArray<char16_t, int32_t>::newJArray(32))
, bmpChar(jArray<char16_t, int32_t>::newJArray(1))
, astralChar(jArray<char16_t, int32_t>::newJArray(2))
, containsHyphen(false)
, tagName(nullptr)
, nonInternedTagName(new nsHtml5ElementName())
, attributeName(nullptr)
@@ -286,13 +287,28 @@ nsHtml5Tokenizer::flushChars(char16_t* buf, int32_t pos)
void
nsHtml5Tokenizer::strBufToElementNameString()
{
tagName = nsHtml5ElementName::elementNameByBuffer(strBuf, 0, strBufLen, interner);
if (containsHyphen) {
nsIAtom* annotationName = nsHtml5ElementName::ELT_ANNOTATION_XML->getName();
if (nsHtml5Portability::localEqualsBuffer(
annotationName, strBuf, 0, strBufLen)) {
tagName = nsHtml5ElementName::ELT_ANNOTATION_XML;
} else {
nonInternedTagName->setNameForNonInterned(
nsHtml5Portability::newLocalNameFromBuffer(
strBuf, 0, strBufLen, interner));
tagName = nonInternedTagName;
}
} else {
tagName =
nsHtml5ElementName::elementNameByBuffer(strBuf, 0, strBufLen, interner);
if (!tagName) {
nonInternedTagName->setNameForNonInterned(
nsHtml5Portability::newLocalNameFromBuffer(
strBuf, 0, strBufLen, interner));
tagName = nonInternedTagName;
}
}
containsHyphen = false;
clearStrBufAfterUse();
}
@@ -490,12 +506,14 @@ nsHtml5Tokenizer::stateLoop(int32_t state, char16_t c, int32_t pos, char16_t* bu
endTag = false;
clearStrBufBeforeUse();
appendStrBuf((char16_t) (c + 0x20));
containsHyphen = false;
state = P::transition(mViewSource, NS_HTML5TOKENIZER_TAG_NAME, reconsume, pos);
NS_HTML5_BREAK(tagopenloop);
} else if (c >= 'a' && c <= 'z') {
endTag = false;
clearStrBufBeforeUse();
appendStrBuf(c);
containsHyphen = false;
state = P::transition(mViewSource, NS_HTML5TOKENIZER_TAG_NAME, reconsume, pos);
NS_HTML5_BREAK(tagopenloop);
}
@@ -586,6 +604,8 @@ nsHtml5Tokenizer::stateLoop(int32_t state, char16_t c, int32_t pos, char16_t* bu
default: {
if (c >= 'A' && c <= 'Z') {
c += 0x20;
} else if (c == '-') {
containsHyphen = true;
}
appendStrBuf(c);
continue;
@@ -1926,6 +1946,7 @@ nsHtml5Tokenizer::stateLoop(int32_t state, char16_t c, int32_t pos, char16_t* bu
endTag = true;
clearStrBufBeforeUse();
appendStrBuf(c);
containsHyphen = false;
state = P::transition(mViewSource, NS_HTML5TOKENIZER_TAG_NAME, reconsume, pos);
NS_HTML5_CONTINUE(stateloop);
} else {
@@ -4001,6 +4022,7 @@ nsHtml5Tokenizer::resetToDataState()
endTag = false;
shouldSuspend = false;
initDoctypeFields();
containsHyphen = false;
if (tagName) {
tagName = nullptr;
}
@@ -4061,6 +4083,7 @@ nsHtml5Tokenizer::loadState(nsHtml5Tokenizer* other)
} else {
publicIdentifier = nsHtml5Portability::newStringFromString(other->publicIdentifier);
}
containsHyphen = other->containsHyphen;
if (!other->tagName) {
tagName = nullptr;
} else if (other->tagName->isInterned()) {

View File

@@ -121,9 +121,9 @@ class nsHtml5Tokenizer
protected:
bool endTag;
private:
bool containsHyphen;
nsHtml5ElementName* tagName;
nsHtml5ElementName* nonInternedTagName;
protected:
nsHtml5AttributeName* attributeName;
private: