summaryrefslogtreecommitdiffstats
path: root/parser
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-04-17 16:02:56 +0200
committerGitHub <noreply@github.com>2020-04-17 16:02:56 +0200
commitd5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf (patch)
tree2bfef192cbb748b675ce8308c242a376798e265d /parser
parent5caf99795aa81e1fc145b8e937b1ee8197ed2486 (diff)
parentf35aa3e15fedf3cd4ad163d60ab74a9537ca5c82 (diff)
downloadUXP-d5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf.tar
UXP-d5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf.tar.gz
UXP-d5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf.tar.lz
UXP-d5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf.tar.xz
UXP-d5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf.zip
Merge pull request #1518 from MoonchildProductions/shadowdom-merge
Incremental shadowdom-merge
Diffstat (limited to 'parser')
-rw-r--r--parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/ElementName.java214
-rw-r--r--parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/MetaScanner.java4
-rw-r--r--parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Portability.java2
-rw-r--r--parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Tokenizer.java2
-rw-r--r--parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/TreeBuilder.java2
-rw-r--r--parser/html/nsHtml5AtomList.h2
-rw-r--r--parser/html/nsHtml5ElementName.cpp114
-rw-r--r--parser/html/nsHtml5ElementName.h3
-rw-r--r--parser/html/nsHtml5MetaScanner.cpp4
-rw-r--r--parser/html/nsHtml5Portability.cpp20
-rw-r--r--parser/html/nsHtml5Portability.h2
-rw-r--r--parser/html/nsHtml5String.cpp140
-rw-r--r--parser/html/nsHtml5String.h112
-rw-r--r--parser/html/nsHtml5Tokenizer.cpp2
-rw-r--r--parser/html/nsHtml5TreeBuilder.cpp2
-rw-r--r--parser/html/nsHtml5TreeOperation.cpp88
-rw-r--r--parser/htmlparser/moz.build1
-rw-r--r--parser/htmlparser/nsElementTable.cpp795
-rw-r--r--parser/htmlparser/nsElementTable.h92
-rw-r--r--parser/htmlparser/nsHTMLTagList.h3
-rw-r--r--parser/htmlparser/nsHTMLTags.cpp20
-rw-r--r--parser/htmlparser/nsHTMLTags.h13
-rw-r--r--parser/htmlparser/nsParserService.cpp19
23 files changed, 616 insertions, 1040 deletions
diff --git a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/ElementName.java b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/ElementName.java
index 4e1acea50..4b87d3fde 100644
--- a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/ElementName.java
+++ b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/ElementName.java
@@ -1987,10 +1987,6 @@ public final class ElementName
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGUnknownElement,
TreeBuilder.OTHER);
- public static final ElementName CONTENT = new ElementName("content", "content",
- // CPPONLY: NS_NewHTMLContentElement,
- // CPPONLY: NS_NewSVGUnknownElement,
- TreeBuilder.OTHER);
public static final ElementName GT = new ElementName("gt", "gt",
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGUnknownElement,
@@ -2175,6 +2171,10 @@ public final class ElementName
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGUnknownElement,
TreeBuilder.OTHER);
+ public static final ElementName SLOT = new ElementName("slot", "slot",
+ // CPPONLY: NS_NewHTMLSlotElement,
+ // CPPONLY: NS_NewSVGUnknownElement,
+ TreeBuilder.OTHER);
public static final ElementName SCRIPT = new ElementName("script", "script",
// CPPONLY: NS_NewHTMLScriptElement,
// CPPONLY: NS_NewSVGScriptElement,
@@ -2215,10 +2215,6 @@ public final class ElementName
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGUnknownElement,
TreeBuilder.OTHER);
- public static final ElementName SHADOW = new ElementName("shadow", "shadow",
- // CPPONLY: NS_NewHTMLShadowElement,
- // CPPONLY: NS_NewSVGUnknownElement,
- TreeBuilder.OTHER);
public static final ElementName VIEW = new ElementName("view", "view",
// CPPONLY: NS_NewHTMLUnknownElement,
// CPPONLY: NS_NewSVGViewElement,
@@ -2277,16 +2273,16 @@ public final class ElementName
FIELDSET,
DATA,
LI,
- COMPLEXES,
+ CANVAS,
QUOTIENT,
PRE,
ARTICLE,
DIALOG,
ARCTAN,
LISTENER,
- RATIONALS,
+ REALS,
MROOT,
- MATRIXROW,
+ MROW,
GEQ,
G,
DD,
@@ -2296,12 +2292,12 @@ public final class ElementName
INTERVAL,
MN,
BR,
- POWER,
- MMULTISCRIPTS,
- CONTENT,
+ NOTANUMBER,
+ MPRESCRIPTS,
+ CARTESIANPRODUCT,
INTERSECT,
RT,
- TFOOT,
+ SCRIPT,
APPLY,
COS,
MTD,
@@ -2321,18 +2317,18 @@ public final class ElementName
OPTION,
MALIGNGROUP,
FECOMPONENTTRANSFER,
- MERROR,
- VECTOR,
- IMPLIES,
- PRIMES,
- APPLET,
+ MUNDEROVER,
+ SELECTOR,
+ EXISTS,
+ NATURALNUMBERS,
+ DT,
EMPTYSET,
FEPOINTLIGHT,
LOWLIMIT,
NOTSUBSET,
PRODUCT,
SELECT,
- MENU,
+ VECTORPRODUCT,
FECOLORMATRIX,
INFINITY,
BIG,
@@ -2371,16 +2367,16 @@ public final class ElementName
OPTGROUP,
CENTER,
FEGAUSSIANBLUR,
- MOVER,
- NOBR,
- SOLIDCOLOR,
- ADDRESS,
- DETAILS,
- MS,
- NOFRAMES,
- PLUS,
- TIMES,
- BASEFONT,
+ METER,
+ MLABELEDTR,
+ TR,
+ ARCCOS,
+ DEFS,
+ INTEGERS,
+ MINUS,
+ PROGRESS,
+ SEMANTICS,
+ ARCCOT,
DETERMINANT,
FONT_FACE_FORMAT,
FEOFFSET,
@@ -2393,8 +2389,8 @@ public final class ElementName
PLAINTEXT,
RADIALGRADIENT,
SUBSET,
- UPLIMIT,
- FEDROPSHADOW,
+ TEXT,
+ SDEV,
VIEW,
ISINDEX,
FEMORPHOLOGY,
@@ -2472,25 +2468,25 @@ public final class ElementName
FOOTER,
HANDLER,
MARKER,
- MUNDEROVER,
- MLABELEDTR,
- NOTANUMBER,
- TR,
- SELECTOR,
- ARCCOS,
- CANVAS,
- DEFS,
- EXISTS,
- INTEGERS,
- MPRESCRIPTS,
- MINUS,
- NATURALNUMBERS,
- PROGRESS,
- REALS,
- SEMANTICS,
- DT,
- ARCCOT,
- CARTESIANPRODUCT,
+ MOVER,
+ MERROR,
+ NOBR,
+ POWER,
+ SOLIDCOLOR,
+ VECTOR,
+ ADDRESS,
+ COMPLEXES,
+ DETAILS,
+ IMPLIES,
+ MS,
+ MMULTISCRIPTS,
+ NOFRAMES,
+ PRIMES,
+ PLUS,
+ RATIONALS,
+ TIMES,
+ APPLET,
+ BASEFONT,
GT,
DATALIST,
EQUIVALENT,
@@ -2514,12 +2510,12 @@ public final class ElementName
RECT,
ROOT,
SCALARPRODUCT,
- SCRIPT,
- TEXT,
- VECTORPRODUCT,
- SDEV,
- MROW,
- SHADOW,
+ SLOT,
+ TFOOT,
+ UPLIMIT,
+ MENU,
+ FEDROPSHADOW,
+ MATRIXROW,
APPROX,
FECONVOLVEMATRIX,
MATRIX,
@@ -2672,7 +2668,6 @@ public final class ElementName
HEADER,
OR,
MUNDER,
- METER,
};
private final static int[] ELEMENT_HASHES = {
1909280949,
@@ -2680,16 +2675,16 @@ public final class ElementName
2001349704,
1681770564,
1818230786,
- 1983002201,
+ 1982935782,
2007257240,
58773795,
1747176599,
1782357526,
1897999926,
1970938456,
- 1990969577,
+ 1990969429,
2005181733,
- 2055515017,
+ 2055514836,
54061139,
62390273,
1730150402,
@@ -2699,12 +2694,12 @@ public final class ElementName
1868641064,
1902641154,
1963982850,
- 1973040373,
- 1988486813,
- 1999917383,
+ 1971981018,
+ 1988486811,
+ 1999745104,
2002882873,
2005925890,
- 2008851557,
+ 2008340774,
2082727685,
51965171,
57200451,
@@ -2724,18 +2719,18 @@ public final class ElementName
1905563974,
1938171179,
1967788867,
- 1971628838,
- 1976348214,
- 1986140359,
- 1989812374,
- 1998724870,
+ 1971467002,
+ 1974775352,
+ 1984294038,
+ 1988972590,
+ 1998585858,
2000825752,
2001392796,
2004557976,
2005543977,
2006560839,
2008125638,
- 2021937364,
+ 2009706573,
2068523853,
2087049448,
51434643,
@@ -2774,16 +2769,16 @@ public final class ElementName
1939219752,
1966223078,
1968053806,
- 1971466997,
- 1971938532,
- 1974771450,
- 1982173479,
- 1983633431,
- 1986527234,
- 1988763672,
- 1990074116,
- 1991909525,
- 1999397992,
+ 1971465813,
+ 1971703386,
+ 1973420034,
+ 1982106678,
+ 1983533124,
+ 1986351224,
+ 1988502165,
+ 1990037800,
+ 1991350601,
+ 1998883894,
2000439531,
2001281328,
2001349736,
@@ -2796,8 +2791,8 @@ public final class ElementName
2006896969,
2007781534,
2008165414,
- 2009276567,
- 2051837468,
+ 2008994116,
+ 2041712436,
2060065124,
2070023911,
2085266636,
@@ -2875,25 +2870,25 @@ public final class ElementName
1967795958,
1968840263,
1971461414,
- 1971467002,
- 1971703386,
- 1971981018,
- 1973420034,
- 1974775352,
- 1982106678,
- 1982935782,
- 1983533124,
- 1984294038,
- 1986351224,
- 1988486811,
- 1988502165,
- 1988972590,
- 1990037800,
- 1990969429,
- 1991350601,
- 1998585858,
- 1998883894,
- 1999745104,
+ 1971466997,
+ 1971628838,
+ 1971938532,
+ 1973040373,
+ 1974771450,
+ 1976348214,
+ 1982173479,
+ 1983002201,
+ 1983633431,
+ 1986140359,
+ 1986527234,
+ 1988486813,
+ 1988763672,
+ 1989812374,
+ 1990074116,
+ 1990969577,
+ 1991909525,
+ 1998724870,
+ 1999397992,
2000158722,
2000525512,
2000965834,
@@ -2917,12 +2912,12 @@ public final class ElementName
2007601444,
2007803172,
2008133709,
- 2008340774,
- 2008994116,
- 2009706573,
- 2041712436,
- 2055514836,
- 2058653206,
+ 2008325940,
+ 2008851557,
+ 2009276567,
+ 2021937364,
+ 2051837468,
+ 2055515017,
2066000646,
2068523856,
2072193862,
@@ -3075,6 +3070,5 @@ public final class ElementName
1968836118,
1970798594,
1971457766,
- 1971465813,
};
}
diff --git a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/MetaScanner.java b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/MetaScanner.java
index 9a3dc16b2..be7576ff0 100644
--- a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/MetaScanner.java
+++ b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/MetaScanner.java
@@ -798,13 +798,13 @@ public abstract class MetaScanner {
}
if (contentIndex == CONTENT.length && content == null) {
content = Portability.newStringFromBuffer(strBuf, 0, strBufLen
- // CPPONLY: , treeBuilder
+ // CPPONLY: , treeBuilder, false
);
return;
}
if (charsetIndex == CHARSET.length && charset == null) {
charset = Portability.newStringFromBuffer(strBuf, 0, strBufLen
- // CPPONLY: , treeBuilder
+ // CPPONLY: , treeBuilder, false
);
return;
}
diff --git a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Portability.java b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Portability.java
index 2b3f96625..8f941ce01 100644
--- a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Portability.java
+++ b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Portability.java
@@ -42,7 +42,7 @@ public final class Portability {
}
public static String newStringFromBuffer(@NoLength char[] buf, int offset, int length
- // CPPONLY: , TreeBuilder treeBuilder
+ // CPPONLY: , TreeBuilder treeBuilder, boolean maybeAtomize
) {
return new String(buf, offset, length);
}
diff --git a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Tokenizer.java b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Tokenizer.java
index 996bd9ceb..3d617fd01 100644
--- a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Tokenizer.java
+++ b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/Tokenizer.java
@@ -917,7 +917,7 @@ public class Tokenizer implements Locator {
*/
protected String strBufToString() {
String str = Portability.newStringFromBuffer(strBuf, 0, strBufLen
- // CPPONLY: , tokenHandler
+ // CPPONLY: , tokenHandler, !newAttributesEachTime && attributeName == AttributeName.CLASS
);
clearStrBufAfterUse();
return str;
diff --git a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/TreeBuilder.java b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/TreeBuilder.java
index cc60f4c4b..ef9576ee3 100644
--- a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/TreeBuilder.java
+++ b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/TreeBuilder.java
@@ -3337,7 +3337,7 @@ public abstract class TreeBuilder<T> implements TokenHandler,
}
charset = Portability.newStringFromBuffer(buffer, start, end
- start
- // CPPONLY: , tb
+ // CPPONLY: , tb, false
);
}
return charset;
diff --git a/parser/html/nsHtml5AtomList.h b/parser/html/nsHtml5AtomList.h
index 71617e4ea..0728f439b 100644
--- a/parser/html/nsHtml5AtomList.h
+++ b/parser/html/nsHtml5AtomList.h
@@ -1049,6 +1049,7 @@ HTML5_ATOM(root, "root")
HTML5_ATOM(select, "select")
HTML5_ATOM(scalarproduct, "scalarproduct")
HTML5_ATOM(subset, "subset")
+HTML5_ATOM(slot, "slot")
HTML5_ATOM(script, "script")
HTML5_ATOM(tfoot, "tfoot")
HTML5_ATOM(uplimit, "uplimit")
@@ -1059,7 +1060,6 @@ HTML5_ATOM(fedropshadow, "fedropshadow")
HTML5_ATOM(feDropShadow, "feDropShadow")
HTML5_ATOM(mrow, "mrow")
HTML5_ATOM(matrixrow, "matrixrow")
-HTML5_ATOM(shadow, "shadow")
HTML5_ATOM(view, "view")
HTML5_ATOM(approx, "approx")
HTML5_ATOM(fecolormatrix, "fecolormatrix")
diff --git a/parser/html/nsHtml5ElementName.cpp b/parser/html/nsHtml5ElementName.cpp
index 84a056012..ecdfb102d 100644
--- a/parser/html/nsHtml5ElementName.cpp
+++ b/parser/html/nsHtml5ElementName.cpp
@@ -416,7 +416,6 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_APPLET = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_ARCCOT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_BASEFONT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_CARTESIANPRODUCT = nullptr;
-nsHtml5ElementName* nsHtml5ElementName::ELT_CONTENT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_GT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_DETERMINANT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_DATALIST = nullptr;
@@ -463,6 +462,7 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_ROOT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_SELECT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_SCALARPRODUCT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_SUBSET = nullptr;
+nsHtml5ElementName* nsHtml5ElementName::ELT_SLOT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_SCRIPT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_TFOOT = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_TEXT = nullptr;
@@ -473,7 +473,6 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_SDEV = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_FEDROPSHADOW = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_MROW = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_MATRIXROW = nullptr;
-nsHtml5ElementName* nsHtml5ElementName::ELT_SHADOW = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_VIEW = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_APPROX = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_FECOLORMATRIX = nullptr;
@@ -488,7 +487,7 @@ nsHtml5ElementName* nsHtml5ElementName::ELT_RUBY = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_SUMMARY = nullptr;
nsHtml5ElementName* nsHtml5ElementName::ELT_TBODY = nullptr;
nsHtml5ElementName** nsHtml5ElementName::ELEMENT_NAMES = 0;
-static int32_t const ELEMENT_HASHES_DATA[] = { 1909280949, 1753057319, 2001349704, 1681770564, 1818230786, 1983002201, 2007257240, 58773795, 1747176599, 1782357526, 1897999926, 1970938456, 1990969577, 2005181733, 2055515017, 54061139, 62390273, 1730150402, 1749395095, 1756625221, 1798693940, 1868641064, 1902641154, 1963982850, 1973040373, 1988486813, 1999917383, 2002882873, 2005925890, 2008851557, 2082727685, 51965171, 57200451, 60350803, 69730305, 1703292116, 1733890180, 1748355193, 1749813541, 1754634617, 1763839627, 1797540167, 1805647874, 1857622310, 1881498736, 1899272519, 1905563974, 1938171179, 1967788867, 1971628838, 1976348214, 1986140359, 1989812374, 1998724870, 2000825752, 2001392796, 2004557976, 2005543977, 2006560839, 2008125638, 2021937364, 2068523853, 2087049448, 51434643, 52488851, 56151587, 57210387, 59826259, 60354131, 63438849, 926941186, 1686489160, 1715300574, 1732381397, 1737099991, 1748100148, 1748642422, 1749715159, 1751288021, 1753467414, 1755158905, 1757259017, 1771722827, 1786534215, 1797645367, 1803929812, 1807501636, 1853642948, 1865773108, 1873350948, 1887579800, 1898223949, 1900544002, 1904285766, 1907435316, 1925844629, 1939219752, 1966223078, 1968053806, 1971466997, 1971938532, 1974771450, 1982173479, 1983633431, 1986527234, 1988763672, 1990074116, 1991909525, 1999397992, 2000439531, 2001281328, 2001349736, 2001495140, 2003183333, 2004719812, 2005279787, 2005719336, 2006036556, 2006896969, 2007781534, 2008165414, 2009276567, 2051837468, 2060065124, 2070023911, 2085266636, 2092255447, 50910499, 51957043, 52485715, 53012355, 55110883, 56680499, 57206291, 57732851, 59768833, 60345427, 60352083, 61395251, 62973651, 67633153, 893386754, 960495618, 1682547543, 1689922072, 1713515574, 1716349149, 1731545140, 1733076167, 1736576231, 1740181637, 1747814436, 1748228205, 1748607578, 1748879564, 1749656156, 1749801286, 1749917205, 1751493207, 1753343188, 1753588936, 1755076808, 1756474198, 1757146773, 1757293380, 1766632184, 1773808452, 1783388497, 1797361975, 1797585096, 1798677556, 1803876550, 1805233752, 1806806678, 1813512194, 1818755074, 1854228698, 1864368130, 1867237670, 1870268949, 1874102998, 1881669634, 1889085973, 1898223945, 1898971138, 1899694294, 1901940917, 1903761465, 1904515399, 1906135367, 1907959605, 1919418370, 1934172497, 1938173140, 1941221172, 1965334268, 1967128578, 1967795958, 1968840263, 1971461414, 1971467002, 1971703386, 1971981018, 1973420034, 1974775352, 1982106678, 1982935782, 1983533124, 1984294038, 1986351224, 1988486811, 1988502165, 1988972590, 1990037800, 1990969429, 1991350601, 1998585858, 1998883894, 1999745104, 2000158722, 2000525512, 2000965834, 2001309869, 2001349720, 2001392795, 2001392798, 2002780162, 2003062853, 2004557973, 2004635806, 2005160150, 2005231925, 2005324101, 2005543979, 2005766372, 2006028454, 2006329158, 2006592552, 2006974466, 2007601444, 2007803172, 2008133709, 2008340774, 2008994116, 2009706573, 2041712436, 2055514836, 2058653206, 2066000646, 2068523856, 2072193862, 2083120164, 2087012585, 2091479332, 2092557349, 50908899, 50916387, 51438659, 51961587, 51965683, 52486755, 52490899, 54054451, 55104723, 55111395, 56677619, 56682579, 57205395, 57207619, 57731155, 57733651, 59244545, 59821379, 60345171, 60347747, 60351123, 60352339, 60875283, 61925907, 62450211, 62974707, 67108865, 68681729, 876609538, 910163970, 943718402, 1679960596, 1682186266, 1685703382, 1686491348, 1699324759, 1703936002, 1713736758, 1715310660, 1719741029, 1730965751, 1732069431, 1733054663, 1733372532, 1736200310, 1736576583, 1738539010, 1747048757, 1747306711, 1747838298, 1748225318, 1748346119, 1748359220, 1748621670, 1748846791, 1749272732, 1749649513, 1749673195, 1749723735, 1749813486, 1749905526, 1749932347, 1751386406, 1752979652, 1753319686, 1753362711, 1753479494, 1754031332, 1754894485, 1755148615, 1756098852, 1756600614, 1757137429, 1757157700, 1757268168, 1758044696, 1765431364, 1766992520, 1773295687, 1781815495, 1783210839, 1783388498, 1790207270, 1797368887, 1797544247, 1797628983, 1798417460, 1798686984, 1800730821, 1803876557, 1803929861, 1805502724, 1806799156, 1806981428, 1807599880, 1817013469, 1818700314, 1820327938, 1854228692, 1854245076, 1857653029, 1865714391, 1867061545, 1868312196, 1870135298, 1873281026, 1874053333, 1881288348, 1881613047, 1884120164, 1887743720, 1897398274, 1898130486, 1898223946, 1898753862, 1899170008, 1899272521, 1899796819, 1900845386, 1902116866, 1903302038, 1904283860, 1904412884, 1904946933, 1906087319, 1907085604, 1907661127, 1908709605, 1914900309, 1925049415, 1932928296, 1935549734, 1938172967, 1938817026, 1941178676, 1948778498, 1965115924, 1965634084, 1966386470, 1967760215, 1967795910, 1967957189, 1968836118, 1970798594, 1971457766, 1971465813 };
+static int32_t const ELEMENT_HASHES_DATA[] = { 1909280949, 1753057319, 2001349704, 1681770564, 1818230786, 1982935782, 2007257240, 58773795, 1747176599, 1782357526, 1897999926, 1970938456, 1990969429, 2005181733, 2055514836, 54061139, 62390273, 1730150402, 1749395095, 1756625221, 1798693940, 1868641064, 1902641154, 1963982850, 1971981018, 1988486811, 1999745104, 2002882873, 2005925890, 2008340774, 2082727685, 51965171, 57200451, 60350803, 69730305, 1703292116, 1733890180, 1748355193, 1749813541, 1754634617, 1763839627, 1797540167, 1805647874, 1857622310, 1881498736, 1899272519, 1905563974, 1938171179, 1967788867, 1971467002, 1974775352, 1984294038, 1988972590, 1998585858, 2000825752, 2001392796, 2004557976, 2005543977, 2006560839, 2008125638, 2009706573, 2068523853, 2087049448, 51434643, 52488851, 56151587, 57210387, 59826259, 60354131, 63438849, 926941186, 1686489160, 1715300574, 1732381397, 1737099991, 1748100148, 1748642422, 1749715159, 1751288021, 1753467414, 1755158905, 1757259017, 1771722827, 1786534215, 1797645367, 1803929812, 1807501636, 1853642948, 1865773108, 1873350948, 1887579800, 1898223949, 1900544002, 1904285766, 1907435316, 1925844629, 1939219752, 1966223078, 1968053806, 1971465813, 1971703386, 1973420034, 1982106678, 1983533124, 1986351224, 1988502165, 1990037800, 1991350601, 1998883894, 2000439531, 2001281328, 2001349736, 2001495140, 2003183333, 2004719812, 2005279787, 2005719336, 2006036556, 2006896969, 2007781534, 2008165414, 2008994116, 2041712436, 2060065124, 2070023911, 2085266636, 2092255447, 50910499, 51957043, 52485715, 53012355, 55110883, 56680499, 57206291, 57732851, 59768833, 60345427, 60352083, 61395251, 62973651, 67633153, 893386754, 960495618, 1682547543, 1689922072, 1713515574, 1716349149, 1731545140, 1733076167, 1736576231, 1740181637, 1747814436, 1748228205, 1748607578, 1748879564, 1749656156, 1749801286, 1749917205, 1751493207, 1753343188, 1753588936, 1755076808, 1756474198, 1757146773, 1757293380, 1766632184, 1773808452, 1783388497, 1797361975, 1797585096, 1798677556, 1803876550, 1805233752, 1806806678, 1813512194, 1818755074, 1854228698, 1864368130, 1867237670, 1870268949, 1874102998, 1881669634, 1889085973, 1898223945, 1898971138, 1899694294, 1901940917, 1903761465, 1904515399, 1906135367, 1907959605, 1919418370, 1934172497, 1938173140, 1941221172, 1965334268, 1967128578, 1967795958, 1968840263, 1971461414, 1971466997, 1971628838, 1971938532, 1973040373, 1974771450, 1976348214, 1982173479, 1983002201, 1983633431, 1986140359, 1986527234, 1988486813, 1988763672, 1989812374, 1990074116, 1990969577, 1991909525, 1998724870, 1999397992, 2000158722, 2000525512, 2000965834, 2001309869, 2001349720, 2001392795, 2001392798, 2002780162, 2003062853, 2004557973, 2004635806, 2005160150, 2005231925, 2005324101, 2005543979, 2005766372, 2006028454, 2006329158, 2006592552, 2006974466, 2007601444, 2007803172, 2008133709, 2008325940, 2008851557, 2009276567, 2021937364, 2051837468, 2055515017, 2066000646, 2068523856, 2072193862, 2083120164, 2087012585, 2091479332, 2092557349, 50908899, 50916387, 51438659, 51961587, 51965683, 52486755, 52490899, 54054451, 55104723, 55111395, 56677619, 56682579, 57205395, 57207619, 57731155, 57733651, 59244545, 59821379, 60345171, 60347747, 60351123, 60352339, 60875283, 61925907, 62450211, 62974707, 67108865, 68681729, 876609538, 910163970, 943718402, 1679960596, 1682186266, 1685703382, 1686491348, 1699324759, 1703936002, 1713736758, 1715310660, 1719741029, 1730965751, 1732069431, 1733054663, 1733372532, 1736200310, 1736576583, 1738539010, 1747048757, 1747306711, 1747838298, 1748225318, 1748346119, 1748359220, 1748621670, 1748846791, 1749272732, 1749649513, 1749673195, 1749723735, 1749813486, 1749905526, 1749932347, 1751386406, 1752979652, 1753319686, 1753362711, 1753479494, 1754031332, 1754894485, 1755148615, 1756098852, 1756600614, 1757137429, 1757157700, 1757268168, 1758044696, 1765431364, 1766992520, 1773295687, 1781815495, 1783210839, 1783388498, 1790207270, 1797368887, 1797544247, 1797628983, 1798417460, 1798686984, 1800730821, 1803876557, 1803929861, 1805502724, 1806799156, 1806981428, 1807599880, 1817013469, 1818700314, 1820327938, 1854228692, 1854245076, 1857653029, 1865714391, 1867061545, 1868312196, 1870135298, 1873281026, 1874053333, 1881288348, 1881613047, 1884120164, 1887743720, 1897398274, 1898130486, 1898223946, 1898753862, 1899170008, 1899272521, 1899796819, 1900845386, 1902116866, 1903302038, 1904283860, 1904412884, 1904946933, 1906087319, 1907085604, 1907661127, 1908709605, 1914900309, 1925049415, 1932928296, 1935549734, 1938172967, 1938817026, 1941178676, 1948778498, 1965115924, 1965634084, 1966386470, 1967760215, 1967795910, 1967957189, 1968836118, 1970798594, 1971457766 };
staticJArray<int32_t,int32_t> nsHtml5ElementName::ELEMENT_HASHES = { ELEMENT_HASHES_DATA, MOZ_ARRAY_LENGTH(ELEMENT_HASHES_DATA) };
void
nsHtml5ElementName::initializeStatics()
@@ -824,7 +823,6 @@ nsHtml5ElementName::initializeStatics()
ELT_ARCCOT = new nsHtml5ElementName(nsHtml5Atoms::arccot, nsHtml5Atoms::arccot, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_BASEFONT = new nsHtml5ElementName(nsHtml5Atoms::basefont, nsHtml5Atoms::basefont, NS_NewHTMLElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::LINK_OR_BASEFONT_OR_BGSOUND | SPECIAL);
ELT_CARTESIANPRODUCT = new nsHtml5ElementName(nsHtml5Atoms::cartesianproduct, nsHtml5Atoms::cartesianproduct, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
- ELT_CONTENT = new nsHtml5ElementName(nsHtml5Atoms::content, nsHtml5Atoms::content, NS_NewHTMLContentElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_GT = new nsHtml5ElementName(nsHtml5Atoms::gt, nsHtml5Atoms::gt, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_DETERMINANT = new nsHtml5ElementName(nsHtml5Atoms::determinant, nsHtml5Atoms::determinant, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_DATALIST = new nsHtml5ElementName(nsHtml5Atoms::datalist, nsHtml5Atoms::datalist, NS_NewHTMLDataListElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
@@ -871,6 +869,7 @@ nsHtml5ElementName::initializeStatics()
ELT_SELECT = new nsHtml5ElementName(nsHtml5Atoms::select, nsHtml5Atoms::select, NS_NewHTMLSelectElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::SELECT | SPECIAL);
ELT_SCALARPRODUCT = new nsHtml5ElementName(nsHtml5Atoms::scalarproduct, nsHtml5Atoms::scalarproduct, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_SUBSET = new nsHtml5ElementName(nsHtml5Atoms::subset, nsHtml5Atoms::subset, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
+ ELT_SLOT = new nsHtml5ElementName(nsHtml5Atoms::slot, nsHtml5Atoms::slot, NS_NewHTMLSlotElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_SCRIPT = new nsHtml5ElementName(nsHtml5Atoms::script, nsHtml5Atoms::script, NS_NewHTMLScriptElement, NS_NewSVGScriptElement, nsHtml5TreeBuilder::SCRIPT | SPECIAL);
ELT_TFOOT = new nsHtml5ElementName(nsHtml5Atoms::tfoot, nsHtml5Atoms::tfoot, NS_NewHTMLTableSectionElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
ELT_TEXT = new nsHtml5ElementName(nsHtml5Atoms::text, nsHtml5Atoms::text, NS_NewHTMLUnknownElement, NS_NewSVGTextElement, nsHtml5TreeBuilder::OTHER);
@@ -881,7 +880,6 @@ nsHtml5ElementName::initializeStatics()
ELT_FEDROPSHADOW = new nsHtml5ElementName(nsHtml5Atoms::fedropshadow, nsHtml5Atoms::feDropShadow, NS_NewHTMLUnknownElement, NS_NewSVGFEDropShadowElement, nsHtml5TreeBuilder::OTHER);
ELT_MROW = new nsHtml5ElementName(nsHtml5Atoms::mrow, nsHtml5Atoms::mrow, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_MATRIXROW = new nsHtml5ElementName(nsHtml5Atoms::matrixrow, nsHtml5Atoms::matrixrow, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
- ELT_SHADOW = new nsHtml5ElementName(nsHtml5Atoms::shadow, nsHtml5Atoms::shadow, NS_NewHTMLShadowElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_VIEW = new nsHtml5ElementName(nsHtml5Atoms::view, nsHtml5Atoms::view, NS_NewHTMLUnknownElement, NS_NewSVGViewElement, nsHtml5TreeBuilder::OTHER);
ELT_APPROX = new nsHtml5ElementName(nsHtml5Atoms::approx, nsHtml5Atoms::approx, NS_NewHTMLUnknownElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::OTHER);
ELT_FECOLORMATRIX = new nsHtml5ElementName(nsHtml5Atoms::fecolormatrix, nsHtml5Atoms::feColorMatrix, NS_NewHTMLUnknownElement, NS_NewSVGFEColorMatrixElement, nsHtml5TreeBuilder::OTHER);
@@ -895,22 +893,22 @@ nsHtml5ElementName::initializeStatics()
ELT_RUBY = new nsHtml5ElementName(nsHtml5Atoms::ruby, nsHtml5Atoms::ruby, NS_NewHTMLElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::RUBY_OR_SPAN_OR_SUB_OR_SUP_OR_VAR);
ELT_SUMMARY = new nsHtml5ElementName(nsHtml5Atoms::summary, nsHtml5Atoms::summary, NS_NewHTMLSummaryElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::ADDRESS_OR_ARTICLE_OR_ASIDE_OR_DETAILS_OR_DIALOG_OR_DIR_OR_FIGCAPTION_OR_FIGURE_OR_FOOTER_OR_HEADER_OR_HGROUP_OR_MAIN_OR_NAV_OR_SECTION_OR_SUMMARY | SPECIAL);
ELT_TBODY = new nsHtml5ElementName(nsHtml5Atoms::tbody, nsHtml5Atoms::tbody, NS_NewHTMLTableSectionElement, NS_NewSVGUnknownElement, nsHtml5TreeBuilder::TBODY_OR_THEAD_OR_TFOOT | SPECIAL | FOSTER_PARENTING | OPTIONAL_END_TAG);
- ELEMENT_NAMES = new nsHtml5ElementName*[401];
+ ELEMENT_NAMES = new nsHtml5ElementName*[400];
ELEMENT_NAMES[0] = ELT_VKERN;
ELEMENT_NAMES[1] = ELT_LOGBASE;
ELEMENT_NAMES[2] = ELT_FIELDSET;
ELEMENT_NAMES[3] = ELT_DATA;
ELEMENT_NAMES[4] = ELT_LI;
- ELEMENT_NAMES[5] = ELT_COMPLEXES;
+ ELEMENT_NAMES[5] = ELT_CANVAS;
ELEMENT_NAMES[6] = ELT_QUOTIENT;
ELEMENT_NAMES[7] = ELT_PRE;
ELEMENT_NAMES[8] = ELT_ARTICLE;
ELEMENT_NAMES[9] = ELT_DIALOG;
ELEMENT_NAMES[10] = ELT_ARCTAN;
ELEMENT_NAMES[11] = ELT_LISTENER;
- ELEMENT_NAMES[12] = ELT_RATIONALS;
+ ELEMENT_NAMES[12] = ELT_REALS;
ELEMENT_NAMES[13] = ELT_MROOT;
- ELEMENT_NAMES[14] = ELT_MATRIXROW;
+ ELEMENT_NAMES[14] = ELT_MROW;
ELEMENT_NAMES[15] = ELT_GEQ;
ELEMENT_NAMES[16] = ELT_G;
ELEMENT_NAMES[17] = ELT_DD;
@@ -920,12 +918,12 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[21] = ELT_INTERVAL;
ELEMENT_NAMES[22] = ELT_MN;
ELEMENT_NAMES[23] = ELT_BR;
- ELEMENT_NAMES[24] = ELT_POWER;
- ELEMENT_NAMES[25] = ELT_MMULTISCRIPTS;
- ELEMENT_NAMES[26] = ELT_CONTENT;
+ ELEMENT_NAMES[24] = ELT_NOTANUMBER;
+ ELEMENT_NAMES[25] = ELT_MPRESCRIPTS;
+ ELEMENT_NAMES[26] = ELT_CARTESIANPRODUCT;
ELEMENT_NAMES[27] = ELT_INTERSECT;
ELEMENT_NAMES[28] = ELT_RT;
- ELEMENT_NAMES[29] = ELT_TFOOT;
+ ELEMENT_NAMES[29] = ELT_SCRIPT;
ELEMENT_NAMES[30] = ELT_APPLY;
ELEMENT_NAMES[31] = ELT_COS;
ELEMENT_NAMES[32] = ELT_MTD;
@@ -945,18 +943,18 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[46] = ELT_OPTION;
ELEMENT_NAMES[47] = ELT_MALIGNGROUP;
ELEMENT_NAMES[48] = ELT_FECOMPONENTTRANSFER;
- ELEMENT_NAMES[49] = ELT_MERROR;
- ELEMENT_NAMES[50] = ELT_VECTOR;
- ELEMENT_NAMES[51] = ELT_IMPLIES;
- ELEMENT_NAMES[52] = ELT_PRIMES;
- ELEMENT_NAMES[53] = ELT_APPLET;
+ ELEMENT_NAMES[49] = ELT_MUNDEROVER;
+ ELEMENT_NAMES[50] = ELT_SELECTOR;
+ ELEMENT_NAMES[51] = ELT_EXISTS;
+ ELEMENT_NAMES[52] = ELT_NATURALNUMBERS;
+ ELEMENT_NAMES[53] = ELT_DT;
ELEMENT_NAMES[54] = ELT_EMPTYSET;
ELEMENT_NAMES[55] = ELT_FEPOINTLIGHT;
ELEMENT_NAMES[56] = ELT_LOWLIMIT;
ELEMENT_NAMES[57] = ELT_NOTSUBSET;
ELEMENT_NAMES[58] = ELT_PRODUCT;
ELEMENT_NAMES[59] = ELT_SELECT;
- ELEMENT_NAMES[60] = ELT_MENU;
+ ELEMENT_NAMES[60] = ELT_VECTORPRODUCT;
ELEMENT_NAMES[61] = ELT_FECOLORMATRIX;
ELEMENT_NAMES[62] = ELT_INFINITY;
ELEMENT_NAMES[63] = ELT_BIG;
@@ -995,16 +993,16 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[96] = ELT_OPTGROUP;
ELEMENT_NAMES[97] = ELT_CENTER;
ELEMENT_NAMES[98] = ELT_FEGAUSSIANBLUR;
- ELEMENT_NAMES[99] = ELT_MOVER;
- ELEMENT_NAMES[100] = ELT_NOBR;
- ELEMENT_NAMES[101] = ELT_SOLIDCOLOR;
- ELEMENT_NAMES[102] = ELT_ADDRESS;
- ELEMENT_NAMES[103] = ELT_DETAILS;
- ELEMENT_NAMES[104] = ELT_MS;
- ELEMENT_NAMES[105] = ELT_NOFRAMES;
- ELEMENT_NAMES[106] = ELT_PLUS;
- ELEMENT_NAMES[107] = ELT_TIMES;
- ELEMENT_NAMES[108] = ELT_BASEFONT;
+ ELEMENT_NAMES[99] = ELT_METER;
+ ELEMENT_NAMES[100] = ELT_MLABELEDTR;
+ ELEMENT_NAMES[101] = ELT_TR;
+ ELEMENT_NAMES[102] = ELT_ARCCOS;
+ ELEMENT_NAMES[103] = ELT_DEFS;
+ ELEMENT_NAMES[104] = ELT_INTEGERS;
+ ELEMENT_NAMES[105] = ELT_MINUS;
+ ELEMENT_NAMES[106] = ELT_PROGRESS;
+ ELEMENT_NAMES[107] = ELT_SEMANTICS;
+ ELEMENT_NAMES[108] = ELT_ARCCOT;
ELEMENT_NAMES[109] = ELT_DETERMINANT;
ELEMENT_NAMES[110] = ELT_FONT_FACE_FORMAT;
ELEMENT_NAMES[111] = ELT_FEOFFSET;
@@ -1017,8 +1015,8 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[118] = ELT_PLAINTEXT;
ELEMENT_NAMES[119] = ELT_RADIALGRADIENT;
ELEMENT_NAMES[120] = ELT_SUBSET;
- ELEMENT_NAMES[121] = ELT_UPLIMIT;
- ELEMENT_NAMES[122] = ELT_FEDROPSHADOW;
+ ELEMENT_NAMES[121] = ELT_TEXT;
+ ELEMENT_NAMES[122] = ELT_SDEV;
ELEMENT_NAMES[123] = ELT_VIEW;
ELEMENT_NAMES[124] = ELT_ISINDEX;
ELEMENT_NAMES[125] = ELT_FEMORPHOLOGY;
@@ -1096,25 +1094,25 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[197] = ELT_FOOTER;
ELEMENT_NAMES[198] = ELT_HANDLER;
ELEMENT_NAMES[199] = ELT_MARKER;
- ELEMENT_NAMES[200] = ELT_MUNDEROVER;
- ELEMENT_NAMES[201] = ELT_MLABELEDTR;
- ELEMENT_NAMES[202] = ELT_NOTANUMBER;
- ELEMENT_NAMES[203] = ELT_TR;
- ELEMENT_NAMES[204] = ELT_SELECTOR;
- ELEMENT_NAMES[205] = ELT_ARCCOS;
- ELEMENT_NAMES[206] = ELT_CANVAS;
- ELEMENT_NAMES[207] = ELT_DEFS;
- ELEMENT_NAMES[208] = ELT_EXISTS;
- ELEMENT_NAMES[209] = ELT_INTEGERS;
- ELEMENT_NAMES[210] = ELT_MPRESCRIPTS;
- ELEMENT_NAMES[211] = ELT_MINUS;
- ELEMENT_NAMES[212] = ELT_NATURALNUMBERS;
- ELEMENT_NAMES[213] = ELT_PROGRESS;
- ELEMENT_NAMES[214] = ELT_REALS;
- ELEMENT_NAMES[215] = ELT_SEMANTICS;
- ELEMENT_NAMES[216] = ELT_DT;
- ELEMENT_NAMES[217] = ELT_ARCCOT;
- ELEMENT_NAMES[218] = ELT_CARTESIANPRODUCT;
+ ELEMENT_NAMES[200] = ELT_MOVER;
+ ELEMENT_NAMES[201] = ELT_MERROR;
+ ELEMENT_NAMES[202] = ELT_NOBR;
+ ELEMENT_NAMES[203] = ELT_POWER;
+ ELEMENT_NAMES[204] = ELT_SOLIDCOLOR;
+ ELEMENT_NAMES[205] = ELT_VECTOR;
+ ELEMENT_NAMES[206] = ELT_ADDRESS;
+ ELEMENT_NAMES[207] = ELT_COMPLEXES;
+ ELEMENT_NAMES[208] = ELT_DETAILS;
+ ELEMENT_NAMES[209] = ELT_IMPLIES;
+ ELEMENT_NAMES[210] = ELT_MS;
+ ELEMENT_NAMES[211] = ELT_MMULTISCRIPTS;
+ ELEMENT_NAMES[212] = ELT_NOFRAMES;
+ ELEMENT_NAMES[213] = ELT_PRIMES;
+ ELEMENT_NAMES[214] = ELT_PLUS;
+ ELEMENT_NAMES[215] = ELT_RATIONALS;
+ ELEMENT_NAMES[216] = ELT_TIMES;
+ ELEMENT_NAMES[217] = ELT_APPLET;
+ ELEMENT_NAMES[218] = ELT_BASEFONT;
ELEMENT_NAMES[219] = ELT_GT;
ELEMENT_NAMES[220] = ELT_DATALIST;
ELEMENT_NAMES[221] = ELT_EQUIVALENT;
@@ -1138,12 +1136,12 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[239] = ELT_RECT;
ELEMENT_NAMES[240] = ELT_ROOT;
ELEMENT_NAMES[241] = ELT_SCALARPRODUCT;
- ELEMENT_NAMES[242] = ELT_SCRIPT;
- ELEMENT_NAMES[243] = ELT_TEXT;
- ELEMENT_NAMES[244] = ELT_VECTORPRODUCT;
- ELEMENT_NAMES[245] = ELT_SDEV;
- ELEMENT_NAMES[246] = ELT_MROW;
- ELEMENT_NAMES[247] = ELT_SHADOW;
+ ELEMENT_NAMES[242] = ELT_SLOT;
+ ELEMENT_NAMES[243] = ELT_TFOOT;
+ ELEMENT_NAMES[244] = ELT_UPLIMIT;
+ ELEMENT_NAMES[245] = ELT_MENU;
+ ELEMENT_NAMES[246] = ELT_FEDROPSHADOW;
+ ELEMENT_NAMES[247] = ELT_MATRIXROW;
ELEMENT_NAMES[248] = ELT_APPROX;
ELEMENT_NAMES[249] = ELT_FECONVOLVEMATRIX;
ELEMENT_NAMES[250] = ELT_MATRIX;
@@ -1296,7 +1294,6 @@ nsHtml5ElementName::initializeStatics()
ELEMENT_NAMES[397] = ELT_HEADER;
ELEMENT_NAMES[398] = ELT_OR;
ELEMENT_NAMES[399] = ELT_MUNDER;
- ELEMENT_NAMES[400] = ELT_METER;
}
void
@@ -1633,7 +1630,6 @@ nsHtml5ElementName::releaseStatics()
delete ELT_ARCCOT;
delete ELT_BASEFONT;
delete ELT_CARTESIANPRODUCT;
- delete ELT_CONTENT;
delete ELT_GT;
delete ELT_DETERMINANT;
delete ELT_DATALIST;
@@ -1680,6 +1676,7 @@ nsHtml5ElementName::releaseStatics()
delete ELT_SELECT;
delete ELT_SCALARPRODUCT;
delete ELT_SUBSET;
+ delete ELT_SLOT;
delete ELT_SCRIPT;
delete ELT_TFOOT;
delete ELT_TEXT;
@@ -1690,7 +1687,6 @@ nsHtml5ElementName::releaseStatics()
delete ELT_FEDROPSHADOW;
delete ELT_MROW;
delete ELT_MATRIXROW;
- delete ELT_SHADOW;
delete ELT_VIEW;
delete ELT_APPROX;
delete ELT_FECOLORMATRIX;
diff --git a/parser/html/nsHtml5ElementName.h b/parser/html/nsHtml5ElementName.h
index 5236d1887..131b9e628 100644
--- a/parser/html/nsHtml5ElementName.h
+++ b/parser/html/nsHtml5ElementName.h
@@ -539,7 +539,6 @@ class nsHtml5ElementName
static nsHtml5ElementName* ELT_ARCCOT;
static nsHtml5ElementName* ELT_BASEFONT;
static nsHtml5ElementName* ELT_CARTESIANPRODUCT;
- static nsHtml5ElementName* ELT_CONTENT;
static nsHtml5ElementName* ELT_GT;
static nsHtml5ElementName* ELT_DETERMINANT;
static nsHtml5ElementName* ELT_DATALIST;
@@ -586,6 +585,7 @@ class nsHtml5ElementName
static nsHtml5ElementName* ELT_SELECT;
static nsHtml5ElementName* ELT_SCALARPRODUCT;
static nsHtml5ElementName* ELT_SUBSET;
+ static nsHtml5ElementName* ELT_SLOT;
static nsHtml5ElementName* ELT_SCRIPT;
static nsHtml5ElementName* ELT_TFOOT;
static nsHtml5ElementName* ELT_TEXT;
@@ -596,7 +596,6 @@ class nsHtml5ElementName
static nsHtml5ElementName* ELT_FEDROPSHADOW;
static nsHtml5ElementName* ELT_MROW;
static nsHtml5ElementName* ELT_MATRIXROW;
- static nsHtml5ElementName* ELT_SHADOW;
static nsHtml5ElementName* ELT_VIEW;
static nsHtml5ElementName* ELT_APPROX;
static nsHtml5ElementName* ELT_FECOLORMATRIX;
diff --git a/parser/html/nsHtml5MetaScanner.cpp b/parser/html/nsHtml5MetaScanner.cpp
index 07d81c1a1..9fa3d3a70 100644
--- a/parser/html/nsHtml5MetaScanner.cpp
+++ b/parser/html/nsHtml5MetaScanner.cpp
@@ -757,11 +757,11 @@ nsHtml5MetaScanner::handleAttributeValue()
return;
}
if (contentIndex == CONTENT.length && !content) {
- content = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, treeBuilder);
+ content = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, treeBuilder, false);
return;
}
if (charsetIndex == CHARSET.length && !charset) {
- charset = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, treeBuilder);
+ charset = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, treeBuilder, false);
return;
}
if (httpEquivIndex == HTTP_EQUIV.length && httpEquivState == HTTP_EQUIV_NOT_SEEN) {
diff --git a/parser/html/nsHtml5Portability.cpp b/parser/html/nsHtml5Portability.cpp
index 5a76b3c56..400f06204 100644
--- a/parser/html/nsHtml5Portability.cpp
+++ b/parser/html/nsHtml5Portability.cpp
@@ -16,12 +16,30 @@ nsHtml5Portability::newLocalNameFromBuffer(char16_t* buf, int32_t offset, int32_
return interner->GetAtom(nsDependentSubstring(buf, buf + length));
}
+static bool
+ContainsWhiteSpace(mozilla::Span<char16_t> aSpan)
+{
+ for (char16_t c : aSpan) {
+ if (nsContentUtils::IsHTMLWhitespace(c)) {
+ return true;
+ }
+ }
+ return false;
+}
+
nsHtml5String
nsHtml5Portability::newStringFromBuffer(char16_t* buf,
int32_t offset,
int32_t length,
- nsHtml5TreeBuilder* treeBuilder)
+ nsHtml5TreeBuilder* treeBuilder,
+ bool maybeAtomize)
{
+ if (!length) {
+ return nsHtml5String::EmptyString();
+ }
+ if (maybeAtomize && !ContainsWhiteSpace(mozilla::MakeSpan(buf + offset, length))) {
+ return nsHtml5String::FromAtom(NS_AtomizeMainThread(nsDependentSubstring(buf + offset, length)));
+ }
return nsHtml5String::FromBuffer(buf + offset, length, treeBuilder);
}
diff --git a/parser/html/nsHtml5Portability.h b/parser/html/nsHtml5Portability.h
index 20d9e08e8..2a9d9422b 100644
--- a/parser/html/nsHtml5Portability.h
+++ b/parser/html/nsHtml5Portability.h
@@ -61,7 +61,7 @@ class nsHtml5Portability
{
public:
static nsIAtom* newLocalNameFromBuffer(char16_t* buf, int32_t offset, int32_t length, nsHtml5AtomTable* interner);
- static nsHtml5String newStringFromBuffer(char16_t* buf, int32_t offset, int32_t length, nsHtml5TreeBuilder* treeBuilder);
+ static nsHtml5String newStringFromBuffer(char16_t* buf, int32_t offset, int32_t length, nsHtml5TreeBuilder* treeBuilder, bool maybeAtomize);
static nsHtml5String newEmptyString();
static nsHtml5String newStringFromLiteral(const char* literal);
static nsHtml5String newStringFromString(nsHtml5String string);
diff --git a/parser/html/nsHtml5String.cpp b/parser/html/nsHtml5String.cpp
index d26eeaede..e72798016 100644
--- a/parser/html/nsHtml5String.cpp
+++ b/parser/html/nsHtml5String.cpp
@@ -7,82 +7,49 @@
#include "nsUTF8Utils.h"
#include "nsHtml5TreeBuilder.h"
-nsHtml5String::nsHtml5String(already_AddRefed<nsStringBuffer> aBuffer,
- uint32_t aLength)
- : mBuffer(aBuffer.take())
- , mLength(aLength)
-{
- if (mBuffer) {
- MOZ_ASSERT(aLength);
- } else {
- MOZ_ASSERT(!aLength || aLength == UINT32_MAX);
- }
-}
-
void
nsHtml5String::ToString(nsAString& aString)
{
- if (mBuffer) {
- mBuffer->ToString(mLength, aString);
- } else {
- aString.Truncate();
- if (mLength) {
+ switch (GetKind()) {
+ case eStringBuffer:
+ return AsStringBuffer()->ToString(Length(), aString);
+ case eAtom:
+ return AsAtom()->ToString(aString);
+ case eEmpty:
+ aString.Truncate();
+ return;
+ default:
+ aString.Truncate();
aString.SetIsVoid(true);
- }
+ return;
}
}
void
-nsHtml5String::CopyToBuffer(char16_t* aBuffer)
+nsHtml5String::CopyToBuffer(char16_t* aBuffer) const
{
- if (mBuffer) {
- memcpy(aBuffer, mBuffer->Data(), mLength * sizeof(char16_t));
- }
+ memcpy(aBuffer, AsPtr(), Length() * sizeof(char16_t));
}
bool
-nsHtml5String::LowerCaseEqualsASCII(const char* aLowerCaseLiteral)
+nsHtml5String::LowerCaseEqualsASCII(const char* aLowerCaseLiteral) const
{
- if (!mBuffer) {
- if (mLength) {
- // This string is null
- return false;
- }
- // this string is empty
- return !(*aLowerCaseLiteral);
- }
return !nsCharTraits<char16_t>::compareLowerCaseToASCIINullTerminated(
- reinterpret_cast<char16_t*>(mBuffer->Data()), Length(), aLowerCaseLiteral);
+ AsPtr(), Length(), aLowerCaseLiteral);
}
bool
-nsHtml5String::EqualsASCII(const char* aLiteral)
+nsHtml5String::EqualsASCII(const char* aLiteral) const
{
- if (!mBuffer) {
- if (mLength) {
- // This string is null
- return false;
- }
- // this string is empty
- return !(*aLiteral);
- }
return !nsCharTraits<char16_t>::compareASCIINullTerminated(
- reinterpret_cast<char16_t*>(mBuffer->Data()), Length(), aLiteral);
+ AsPtr(), Length(), aLiteral);
}
bool
-nsHtml5String::LowerCaseStartsWithASCII(const char* aLowerCaseLiteral)
+nsHtml5String::LowerCaseStartsWithASCII(const char* aLowerCaseLiteral) const
{
- if (!mBuffer) {
- if (mLength) {
- // This string is null
- return false;
- }
- // this string is empty
- return !(*aLowerCaseLiteral);
- }
const char* litPtr = aLowerCaseLiteral;
- const char16_t* strPtr = reinterpret_cast<char16_t*>(mBuffer->Data());
+ const char16_t* strPtr = AsPtr();
const char16_t* end = strPtr + Length();
char16_t litChar;
while ((litChar = *litPtr) && (strPtr != end)) {
@@ -102,37 +69,47 @@ nsHtml5String::LowerCaseStartsWithASCII(const char* aLowerCaseLiteral)
}
bool
-nsHtml5String::Equals(nsHtml5String aOther)
+nsHtml5String::Equals(nsHtml5String aOther) const
{
MOZ_ASSERT(operator bool());
MOZ_ASSERT(aOther);
- if (mLength != aOther.mLength) {
+ if (Length() != aOther.Length()) {
return false;
}
- if (!mBuffer) {
- return true;
- }
- MOZ_ASSERT(aOther.mBuffer);
return !memcmp(
- mBuffer->Data(), aOther.mBuffer->Data(), Length() * sizeof(char16_t));
+ AsPtr(), aOther.AsPtr(), Length() * sizeof(char16_t));
}
nsHtml5String
nsHtml5String::Clone()
{
- MOZ_ASSERT(operator bool());
- RefPtr<nsStringBuffer> ref(mBuffer);
- return nsHtml5String(ref.forget(), mLength);
+ switch (GetKind()) {
+ case eStringBuffer:
+ AsStringBuffer()->AddRef();
+ break;
+ case eAtom:
+ AsAtom()->AddRef();
+ break;
+ default:
+ break;
+ }
+ return nsHtml5String(mBits);
}
void
nsHtml5String::Release()
{
- if (mBuffer) {
- mBuffer->Release();
- mBuffer = nullptr;
- }
- mLength = UINT32_MAX;
+ switch (GetKind()) {
+ case eStringBuffer:
+ AsStringBuffer()->Release();
+ break;
+ case eAtom:
+ AsAtom()->Release();
+ break;
+ default:
+ break;
+ }
+ mBits = eNull;
}
// static
@@ -142,7 +119,7 @@ nsHtml5String::FromBuffer(char16_t* aBuffer,
nsHtml5TreeBuilder* aTreeBuilder)
{
if (!aLength) {
- return nsHtml5String(nullptr, 0U);
+ return nsHtml5String(eEmpty);
}
// Work with nsStringBuffer directly to make sure that storage is actually
// nsStringBuffer and to make sure the allocation strategy matches
@@ -163,12 +140,12 @@ nsHtml5String::FromBuffer(char16_t* aBuffer,
char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
data[0] = 0xFFFD;
data[1] = 0;
- return nsHtml5String(buffer.forget(), 1);
+ return nsHtml5String(reinterpret_cast<uintptr_t>(buffer.forget().take()) | eStringBuffer);
}
char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
memcpy(data, aBuffer, aLength * sizeof(char16_t));
data[aLength] = 0;
- return nsHtml5String(buffer.forget(), aLength);
+ return nsHtml5String(reinterpret_cast<uintptr_t>(buffer.forget().take()) | eStringBuffer);
}
// static
@@ -177,7 +154,7 @@ nsHtml5String::FromLiteral(const char* aLiteral)
{
size_t length = std::strlen(aLiteral);
if (!length) {
- return nsHtml5String(nullptr, 0U);
+ return nsHtml5String(eEmpty);
}
// Work with nsStringBuffer directly to make sure that storage is actually
// nsStringBuffer and to make sure the allocation strategy matches
@@ -192,7 +169,7 @@ nsHtml5String::FromLiteral(const char* aLiteral)
LossyConvertEncoding8to16 converter(data);
converter.write(aLiteral, length);
data[length] = 0;
- return nsHtml5String(buffer.forget(), length);
+ return nsHtml5String(reinterpret_cast<uintptr_t>(buffer.forget().take()) | eStringBuffer);
}
// static
@@ -201,11 +178,11 @@ nsHtml5String::FromString(const nsAString& aString)
{
auto length = aString.Length();
if (!length) {
- return nsHtml5String(nullptr, 0U);
+ return nsHtml5String(eEmpty);
}
RefPtr<nsStringBuffer> buffer = nsStringBuffer::FromString(aString);
- if (buffer) {
- return nsHtml5String(buffer.forget(), length);
+ if (buffer && (length == buffer->StorageSize()/sizeof(char16_t) - 1)) {
+ return nsHtml5String(reinterpret_cast<uintptr_t>(buffer.forget().take()) | eStringBuffer);
}
buffer = nsStringBuffer::Alloc((length + 1) * sizeof(char16_t));
if (!buffer) {
@@ -214,13 +191,20 @@ nsHtml5String::FromString(const nsAString& aString)
char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
memcpy(data, aString.BeginReading(), length * sizeof(char16_t));
data[length] = 0;
- return nsHtml5String(buffer.forget(), length);
+ return nsHtml5String(reinterpret_cast<uintptr_t>(buffer.forget().take()) | eStringBuffer);
+}
+
+// static
+nsHtml5String
+nsHtml5String::FromAtom(already_AddRefed<nsIAtom> aAtom)
+{
+ return nsHtml5String(reinterpret_cast<uintptr_t>(aAtom.take()) | eAtom);
}
// static
nsHtml5String
nsHtml5String::EmptyString()
{
- return nsHtml5String(nullptr, 0U);
+ return nsHtml5String(eEmpty);
-} \ No newline at end of file
+}
diff --git a/parser/html/nsHtml5String.h b/parser/html/nsHtml5String.h
index 191bf6be8..54954fe1a 100644
--- a/parser/html/nsHtml5String.h
+++ b/parser/html/nsHtml5String.h
@@ -6,24 +6,61 @@
#define nsHtml5String_h
#include "nsString.h"
+#include "nsIAtom.h"
class nsHtml5TreeBuilder;
/**
- * A pass-by-value type that combines an unsafe `nsStringBuffer*` with its
- * logical length (`uint32_t`). (`nsStringBuffer` knows its capacity but not
- * its logical length, i.e. how much of the capacity is in use.)
+ * A pass-by-value type that can represent
+ * * nullptr
+ * * empty string
+ * * Non-empty string as exactly-sized (capacity is length) `nsStringBuffer*`
+ * * Non-empty string as an nsIAtom*
*
* Holding or passing this type is as unsafe as holding or passing
- * `nsStringBuffer*`.
- *
- * Empty strings and null strings are distinct. Since an empty nsString does
- * not have a an `nsStringBuffer`, both empty and null `nsHtml5String` have
- * `nullptr` as `mBuffer`. If `mBuffer` is `nullptr`, the empty case is marked
- * with `mLength` being zero and the null case with `mLength` being non-zero.
+ * `nsStringBuffer*`/`nsIAtom*`.
*/
class nsHtml5String final
{
+private:
+
+ static const uintptr_t kKindMask = uintptr_t(3);
+
+ static const uintptr_t kPtrMask = ~kKindMask;
+
+ enum Kind : uintptr_t {
+ eNull = 0,
+ eEmpty = 1,
+ eStringBuffer = 2,
+ eAtom = 3,
+ };
+
+ inline Kind GetKind() const { return (Kind)(mBits & kKindMask); }
+
+ inline nsStringBuffer* AsStringBuffer() const
+ {
+ MOZ_ASSERT(GetKind() == eStringBuffer);
+ return reinterpret_cast<nsStringBuffer*>(mBits & kPtrMask);
+ }
+
+ inline nsIAtom* AsAtom() const
+ {
+ MOZ_ASSERT(GetKind() == eAtom);
+ return reinterpret_cast<nsIAtom*>(mBits & kPtrMask);
+ }
+
+ inline const char16_t* AsPtr() const
+ {
+ switch (GetKind()) {
+ case eStringBuffer:
+ return reinterpret_cast<char16_t*>(AsStringBuffer()->Data());
+ case eAtom:
+ return AsAtom()->GetUTF16String();
+ default:
+ return nullptr;
+ }
+ }
+
public:
/**
* Default constructor.
@@ -37,29 +74,50 @@ public:
* Constructor from nullptr.
*/
inline MOZ_IMPLICIT nsHtml5String(decltype(nullptr))
- : mBuffer(nullptr)
- , mLength(UINT32_MAX)
+ : mBits(eNull)
{
}
- inline uint32_t Length() const { return mBuffer ? mLength : 0; }
+ inline uint32_t Length() const
+ {
+ switch (GetKind()) {
+ case eStringBuffer:
+ return (AsStringBuffer()->StorageSize()/sizeof(char16_t) - 1);
+ case eAtom:
+ return AsAtom()->GetLength();
+ default:
+ return 0;
+ }
+ }
/**
* False iff the string is logically null
*/
- inline MOZ_IMPLICIT operator bool() const { return !(!mBuffer && mLength); }
+ inline MOZ_IMPLICIT operator bool() const { return mBits; }
+
+ /**
+ * Get the underlying nsIAtom* or nullptr if this nsHtml5String
+ * does not hold an atom.
+ */
+ inline nsIAtom* MaybeAsAtom()
+ {
+ if (GetKind() == eAtom) {
+ return AsAtom();
+ }
+ return nullptr;
+ }
void ToString(nsAString& aString);
- void CopyToBuffer(char16_t* aBuffer);
+ void CopyToBuffer(char16_t* aBuffer) const;
- bool LowerCaseEqualsASCII(const char* aLowerCaseLiteral);
+ bool LowerCaseEqualsASCII(const char* aLowerCaseLiteral) const;
- bool EqualsASCII(const char* aLiteral);
+ bool EqualsASCII(const char* aLiteral) const;
- bool LowerCaseStartsWithASCII(const char* aLowerCaseLiteral);
+ bool LowerCaseStartsWithASCII(const char* aLowerCaseLiteral) const;
- bool Equals(nsHtml5String aOther);
+ bool Equals(nsHtml5String aOther) const;
nsHtml5String Clone();
@@ -73,23 +131,23 @@ public:
static nsHtml5String FromString(const nsAString& aString);
+ static nsHtml5String FromAtom(already_AddRefed<nsIAtom> aAtom);
+
static nsHtml5String EmptyString();
private:
- /**
- * Constructor from raw parts.
- */
- nsHtml5String(already_AddRefed<nsStringBuffer> aBuffer, uint32_t aLength);
/**
- * nullptr if the string is logically null or logically empty
+ * Constructor from raw bits.
*/
- nsStringBuffer* mBuffer;
+ explicit nsHtml5String(uintptr_t aBits) : mBits(aBits) {};
/**
- * The length of the string. non-zero if the string is logically null.
+ * Zero if null, one if empty, otherwise tagged pointer
+ * to either nsIAtom or nsStringBuffer. The two least-significant
+ * bits are tag bits.
*/
- uint32_t mLength;
+ uintptr_t mBits;
};
-#endif // nsHtml5String_h \ No newline at end of file
+#endif // nsHtml5String_h
diff --git a/parser/html/nsHtml5Tokenizer.cpp b/parser/html/nsHtml5Tokenizer.cpp
index 8fea32eb8..60285ce8e 100644
--- a/parser/html/nsHtml5Tokenizer.cpp
+++ b/parser/html/nsHtml5Tokenizer.cpp
@@ -225,7 +225,7 @@ nsHtml5Tokenizer::emitOrAppendCharRefBuf(int32_t returnState)
nsHtml5String
nsHtml5Tokenizer::strBufToString()
{
- nsHtml5String str = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, tokenHandler);
+ nsHtml5String str = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, tokenHandler, !newAttributesEachTime && attributeName == nsHtml5AttributeName::ATTR_CLASS);
clearStrBufAfterUse();
return str;
}
diff --git a/parser/html/nsHtml5TreeBuilder.cpp b/parser/html/nsHtml5TreeBuilder.cpp
index efbc33967..76a2398f5 100644
--- a/parser/html/nsHtml5TreeBuilder.cpp
+++ b/parser/html/nsHtml5TreeBuilder.cpp
@@ -2181,7 +2181,7 @@ nsHtml5TreeBuilder::extractCharsetFromContent(nsHtml5String attributeValue, nsHt
if (end == -1) {
end = buffer.length;
}
- charset = nsHtml5Portability::newStringFromBuffer(buffer, start, end - start, tb);
+ charset = nsHtml5Portability::newStringFromBuffer(buffer, start, end - start, tb, false);
}
return charset;
}
diff --git a/parser/html/nsHtml5TreeOperation.cpp b/parser/html/nsHtml5TreeOperation.cpp
index 22c805859..46907d3a4 100644
--- a/parser/html/nsHtml5TreeOperation.cpp
+++ b/parser/html/nsHtml5TreeOperation.cpp
@@ -361,29 +361,34 @@ nsHtml5TreeOperation::SetHTMLElementAttributes(dom::Element* aElement,
nsIAtom* aName,
nsHtml5HtmlAttributes* aAttributes)
{
- int32_t len = aAttributes->getLength();
+ int32_t len = aAttributes->getLength();
for (int32_t i = 0; i < len; i++) {
- // prefix doesn't need regetting. it is always null or a static atom
- // local name is never null
- nsCOMPtr<nsIAtom> localName =
- Reget(aAttributes->getLocalNameNoBoundsCheck(i));
- nsCOMPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
- int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
+ nsHtml5String val = aAttributes->getValueNoBoundsCheck(i);
+ nsIAtom* klass = val.MaybeAsAtom();
+ if (klass) {
+ aElement->SetSingleClassFromParser(klass);
+ } else {
+ // prefix doesn't need regetting. it is always null or a static atom
+ // local name is never null
+ RefPtr<nsIAtom> localName =
+ Reget(aAttributes->getLocalNameNoBoundsCheck(i));
+ RefPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
+ int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
- nsString value; // Not Auto, because using it to hold nsStringBuffer*
- aAttributes->getValueNoBoundsCheck(i).ToString(value);
- if (nsHtml5Atoms::a == aName && nsHtml5Atoms::name == localName) {
- // This is an HTML5-incompliant Geckoism.
- // Remove when fixing bug 582361
- NS_ConvertUTF16toUTF8 cname(value);
- NS_ConvertUTF8toUTF16 uv(nsUnescape(cname.BeginWriting()));
- aElement->SetAttr(nsuri,
+ nsString value; // Not Auto, because using it to hold nsStringBuffer*
+ val.ToString(value);
+ if (nsGkAtoms::a == aName && nsGkAtoms::name == localName) {
+ // This is an HTML5-incompliant Geckoism.
+ // Remove when fixing bug 582361
+ NS_ConvertUTF16toUTF8 cname(value);
+ NS_ConvertUTF8toUTF16 uv(nsUnescape(cname.BeginWriting()));
+ aElement->SetAttr(nsuri,
localName,
prefix,
uv,
false);
- } else {
- aElement->SetAttr(nsuri,
+ } else {
+ aElement->SetAttr(nsuri,
localName,
prefix,
value,
@@ -391,6 +396,7 @@ nsHtml5TreeOperation::SetHTMLElementAttributes(dom::Element* aElement,
}
}
}
+}
nsIContent*
nsHtml5TreeOperation::CreateHTMLElement(
@@ -580,16 +586,22 @@ nsHtml5TreeOperation::CreateSVGElement(
int32_t len = aAttributes->getLength();
for (int32_t i = 0; i < len; i++) {
- // prefix doesn't need regetting. it is always null or a static atom
- // local name is never null
- nsCOMPtr<nsIAtom> localName =
- Reget(aAttributes->getLocalNameNoBoundsCheck(i));
- nsCOMPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
- int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
+ nsHtml5String val = aAttributes->getValueNoBoundsCheck(i);
+ nsIAtom* klass = val.MaybeAsAtom();
+ if (klass) {
+ newContent->SetSingleClassFromParser(klass);
+ } else {
+ // prefix doesn't need regetting. it is always null or a static atom
+ // local name is never null
+ nsCOMPtr<nsIAtom> localName =
+ Reget(aAttributes->getLocalNameNoBoundsCheck(i));
+ nsCOMPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
+ int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
- nsString value; // Not Auto, because using it to hold nsStringBuffer*
- aAttributes->getValueNoBoundsCheck(i).ToString(value);
- newContent->SetAttr(nsuri, localName, prefix, value, false);
+ nsString value; // Not Auto, because using it to hold nsStringBuffer*
+ val.ToString(value);
+ newContent->SetAttr(nsuri, localName, prefix, value, false);
+ }
}
return newContent;
}
@@ -618,16 +630,22 @@ nsHtml5TreeOperation::CreateMathMLElement(nsIAtom* aName,
int32_t len = aAttributes->getLength();
for (int32_t i = 0; i < len; i++) {
- // prefix doesn't need regetting. it is always null or a static atom
- // local name is never null
- nsCOMPtr<nsIAtom> localName =
- Reget(aAttributes->getLocalNameNoBoundsCheck(i));
- nsCOMPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
- int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
+ nsHtml5String val = aAttributes->getValueNoBoundsCheck(i);
+ nsIAtom* klass = val.MaybeAsAtom();
+ if (klass) {
+ newContent->SetSingleClassFromParser(klass);
+ } else {
+ // prefix doesn't need regetting. it is always null or a static atom
+ // local name is never null
+ nsCOMPtr<nsIAtom> localName =
+ Reget(aAttributes->getLocalNameNoBoundsCheck(i));
+ nsCOMPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
+ int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
- nsString value; // Not Auto, because using it to hold nsStringBuffer*
- aAttributes->getValueNoBoundsCheck(i).ToString(value);
- newContent->SetAttr(nsuri, localName, prefix, value, false);
+ nsString value; // Not Auto, because using it to hold nsStringBuffer*
+ val.ToString(value);
+ newContent->SetAttr(nsuri, localName, prefix, value, false);
+ }
}
return newContent;
}
diff --git a/parser/htmlparser/moz.build b/parser/htmlparser/moz.build
index 7e5da29a5..3a91ae142 100644
--- a/parser/htmlparser/moz.build
+++ b/parser/htmlparser/moz.build
@@ -15,6 +15,7 @@ XPIDL_SOURCES += [
XPIDL_MODULE = 'htmlparser'
EXPORTS += [
+ 'nsElementTable.h',
'nsHTMLTagList.h',
'nsHTMLTags.h',
'nsIContentSink.h',
diff --git a/parser/htmlparser/nsElementTable.cpp b/parser/htmlparser/nsElementTable.cpp
index 5c69726d1..a04282bf1 100644
--- a/parser/htmlparser/nsElementTable.cpp
+++ b/parser/htmlparser/nsElementTable.cpp
@@ -1,627 +1,212 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=2 sw=2 et tw=78: */
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIAtom.h"
#include "nsElementTable.h"
-/*****************************************************************************
- Now it's time to list all the html elements all with their capabilities...
-******************************************************************************/
+struct HTMLElement
+{
+#ifdef DEBUG
+ nsHTMLTag mTagID;
+#endif
+ bool mIsBlock;
+ bool mIsContainer;
+};
+
+#ifdef DEBUG
+#define ELEM(tag, block, container) { eHTMLTag_##tag, block, container },
+#else
+#define ELEM(tag, block, container) { block, container },
+#endif
+
+#define ____ false // This makes the table easier to read.
-// The Element Table (sung to the tune of Modern Major General)
+// Note that the mIsBlock field disagrees with
+// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements for
+// the following elements: center, details, dialog, dir, dt, figcaption,
+// listing, menu, multicol, noscript, output, summary, tfoot, video.
+//
+// mrbkap thinks that the field values were pulled from the old HTML4 DTD and
+// then got modified in mostly random ways to make the old parser's behavior
+// compatible with the web. So it might make sense to change the mIsBlock
+// values for the abovementioned tags at some point.
+//
-const nsHTMLElement gHTMLElements[] = {
- {
- /*tag*/ eHTMLTag_unknown,
- /*parent,leaf*/ kNone, true
- },
- {
- /*tag*/ eHTMLTag_a,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_abbr,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_acronym,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_address,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_applet,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_area,
- /*parent,leaf*/ kNone, true
- },
- {
- /*tag*/ eHTMLTag_article,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_aside,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_audio,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_b,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_base,
- /*parent,leaf*/ kHeadContent, true
- },
- {
- /*tag*/ eHTMLTag_basefont,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_bdo,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_bgsound,
- /*parent,leaf*/ (kFlowEntity|kHeadMisc), true
- },
- {
- /*tag*/ eHTMLTag_big,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_blockquote,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_body,
- /*parent,leaf*/ kHTMLContent, false
- },
- {
- /*tag*/ eHTMLTag_br,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_button,
- /*parent,leaf*/ kFormControl, false
- },
- {
- /*tag*/ eHTMLTag_canvas,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_caption,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_center,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_cite,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_code,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_col,
- /*parent,leaf*/ kNone, true
- },
- {
- /*tag*/ eHTMLTag_colgroup,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_content,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_data,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_datalist,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_dd,
- /*parent,leaf*/ kInlineEntity, false
- },
- {
- /*tag*/ eHTMLTag_del,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_details,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_dfn,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_dialog,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_dir,
- /*parent,leaf*/ kList, false
- },
- {
- /*tag*/ eHTMLTag_div,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_dl,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_dt,
- /*parent,leaf*/ kInlineEntity, false
- },
- {
- /*tag*/ eHTMLTag_em,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_embed,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_fieldset,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_figcaption,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_figure,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_font,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_footer,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_form,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_frame,
- /*parent,leaf*/ kNone, true
- },
- {
- /*tag*/ eHTMLTag_frameset,
- /*parent,leaf*/ kHTMLContent, false
- },
- {
- /*tag*/ eHTMLTag_h1,
- /*parent,leaf*/ kHeading, false
- },
- {
- /*tag*/ eHTMLTag_h2,
- /*parent,leaf*/ kHeading, false
- },
- {
- /*tag*/ eHTMLTag_h3,
- /*parent,leaf*/ kHeading, false
- },
- {
- /*tag*/ eHTMLTag_h4,
- /*parent,leaf*/ kHeading, false
- },
- {
- /*tag*/ eHTMLTag_h5,
- /*parent,leaf*/ kHeading, false
- },
- {
- /*tag*/ eHTMLTag_h6,
- /*parent,leaf*/ kHeading, false
- },
- {
- /*tag*/ eHTMLTag_head,
- /*parent,leaf*/ kHTMLContent, false
- },
- {
- /*tag*/ eHTMLTag_header,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_hgroup,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_hr,
- /*parent,leaf*/ kBlock, true
- },
- {
- /*tag*/ eHTMLTag_html,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_i,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_iframe,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_image,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_img,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_input,
- /*parent,leaf*/ kFormControl, true
- },
- {
- /*tag*/ eHTMLTag_ins,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_kbd,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_keygen,
- /*parent,leaf*/ kFlowEntity, true
- },
- {
- /*tag*/ eHTMLTag_label,
- /*parent,leaf*/ kFormControl, false
- },
- {
- /*tag*/ eHTMLTag_legend,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_li,
- /*parent,leaf*/ kBlockEntity, false
- },
- {
- /*tag*/ eHTMLTag_link,
- /*parent,leaf*/ kAllTags - kHeadContent, true
- },
- {
- /*tag*/ eHTMLTag_listing,
- /*parent,leaf*/ kPreformatted, false
- },
- {
- /*tag*/ eHTMLTag_main,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_map,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_mark,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_marquee,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_menu,
- /*parent,leaf*/ kList, false
- },
- {
- /*tag*/ eHTMLTag_menuitem,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_meta,
- /*parent,leaf*/ kHeadContent, true
- },
- {
- /*tag*/ eHTMLTag_meter,
- /*parent,leaf*/ kFormControl, false
- },
- {
- /*tag*/ eHTMLTag_multicol,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_nav,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_nobr,
- /*parent,leaf*/ kExtensions, false
- },
- {
- /*tag*/ eHTMLTag_noembed,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_noframes,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_noscript,
- /*parent,leaf*/ kFlowEntity|kHeadMisc, false
- },
- {
- /*tag*/ eHTMLTag_object,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_ol,
- /*parent,leaf*/ kList, false
- },
- {
- /*tag*/ eHTMLTag_optgroup,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_option,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_output,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_p,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_param,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_picture,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_plaintext,
- /*parent,leaf*/ kExtensions, false
- },
- {
- /*tag*/ eHTMLTag_pre,
- /*parent,leaf*/ kBlock|kPreformatted, false
- },
- {
- /*tag*/ eHTMLTag_progress,
- /*parent,leaf*/ kFormControl, false
- },
- {
- /*tag*/ eHTMLTag_q,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_rb,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_rp,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_rt,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_rtc,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_ruby,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_s,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_samp,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_script,
- /*parent,leaf*/ (kSpecial|kHeadContent), false
- },
- {
- /*tag*/ eHTMLTag_section,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_select,
- /*parent,leaf*/ kFormControl, false
- },
- {
- /*tag*/ eHTMLTag_shadow,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_small,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_source,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_span,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_strike,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_strong,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_style,
- /*parent,leaf*/ kAllTags - kHeadContent, false
- },
- {
- /*tag*/ eHTMLTag_sub,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_summary,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_sup,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_table,
- /*parent,leaf*/ kBlock, false
- },
- {
- /*tag*/ eHTMLTag_tbody,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_td,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_textarea,
- /*parent,leaf*/ kFormControl, false
- },
- {
- /*tag*/ eHTMLTag_tfoot,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_th,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_thead,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_template,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_time,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_title,
- /*parent,leaf*/ kHeadContent, false
- },
- {
- /*tag*/ eHTMLTag_tr,
- /*parent,leaf*/ kNone, false
- },
- {
- /*tag*/ eHTMLTag_track,
- /*parent,leaf*/ kSpecial, true
- },
- {
- /*tag*/ eHTMLTag_tt,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_u,
- /*parent,leaf*/ kFontStyle, false
- },
- {
- /*tag*/ eHTMLTag_ul,
- /*parent,leaf*/ kList, false
- },
- {
- /*tag*/ eHTMLTag_var,
- /*parent,leaf*/ kPhrase, false
- },
- {
- /*tag*/ eHTMLTag_video,
- /*parent,leaf*/ kSpecial, false
- },
- {
- /*tag*/ eHTMLTag_wbr,
- /*parent,leaf*/ kExtensions, true
- },
- {
- /*tag*/ eHTMLTag_xmp,
- /*parent,leaf*/ kInlineEntity|kPreformatted, false
- },
- {
- /*tag*/ eHTMLTag_text,
- /*parent,leaf*/ kFlowEntity, true
- },
- {
- /*tag*/ eHTMLTag_whitespace,
- /*parent,leaf*/ kFlowEntity|kHeadMisc, true
- },
- {
- /*tag*/ eHTMLTag_newline,
- /*parent,leaf*/ kFlowEntity|kHeadMisc, true
- },
- {
- /*tag*/ eHTMLTag_comment,
- /*parent,leaf*/ kFlowEntity|kHeadMisc, false
- },
- {
- /*tag*/ eHTMLTag_entity,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_doctypeDecl,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_markupDecl,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_instruction,
- /*parent,leaf*/ kFlowEntity, false
- },
- {
- /*tag*/ eHTMLTag_userdefined,
- /*parent,leaf*/ (kFlowEntity|kHeadMisc), false
- },
+static const HTMLElement gHTMLElements[] = {
+ ELEM(unknown, ____, ____)
+ ELEM(a, ____, true)
+ ELEM(abbr, ____, true)
+ ELEM(acronym, ____, true)
+ ELEM(address, true, true)
+ ELEM(applet, ____, true)
+ ELEM(area, ____, ____)
+ ELEM(article, true, true)
+ ELEM(aside, true, true)
+ ELEM(audio, ____, true)
+ ELEM(b, ____, true)
+ ELEM(base, ____, ____)
+ ELEM(basefont, ____, ____)
+ ELEM(bdo, ____, true)
+ ELEM(bgsound, ____, ____)
+ ELEM(big, ____, true)
+ ELEM(blockquote, true, true)
+ ELEM(body, ____, true)
+ ELEM(br, ____, ____)
+ ELEM(button, ____, true)
+ ELEM(canvas, ____, true)
+ ELEM(caption, ____, true)
+ ELEM(center, true, true)
+ ELEM(cite, ____, true)
+ ELEM(code, ____, true)
+ ELEM(col, ____, ____)
+ ELEM(colgroup, ____, true)
+ ELEM(data, ____, true)
+ ELEM(datalist, ____, true)
+ ELEM(dd, ____, true)
+ ELEM(del, ____, true)
+ ELEM(details, true, true)
+ ELEM(dfn, ____, true)
+ ELEM(dialog, true, true)
+ ELEM(dir, true, true)
+ ELEM(div, true, true)
+ ELEM(dl, true, true)
+ ELEM(dt, ____, true)
+ ELEM(em, ____, true)
+ ELEM(embed, ____, ____)
+ ELEM(fieldset, true, true)
+ ELEM(figcaption, ____, true)
+ ELEM(figure, true, true)
+ ELEM(font, ____, true)
+ ELEM(footer, true, true)
+ ELEM(form, true, true)
+ ELEM(frame, ____, ____)
+ ELEM(frameset, ____, true)
+ ELEM(h1, true, true)
+ ELEM(h2, true, true)
+ ELEM(h3, true, true)
+ ELEM(h4, true, true)
+ ELEM(h5, true, true)
+ ELEM(h6, true, true)
+ ELEM(head, ____, true)
+ ELEM(header, true, true)
+ ELEM(hgroup, true, true)
+ ELEM(hr, true, ____)
+ ELEM(html, ____, true)
+ ELEM(i, ____, true)
+ ELEM(iframe, ____, true)
+ ELEM(image, ____, ____)
+ ELEM(img, ____, ____)
+ ELEM(input, ____, ____)
+ ELEM(ins, ____, true)
+ ELEM(kbd, ____, true)
+ ELEM(keygen, ____, ____)
+ ELEM(label, ____, true)
+ ELEM(legend, ____, true)
+ ELEM(li, true, true)
+ ELEM(link, ____, ____)
+ ELEM(listing, true, true)
+ ELEM(main, true, true)
+ ELEM(map, ____, true)
+ ELEM(mark, ____, true)
+ ELEM(marquee, ____, true)
+ ELEM(menu, true, true)
+ ELEM(menuitem, ____, true)
+ ELEM(meta, ____, ____)
+ ELEM(meter, ____, true)
+ ELEM(multicol, true, true)
+ ELEM(nav, true, true)
+ ELEM(nobr, ____, true)
+ ELEM(noembed, ____, true)
+ ELEM(noframes, ____, true)
+ ELEM(noscript, ____, true)
+ ELEM(object, ____, true)
+ ELEM(ol, true, true)
+ ELEM(optgroup, ____, true)
+ ELEM(option, ____, true)
+ ELEM(output, ____, true)
+ ELEM(p, true, true)
+ ELEM(param, ____, ____)
+ ELEM(picture, ____, true)
+ ELEM(plaintext, ____, true)
+ ELEM(pre, true, true)
+ ELEM(progress, ____, true)
+ ELEM(q, ____, true)
+ ELEM(rb, ____, true)
+ ELEM(rp, ____, true)
+ ELEM(rt, ____, true)
+ ELEM(rtc, ____, true)
+ ELEM(ruby, ____, true)
+ ELEM(s, ____, true)
+ ELEM(samp, ____, true)
+ ELEM(script, ____, true)
+ ELEM(section, true, true)
+ ELEM(select, ____, true)
+ ELEM(small, ____, true)
+ ELEM(slot, ____, true)
+ ELEM(source, ____, ____)
+ ELEM(span, ____, true)
+ ELEM(strike, ____, true)
+ ELEM(strong, ____, true)
+ ELEM(style, ____, true)
+ ELEM(sub, ____, true)
+ ELEM(summary, true, true)
+ ELEM(sup, ____, true)
+ ELEM(table, true, true)
+ ELEM(tbody, ____, true)
+ ELEM(td, ____, true)
+ ELEM(textarea, ____, true)
+ ELEM(tfoot, ____, true)
+ ELEM(th, ____, true)
+ ELEM(thead, ____, true)
+ ELEM(template, ____, true)
+ ELEM(time, ____, true)
+ ELEM(title, ____, true)
+ ELEM(tr, ____, true)
+ ELEM(track, ____, ____)
+ ELEM(tt, ____, true)
+ ELEM(u, ____, true)
+ ELEM(ul, true, true)
+ ELEM(var, ____, true)
+ ELEM(video, ____, true)
+ ELEM(wbr, ____, ____)
+ ELEM(xmp, ____, true)
+ ELEM(text, ____, ____)
+ ELEM(whitespace, ____, ____)
+ ELEM(newline, ____, ____)
+ ELEM(comment, ____, true)
+ ELEM(entity, ____, true)
+ ELEM(doctypeDecl, ____, true)
+ ELEM(markupDecl, ____, true)
+ ELEM(instruction, ____, true)
+ ELEM(userdefined, ____, true)
};
-/*********************************************************************************************/
+#undef ELEM
+#undef ____
-bool nsHTMLElement::IsContainer(eHTMLTags aChild)
+bool
+nsHTMLElement::IsContainer(nsHTMLTag aId)
{
- return !gHTMLElements[aChild].mLeaf;
+ return gHTMLElements[aId].mIsContainer;
}
-bool nsHTMLElement::IsMemberOf(int32_t aSet) const
+bool
+nsHTMLElement::IsBlock(nsHTMLTag aId)
{
- return TestBits(aSet,mParentBits);
+ return gHTMLElements[aId].mIsBlock;
}
#ifdef DEBUG
-void CheckElementTable()
+void
+CheckElementTable()
{
- for (eHTMLTags t = eHTMLTag_unknown; t <= eHTMLTag_userdefined; t = eHTMLTags(t + 1)) {
- NS_ASSERTION(gHTMLElements[t].mTagID == t, "gHTMLElements entries does match tag list.");
+ for (nsHTMLTag t = eHTMLTag_unknown;
+ t <= eHTMLTag_userdefined;
+ t = nsHTMLTag(t + 1)) {
+ MOZ_ASSERT(gHTMLElements[t].mTagID == t,
+ "gHTMLElements entries does match tag list.");
}
}
#endif
diff --git a/parser/htmlparser/nsElementTable.h b/parser/htmlparser/nsElementTable.h
index a4b78c09e..f9f63e3db 100644
--- a/parser/htmlparser/nsElementTable.h
+++ b/parser/htmlparser/nsElementTable.h
@@ -1,92 +1,22 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * MODULE NOTES:
- * @update gess 4/1/98
- *
- */
-
-
-
-#ifndef _NSELEMENTABLE
-#define _NSELEMENTABLE
+#ifndef nsElementTable_h
+#define nsElementTable_h
#include "nsHTMLTags.h"
-#include "nsIDTD.h"
-
-//*********************************************************************************************
-// The following ints define the standard groups of HTML elements...
-//*********************************************************************************************
-
-static const int kNone= 0x0;
-
-static const int kHTMLContent = 0x0001; // HEAD, (FRAMESET | BODY)
-static const int kHeadContent = 0x0002; // Elements that *must* be in the head.
-static const int kHeadMisc = 0x0004; // Elements that *can* be in the head.
-
-static const int kSpecial = 0x0008; // A, IMG, APPLET, OBJECT, FONT, BASEFONT, BR, SCRIPT,
- // MAP, Q, SUB, SUP, SPAN, BDO, IFRAME
-
-static const int kFormControl = 0x0010; // INPUT SELECT TEXTAREA LABEL BUTTON
-static const int kPreformatted = 0x0020; // PRE
-static const int kPreExclusion = 0x0040; // IMG, OBJECT, APPLET, BIG, SMALL, SUB, SUP, FONT, BASEFONT
-static const int kFontStyle = 0x0080; // TT, I, B, U, S, STRIKE, BIG, SMALL
-static const int kPhrase = 0x0100; // EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM
-static const int kHeading = 0x0200; // H1..H6
-static const int kBlockMisc = 0x0400; // OBJECT, SCRIPT
-static const int kBlock = 0x0800; // ADDRESS, BLOCKQUOTE, CENTER, DIV, DL, FIELDSET, FORM,
- // ISINDEX, HR, NOSCRIPT, NOFRAMES, P, TABLE
-static const int kList = 0x1000; // UL, OL, DIR, MENU
-static const int kPCDATA = 0x2000; // plain text and entities...
-static const int kSelf = 0x4000; // whatever THIS tag is...
-static const int kExtensions = 0x8000; // BGSOUND, WBR, NOBR
-static const int kTable = 0x10000;// TR,TD,THEAD,TBODY,TFOOT,CAPTION,TH
-static const int kDLChild = 0x20000;// DL, DT
-static const int kCDATA = 0x40000;// just plain text...
-
-static const int kInlineEntity = (kPCDATA|kFontStyle|kPhrase|kSpecial|kFormControl|kExtensions); // #PCDATA, %fontstyle, %phrase, %special, %formctrl
-static const int kBlockEntity = (kHeading|kList|kPreformatted|kBlock); // %heading, %list, %preformatted, %block
-static const int kFlowEntity = (kBlockEntity|kInlineEntity); // %blockentity, %inlineentity
-static const int kAllTags = 0xffffff;
-
-
-//*********************************************************************************************
-// The following ints define the standard groups of HTML elements...
-//*********************************************************************************************
#ifdef DEBUG
-extern void CheckElementTable();
+void CheckElementTable();
#endif
+struct nsHTMLElement
+{
+ static bool IsContainer(nsHTMLTag aTag);
+ static bool IsBlock(nsHTMLTag aTag);
+};
-/**
- * We're asking the question: is aTest a member of bitset.
- *
- * @param
- * @return TRUE or FALSE
- */
-inline bool TestBits(int aBitset,int aTest) {
- if(aTest) {
- int32_t result=(aBitset & aTest);
- return bool(result==aTest);
- }
- return false;
-}
-
-struct nsHTMLElement {
- bool IsMemberOf(int32_t aType) const;
-
- eHTMLTags mTagID;
- int mParentBits; //defines groups that can contain this element
- bool mLeaf;
-
- static bool IsContainer(eHTMLTags aTag);
-};
-
-extern const nsHTMLElement gHTMLElements[];
-
-#endif
+#endif // nsElementTable_h
diff --git a/parser/htmlparser/nsHTMLTagList.h b/parser/htmlparser/nsHTMLTagList.h
index e6f1f644c..6f2316ac7 100644
--- a/parser/htmlparser/nsHTMLTagList.h
+++ b/parser/htmlparser/nsHTMLTagList.h
@@ -71,7 +71,6 @@ HTML_HTMLELEMENT_TAG(cite)
HTML_HTMLELEMENT_TAG(code)
HTML_TAG(col, TableCol, TableCol)
HTML_TAG(colgroup, TableCol, TableCol)
-HTML_TAG(content, Content, Content)
HTML_TAG(data, Data, Data)
HTML_TAG(datalist, DataList, DataList)
HTML_HTMLELEMENT_TAG(dd)
@@ -153,8 +152,8 @@ HTML_HTMLELEMENT_TAG(samp)
HTML_TAG(script, Script, Script)
HTML_HTMLELEMENT_TAG(section)
HTML_TAG(select, Select, Select)
-HTML_TAG(shadow, Shadow, Shadow)
HTML_HTMLELEMENT_TAG(small)
+HTML_TAG(slot, Slot, Slot)
HTML_TAG(source, Source, Source)
HTML_TAG(span, Span, Span)
HTML_HTMLELEMENT_TAG(strike)
diff --git a/parser/htmlparser/nsHTMLTags.cpp b/parser/htmlparser/nsHTMLTags.cpp
index e98d2c4cd..681c37489 100644
--- a/parser/htmlparser/nsHTMLTags.cpp
+++ b/parser/htmlparser/nsHTMLTags.cpp
@@ -161,7 +161,7 @@ nsHTMLTags::ReleaseTable(void)
// static
nsHTMLTag
-nsHTMLTags::LookupTag(const nsAString& aTagName)
+nsHTMLTags::StringTagToId(const nsAString& aTagName)
{
uint32_t length = aTagName.Length();
@@ -195,7 +195,7 @@ nsHTMLTags::LookupTag(const nsAString& aTagName)
buf[i] = 0;
- return CaseSensitiveLookupTag(buf);
+ return CaseSensitiveStringTagToId(buf);
}
#ifdef DEBUG
@@ -210,33 +210,33 @@ nsHTMLTags::TestTagTable()
// Make sure we can find everything we are supposed to
for (int i = 0; i < NS_HTML_TAG_MAX; ++i) {
tag = sTagUnicodeTable[i];
- id = LookupTag(nsDependentString(tag));
+ id = StringTagToId(nsDependentString(tag));
NS_ASSERTION(id != eHTMLTag_userdefined, "can't find tag id");
const char16_t* check = GetStringValue(id);
NS_ASSERTION(0 == nsCRT::strcmp(check, tag), "can't map id back to tag");
nsAutoString uname(tag);
ToUpperCase(uname);
- NS_ASSERTION(id == LookupTag(uname), "wrong id");
+ NS_ASSERTION(id == StringTagToId(uname), "wrong id");
- NS_ASSERTION(id == CaseSensitiveLookupTag(tag), "wrong id");
+ NS_ASSERTION(id == CaseSensitiveStringTagToId(tag), "wrong id");
atom = NS_Atomize(tag);
- NS_ASSERTION(id == CaseSensitiveLookupTag(atom), "wrong id");
+ NS_ASSERTION(id == CaseSensitiveAtomTagToId(atom), "wrong id");
NS_ASSERTION(atom == GetAtom(id), "can't map id back to atom");
}
// Make sure we don't find things that aren't there
- id = LookupTag(NS_LITERAL_STRING("@"));
+ id = StringTagToId(NS_LITERAL_STRING("@"));
NS_ASSERTION(id == eHTMLTag_userdefined, "found @");
- id = LookupTag(NS_LITERAL_STRING("zzzzz"));
+ id = StringTagToId(NS_LITERAL_STRING("zzzzz"));
NS_ASSERTION(id == eHTMLTag_userdefined, "found zzzzz");
atom = NS_Atomize("@");
- id = CaseSensitiveLookupTag(atom);
+ id = CaseSensitiveAtomTagToId(atom);
NS_ASSERTION(id == eHTMLTag_userdefined, "found @");
atom = NS_Atomize("zzzzz");
- id = CaseSensitiveLookupTag(atom);
+ id = CaseSensitiveAtomTagToId(atom);
NS_ASSERTION(id == eHTMLTag_userdefined, "found zzzzz");
tag = GetStringValue((nsHTMLTag) 0);
diff --git a/parser/htmlparser/nsHTMLTags.h b/parser/htmlparser/nsHTMLTags.h
index 27a23b89f..b67e17372 100644
--- a/parser/htmlparser/nsHTMLTags.h
+++ b/parser/htmlparser/nsHTMLTags.h
@@ -46,8 +46,13 @@ public:
static void ReleaseTable(void);
// Functions for converting string or atom to id
- static nsHTMLTag LookupTag(const nsAString& aTagName);
- static nsHTMLTag CaseSensitiveLookupTag(const char16_t* aTagName)
+ static nsHTMLTag StringTagToId(const nsAString& aTagName);
+ static nsHTMLTag AtomTagToId(nsIAtom* aTagName)
+ {
+ return StringTagToId(nsDependentAtomString(aTagName));
+ }
+
+ static nsHTMLTag CaseSensitiveStringTagToId(const char16_t* aTagName)
{
NS_ASSERTION(gTagTable, "no lookup table, needs addref");
NS_ASSERTION(aTagName, "null tagname!");
@@ -56,7 +61,7 @@ public:
return tag ? (nsHTMLTag)NS_PTR_TO_INT32(tag) : eHTMLTag_userdefined;
}
- static nsHTMLTag CaseSensitiveLookupTag(nsIAtom* aTagName)
+ static nsHTMLTag CaseSensitiveAtomTagToId(nsIAtom* aTagName)
{
NS_ASSERTION(gTagAtomTable, "no lookup table, needs addref");
NS_ASSERTION(aTagName, "null tagname!");
@@ -91,6 +96,4 @@ private:
static PLHashTable* gTagAtomTable;
};
-#define eHTMLTags nsHTMLTag
-
#endif /* nsHTMLTags_h___ */
diff --git a/parser/htmlparser/nsParserService.cpp b/parser/htmlparser/nsParserService.cpp
index d89badd01..5893f19a9 100644
--- a/parser/htmlparser/nsParserService.cpp
+++ b/parser/htmlparser/nsParserService.cpp
@@ -25,19 +25,19 @@ NS_IMPL_ISUPPORTS(nsParserService, nsIParserService)
int32_t
nsParserService::HTMLAtomTagToId(nsIAtom* aAtom) const
{
- return nsHTMLTags::LookupTag(nsDependentAtomString(aAtom));
+ return nsHTMLTags::StringTagToId(nsDependentAtomString(aAtom));
}
int32_t
nsParserService::HTMLCaseSensitiveAtomTagToId(nsIAtom* aAtom) const
{
- return nsHTMLTags::CaseSensitiveLookupTag(aAtom);
+ return nsHTMLTags::CaseSensitiveAtomTagToId(aAtom);
}
int32_t
nsParserService::HTMLStringTagToId(const nsAString& aTag) const
{
- return nsHTMLTags::LookupTag(aTag);
+ return nsHTMLTags::StringTagToId(aTag);
}
const char16_t*
@@ -76,7 +76,7 @@ nsParserService::HTMLConvertUnicodeToEntity(int32_t aUnicode,
NS_IMETHODIMP
nsParserService::IsContainer(int32_t aId, bool& aIsContainer) const
{
- aIsContainer = nsHTMLElement::IsContainer((eHTMLTags)aId);
+ aIsContainer = nsHTMLElement::IsContainer((nsHTMLTag)aId);
return NS_OK;
}
@@ -84,16 +84,7 @@ nsParserService::IsContainer(int32_t aId, bool& aIsContainer) const
NS_IMETHODIMP
nsParserService::IsBlock(int32_t aId, bool& aIsBlock) const
{
- if((aId>eHTMLTag_unknown) && (aId<eHTMLTag_userdefined)) {
- aIsBlock=((gHTMLElements[aId].IsMemberOf(kBlock)) ||
- (gHTMLElements[aId].IsMemberOf(kBlockEntity)) ||
- (gHTMLElements[aId].IsMemberOf(kHeading)) ||
- (gHTMLElements[aId].IsMemberOf(kPreformatted))||
- (gHTMLElements[aId].IsMemberOf(kList)));
- }
- else {
- aIsBlock = false;
- }
+ aIsBlock = nsHTMLElement::IsBlock((nsHTMLTag)aId);
return NS_OK;
}