Skip to content

Commit 7a83606

Browse files
Implement <select> parser “relaxation” — for “customizable” <select>
This change, in order to support the “customizable” <select> element: - “relaxes” parsing rules in <select> (to allow more elements as children) - adds the <selectedcontent> element for cloning selected <option> content ElementName.java ---------------- - Add <selectedcontent> element with TreeBuilder.SELECTEDCONTENT group TreeBuilder.java ---------------- - Add SELECTEDCONTENT group constant and IN_SELECT_IN_CONTENT mode - Track selectedContentPointer and activeOptionStackPos for cloning - Allow <div>, <span>, and other elements in <select> in “relaxed” mode - Deep clone <option> content to <selectedcontent> when <option> closes - Handle <selectedcontent> special-casing (store pointer, no stack push) SAXTreeBuilder.java ------------------- - Implement clearSelectedContentChildren() for clearing before clone - Implement deepCloneChildren() and deepCloneNode() for <option> cloning ParentNode.java --------------- - Add clearChildren() method, to support clearing <selectedcontent> html5lib-tests submodule ------------------------ - Updated to pull in corresponding tests for “relaxed” <select> parsing
1 parent 6904dd1 commit 7a83606

File tree

5 files changed

+604
-101
lines changed

5 files changed

+604
-101
lines changed

src/nu/validator/htmlparser/impl/ElementName.java

