diff options
author | Moonchild <moonchild@palemoon.org> | 2020-04-17 16:02:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-17 16:02:56 +0200 |
commit | d5102d6beafc2a2a0cec3cc3ee5f7ebde31ae7bf (patch) | |
tree | 2bfef192cbb748b675ce8308c242a376798e265d /parser | |
parent | 5caf99795aa81e1fc145b8e937b1ee8197ed2486 (diff) | |
parent | f35aa3e15fedf3cd4ad163d60ab74a9537ca5c82 (diff) | |
download | UXP-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')
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; } |