@@ -257,6 +257,7 @@ def __init__(self, parser, tree):
257
257
self .tree = tree
258
258
259
259
def processEOF (self ):
260
+ raise NotImplementedError
260
261
self .tree .generateImpliedEndTags ()
261
262
if len (self .tree .openElements ) > 2 :
262
263
self .parser .parseError ("expected-closing-tag-but-got-eof" )
@@ -547,11 +548,11 @@ def appendToHead(self, element):
547
548
self .tree .openElements [- 1 ].appendChild (element )
548
549
549
550
# the real thing
550
- def processEOF (self ):
551
+ def processEOF (self ):
551
552
if self .tree .openElements [- 1 ].name in ("title" , "style" , "script" , "noscript" ):
552
553
self .parser .parseError ("expected-named-closing-tag-but-got-eof" ,
553
554
{"name" : self .tree .openElements [- 1 ].name })
554
- self .tree .openElements .pop ()
555
+ self .tree .openElements .pop ()
555
556
self .anythingElse ()
556
557
self .parser .phase .processEOF ()
557
558
@@ -776,6 +777,15 @@ def addFormattingElement(self, name, attributes):
776
777
self .tree .openElements [- 1 ])
777
778
778
779
# the real deal
780
+ def processEOF (self ):
781
+ allowed_elements = set (("dd" , "dt" , "li" , "p" , "tbody" , "td" , "tfoot" ,
782
+ "th" , "thead" , "tr" , "body" , "html" ))
783
+ for node in self .tree .openElements [::- 1 ]:
784
+ if node .name not in allowed_elements :
785
+ self .parser .parseError ("expected-closing-tag-but-got-eof" )
786
+ break
787
+ #Stop parsing
788
+
779
789
def processSpaceCharactersDropNewline (self , data ):
780
790
# Sometimes (start of <pre>, <listing>, and <textarea> blocks) we
781
791
# want to drop leading newlines
@@ -1311,8 +1321,8 @@ def __init__(self, parser, tree):
1311
1321
def clearStackToTableContext (self ):
1312
1322
# "clear the stack back to a table context"
1313
1323
while self .tree .openElements [- 1 ].name not in ("table" , "html" ):
1314
- self .parser .parseError ("unexpected-implied-end-tag-in-table" ,
1315
- {"name" : self .tree .openElements [- 1 ].name })
1324
+ # self.parser.parseError("unexpected-implied-end-tag-in-table",
1325
+ # {"name": self.tree.openElements[-1].name})
1316
1326
self .tree .openElements .pop ()
1317
1327
# When the current node is <html> it's an innerHTML case
1318
1328
@@ -1323,6 +1333,13 @@ def getCurrentTable(self):
1323
1333
return self .tree .openElements [i ]
1324
1334
1325
1335
# processing methods
1336
+ def processEOF (self ):
1337
+ if self .tree .openElements [- 1 ].name != "html" :
1338
+ self .parser .parseError ("eof-in-table" )
1339
+ else :
1340
+ assert self .parser .innerHTML
1341
+ #Stop parsing
1342
+
1326
1343
def processSpaceCharacters (self , data ):
1327
1344
if "tainted" not in self .getCurrentTable ()._flags :
1328
1345
self .tree .insertText (data )
@@ -1454,6 +1471,9 @@ def __init__(self, parser, tree):
1454
1471
def ignoreEndTagCaption (self ):
1455
1472
return not self .tree .elementInScope ("caption" , True )
1456
1473
1474
+ def processEOF (self ):
1475
+ self .parser .phases ["inBody" ].processEOF ()
1476
+
1457
1477
def processCharacters (self , data ):
1458
1478
self .parser .phases ["inBody" ].processCharacters (data )
1459
1479
@@ -1521,6 +1541,16 @@ def __init__(self, parser, tree):
1521
1541
def ignoreEndTagColgroup (self ):
1522
1542
return self .tree .openElements [- 1 ].name == "html"
1523
1543
1544
+ def processEOF (self ):
1545
+ if self .tree .openElements [- 1 ].name == "html" :
1546
+ assert self .parser .innerHTML
1547
+ return
1548
+ else :
1549
+ ignoreEndTag = self .ignoreEndTagColgroup ()
1550
+ self .endTagColgroup ("colgroup" )
1551
+ if not ignoreEndTag :
1552
+ self .parser .phase .processEOF ()
1553
+
1524
1554
def processCharacters (self , data ):
1525
1555
ignoreEndTag = self .ignoreEndTagColgroup ()
1526
1556
self .endTagColgroup ("colgroup" )
@@ -1564,7 +1594,8 @@ def __init__(self, parser, tree):
1564
1594
("html" , self .startTagHtml ),
1565
1595
("tr" , self .startTagTr ),
1566
1596
(("td" , "th" ), self .startTagTableCell ),
1567
- (("caption" , "col" , "colgroup" , "tbody" , "tfoot" , "thead" ), self .startTagTableOther )
1597
+ (("caption" , "col" , "colgroup" , "tbody" , "tfoot" , "thead" ),
1598
+ self .startTagTableOther )
1568
1599
])
1569
1600
self .startTagHandler .default = self .startTagOther
1570
1601
@@ -1580,13 +1611,18 @@ def __init__(self, parser, tree):
1580
1611
def clearStackToTableBodyContext (self ):
1581
1612
while self .tree .openElements [- 1 ].name not in ("tbody" , "tfoot" ,
1582
1613
"thead" , "html" ):
1583
- self .parser .parseError ("unexpected-implied-end-tag-in-table" ,
1584
- {"name" : self .tree .openElements [- 1 ].name })
1614
+ # self.parser.parseError("unexpected-implied-end-tag-in-table",
1615
+ # {"name": self.tree.openElements[-1].name})
1585
1616
self .tree .openElements .pop ()
1617
+ if self .tree .openElements [- 1 ].name == "html" :
1618
+ assert self .parser .innerHTML
1586
1619
1587
1620
# the rest
1621
+ def processEOF (self ):
1622
+ self .parser .phases ["inTable" ].processEOF ()
1623
+
1588
1624
def processSpaceCharacters (self ,data ):
1589
- self .parser .phases ["inTable" ].processSpaceCharacters (data )
1625
+ self .parser .phases ["inTable" ].processSpaceCharacters (data )
1590
1626
1591
1627
def processCharacters (self ,data ):
1592
1628
self .parser .phases ["inTable" ].processCharacters (data )
@@ -1676,6 +1712,9 @@ def ignoreEndTagTr(self):
1676
1712
return not self .tree .elementInScope ("tr" , tableVariant = True )
1677
1713
1678
1714
# the rest
1715
+ def processEOF (self ):
1716
+ self .parser .phases ["inTable" ].processEOF ()
1717
+
1679
1718
def processSpaceCharacters (self , data ):
1680
1719
self .parser .phases ["inTable" ].processSpaceCharacters (data )
1681
1720
@@ -1757,6 +1796,9 @@ def closeCell(self):
1757
1796
self .endTagTableCell ("th" )
1758
1797
1759
1798
# the rest
1799
+ def processEOF (self ):
1800
+ self .parser .phases ["inBody" ].processEOF ()
1801
+
1760
1802
def processCharacters (self , data ):
1761
1803
self .parser .phases ["inBody" ].processCharacters (data )
1762
1804
@@ -1834,6 +1876,12 @@ def __init__(self, parser, tree):
1834
1876
self .endTagHandler .default = self .endTagOther
1835
1877
1836
1878
# http://www.whatwg.org/specs/web-apps/current-work/#in-select
1879
+ def processEOF (self ):
1880
+ if self .tree .openElements [- 1 ].name != "html" :
1881
+ self .parser .parseError ("eof-in-select" )
1882
+ else :
1883
+ assert self .parser .innerHtml
1884
+
1837
1885
def processCharacters (self , data ):
1838
1886
self .tree .insertText (data )
1839
1887
@@ -1919,6 +1967,9 @@ def __init__(self, parser, tree):
1919
1967
])
1920
1968
self .endTagHandler .default = self .endTagOther
1921
1969
1970
+ def processEOF (self ):
1971
+ self .parser .phases ["inSelect" ].processEOF ()
1972
+
1922
1973
def processCharacters (self , data ):
1923
1974
self .parser .phases ["inSelect" ].processCharacters (data )
1924
1975
@@ -1948,6 +1999,10 @@ def __init__(self, parser, tree):
1948
1999
self .endTagHandler = utils .MethodDispatcher ([("html" , self .endTagHtml )])
1949
2000
self .endTagHandler .default = self .endTagOther
1950
2001
2002
+ def processEOF (self ):
2003
+ #Stop parsing
2004
+ pass
2005
+
1951
2006
def processComment (self , data ):
1952
2007
# This is needed because data is to be appended to the <html> element
1953
2008
# here and not to whatever is currently open.
@@ -1966,7 +2021,7 @@ def processStartTag(self, name, attributes):
1966
2021
1967
2022
def endTagHtml (self ,name ):
1968
2023
if self .parser .innerHTML :
1969
- self .parser .parseError ()
2024
+ self .parser .parseError ("unexpected-end-tag-after-body-innerhtml" )
1970
2025
else :
1971
2026
# XXX: This may need to be done, not sure:
1972
2027
# Don't set lastPhase to the current phase but to the inBody phase
@@ -2001,6 +2056,12 @@ def __init__(self, parser, tree):
2001
2056
])
2002
2057
self .endTagHandler .default = self .endTagOther
2003
2058
2059
+ def processEOF (self ):
2060
+ if self .tree .openElements [- 1 ].name != "html" :
2061
+ self .parser .parseError ("eof-in-frameset" )
2062
+ else :
2063
+ assert self .parser .innerHTML
2064
+
2004
2065
def processCharacters (self , data ):
2005
2066
self .parser .parseError ("unexpected-char-in-frameset" )
2006
2067
@@ -2054,6 +2115,10 @@ def __init__(self, parser, tree):
2054
2115
])
2055
2116
self .endTagHandler .default = self .endTagOther
2056
2117
2118
+ def processEOF (self ):
2119
+ #Stop parsing
2120
+ pass
2121
+
2057
2122
def processCharacters (self , data ):
2058
2123
self .parser .parseError ("unexpected-char-after-frameset" )
2059
2124
0 commit comments