Lines changed: 75 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,8 @@ public void destructor() {
557557
// return "ANNOTATION_XML";
558558
// case TreeBuilder.FOREIGNOBJECT_OR_DESC:
559559
// return "FOREIGNOBJECT_OR_DESC";
560+
// case TreeBuilder.SELECTEDCONTENT:
561+
// return "SELECTEDCONTENT";
560562
// }
561563
// return null;
562564
// }
@@ -1424,7 +1426,11 @@ public void destructor() {
14241426
public static final ElementName SELECT = new ElementName("select", "select",
14251427
// CPPONLY: NS_NewHTMLSelectElement,
14261428
// CPPONLY: NS_NewSVGUnknownElement,
1427-
TreeBuilder.SELECT | SPECIAL);
1429+
TreeBuilder.SELECT | SPECIAL | SCOPING);
1430+
public static final ElementName SELECTEDCONTENT = new ElementName("selectedcontent", "selectedcontent",
1431+
// CPPONLY: NS_NewHTMLElement,
1432+
// CPPONLY: NS_NewSVGUnknownElement,
1433+
TreeBuilder.SELECTEDCONTENT);
14281434
public static final ElementName SLOT = new ElementName("slot", "slot",
14291435
// CPPONLY: NS_NewHTMLSlotElement,
14301436
// CPPONLY: NS_NewSVGUnknownElement,
@@ -1484,18 +1490,18 @@ public void destructor() {
14841490
private final static @NoLength ElementName[] ELEMENT_NAMES = {
14851491
FIGCAPTION,
14861492
CITE,
1487-
FRAMESET,
1493+
FEOFFSET,
14881494
H1,
14891495
CLIPPATH,
14901496
METER,
1491-
RADIALGRADIENT,
1497+
SELECT,
14921498
B,
14931499
BGSOUND,
14941500
SOURCE,
14951501
DL,
14961502
RP,
1497-
NOFRAMES,
1498-
MTEXT,
1503+
PROGRESS,
1504+
NOSCRIPT,
14991505
VIEW,
15001506
DIV,
15011507
G,
@@ -1507,10 +1513,10 @@ public void destructor() {
15071513
ANIMATETRANSFORM,
15081514
SECTION,
15091515
HR,
1510-
CANVAS,
1511-
BASEFONT,
1512-
FEDISTANTLIGHT,
1513-
OUTPUT,
1516+
DEFS,
1517+
DATALIST,
1518+
FONT,
1519+
PLAINTEXT,
15141520
TFOOT,
15151521
FEMORPHOLOGY,
15161522
COL,
@@ -1533,14 +1539,14 @@ public void destructor() {
15331539
VIDEO,
15341540
BR,
15351541
FOOTER,
1536-
TR,
1537-
DETAILS,
1538-
DT,
1539-
FOREIGNOBJECT,
1540-
FESPOTLIGHT,
1541-
INPUT,
1542-
RT,
1543-
TT,
1542+
ADDRESS,
1543+
MS,
1544+
APPLET,
1545+
FIELDSET,
1546+
FEPOINTLIGHT,
1547+
LINEARGRADIENT,
1548+
OBJECT,
1549+
RECT,
15441550
SLOT,
15451551
MENU,
15461552
FECONVOLVEMATRIX,
@@ -1585,23 +1591,23 @@ public void destructor() {
15851591
ANIMATECOLOR,
15861592
FECOMPONENTTRANSFER,
15871593
HEADER,
1588-
NOBR,
1589-
ADDRESS,
1590-
DEFS,
1591-
MS,
1592-
PROGRESS,
1593-
APPLET,
1594-
DATALIST,
1595-
FIELDSET,
1596-
FEOFFSET,
1597-
FEPOINTLIGHT,
1598-
FONT,
1599-
LINEARGRADIENT,
1600-
NOSCRIPT,
1601-
OBJECT,
1602-
PLAINTEXT,
1603-
RECT,
1604-
SELECT,
1594+
TR,
1595+
CANVAS,
1596+
DETAILS,
1597+
NOFRAMES,
1598+
DT,
1599+
BASEFONT,
1600+
FOREIGNOBJECT,
1601+
FRAMESET,
1602+
FESPOTLIGHT,
1603+
FEDISTANTLIGHT,
1604+
INPUT,
1605+
MTEXT,
1606+
RT,
1607+
OUTPUT,
1608+
TT,
1609+
RADIALGRADIENT,
1610+
SELECTEDCONTENT,
16051611
SCRIPT,
16061612
TEXT,
16071613
FEDROPSHADOW,
@@ -1689,22 +1695,23 @@ public void destructor() {
16891695
FILTER,
16901696
FEGAUSSIANBLUR,
16911697
MARKER,
1698+
NOBR,
16921699
};
16931700
private final static int[] ELEMENT_HASHES = {
16941701
1900845386,
16951702
1748359220,
1696-
2001349720,
1703+
2001349736,
16971704
876609538,
16981705
1798686984,
16991706
1971465813,
1700-
2007781534,
1707+
2008125638,
17011708
59768833,
17021709
1730965751,
17031710
1756474198,
17041711
1864368130,
17051712
1938817026,
1706-
1988763672,
1707-
2005324101,
1713+
1990037800,
1714+
2005719336,
17081715
2060065124,
17091716
52490899,
17101717
62390273,
@@ -1716,10 +1723,10 @@ public void destructor() {
17161723
1881498736,
17171724
1907661127,
17181725
1967128578,
1719-
1982935782,
1720-
1999397992,
1721-
2001392798,
1722-
2006329158,
1726+
1983533124,
1727+
2000525512,
1728+
2001495140,
1729+
2006896969,
17231730
2008851557,
17241731
2085266636,
17251732
51961587,
@@ -1742,14 +1749,14 @@ public void destructor() {
17421749
1925844629,
17431750
1963982850,
17441751
1967795958,
1745-
1973420034,
1746-
1983633431,
1747-
1998585858,
1748-
2001309869,
1749-
2001392795,
1750-
2003183333,
1751-
2005925890,
1752-
2006974466,
1752+
1982173479,
1753+
1986527234,
1754+
1998724870,
1755+
2001349704,
1756+
2001392796,
1757+
2004635806,
1758+
2006028454,
1759+
2007601444,
17531760
2008325940,
17541761
2021937364,
17551762
2068523856,
@@ -1794,23 +1801,23 @@ public void destructor() {
17941801
1965334268,
17951802
1967788867,
17961803
1968836118,
1797-
1971938532,
1798-
1982173479,
1799-
1983533124,
1800-
1986527234,
1801-
1990037800,
1802-
1998724870,
1803-
2000525512,
1804-
2001349704,
1805-
2001349736,
1806-
2001392796,
1807-
2001495140,
1808-
2004635806,
1809-
2005719336,
1810-
2006028454,
1811-
2006896969,
1812-
2007601444,
1813-
2008125638,
1804+
1973420034,
1805+
1982935782,
1806+
1983633431,
1807+
1988763672,
1808+
1998585858,
1809+
1999397992,
1810+
2001309869,
1811+
2001349720,
1812+
2001392795,
1813+
2001392798,
1814+
2003183333,
1815+
2005324101,
1816+
2005925890,
1817+
2006329158,
1818+
2006974466,
1819+
2007781534,
1820+
2008305999,
18141821
2008340774,
18151822
2008994116,
18161823
2051837468,
@@ -1898,5 +1905,6 @@ public void destructor() {
18981905
1967795910,
18991906
1968053806,
19001907
1971461414,
1908+
1971938532,
19011909
};
19021910
}

0 commit comments

Comments
 (0)