@@ -716,7 +716,7 @@ def __init__(self, parser, tree):
716
716
("title" ,self .startTagTitle ),
717
717
(("noscript" ,"noframes" ,"style" ),self .startTagNoScriptNoFramesStyle ),
718
718
("script" ,self .startTagScript ),
719
- (("base" ,"link " ,"command" ),
719
+ (("base" ,"basefont " ,"bgsound" , " command" , "link " ),
720
720
self .startTagBaseLinkCommand ),
721
721
("meta" ,self .startTagMeta ),
722
722
("head" ,self .startTagHead )
@@ -814,7 +814,8 @@ def __init__(self, parser, tree):
814
814
("html" ,self .startTagHtml ),
815
815
("body" ,self .startTagBody ),
816
816
("frameset" ,self .startTagFrameset ),
817
- (("base" ,"link" ,"meta" ,"noframes" ,"script" ,"style" ,"title" ),
817
+ (("base" ,"basefont" ,"bgsound" ,"link" ,"meta" ,"noframes" ,"script" ,
818
+ "style" ,"title" ),
818
819
self .startTagFromHead ),
819
820
("head" ,self .startTagHead )
820
821
])
@@ -884,20 +885,21 @@ def __init__(self, parser, tree):
884
885
885
886
self .startTagHandler = utils .MethodDispatcher ([
886
887
("html" ,self .startTagHtml ),
887
- (("base" ,"command" ,"link" ,"meta" ,"noframes" ,"script" ,"style" ,
888
- "title" ),self .startTagProcessInHead ),
888
+ (("base" ,"basefont" ,"bgsound" ,"command" ,"link" ,"meta" ,
889
+ "noframes" ,"script" ,"style" ,"title" ),
890
+ self .startTagProcessInHead ),
889
891
("body" ,self .startTagBody ),
890
892
("frameset" ,self .startTagFrameset ),
891
- (("address" ,"article" ,"aside" ,"blockquote" ,"center" ,"datagrid " ,
892
- "details" ,"dir" ,"div" ,"dl" ,"fieldset" ,"figure" ,
893
+ (("address" ,"article" ,"aside" ,"blockquote" ,"center" ,"details " ,
894
+ "details" ,"dir" ,"div" ,"dl" ,"fieldset" ,"figcaption" , " figure" ,
893
895
"footer" ,"header" ,"hgroup" ,"menu" ,"nav" ,"ol" ,"p" ,
894
- "section" ,"ul" ),
896
+ "section" ,"summary" , " ul" ),
895
897
self .startTagCloseP ),
898
+ (headingElements ,self .startTagHeading ),
896
899
(("pre" ,"listing" ),self .startTagPreListing ),
897
900
("form" ,self .startTagForm ),
898
901
(("li" ,"dd" ,"dt" ),self .startTagListItem ),
899
902
("plaintext" ,self .startTagPlaintext ),
900
- (headingElements ,self .startTagHeading ),
901
903
("a" ,self .startTagA ),
902
904
(("b" ,"big" ,"code" ,"em" ,"font" ,"i" ,"s" ,"small" ,"strike" ,
903
905
"strong" ,"tt" ,"u" ),self .startTagFormatting ),
@@ -906,8 +908,8 @@ def __init__(self, parser, tree):
906
908
(("applet" ,"marquee" ,"object" ),self .startTagAppletMarqueeObject ),
907
909
("xmp" ,self .startTagXmp ),
908
910
("table" ,self .startTagTable ),
909
- (("area" ,"basefont " ,"bgsound " ,"br " ,"embed " ,"img " ,"input" ,
910
- "keygen" , "spacer" , " wbr" ),self .startTagVoidFormatting ),
911
+ (("area" ,"br " ,"embed " ,"img " ,"input " ,"keygen " ,"spacer" ,
912
+ "wbr" ),self .startTagVoidFormatting ),
911
913
(("param" ,"source" ),self .startTagParamSource ),
912
914
("hr" ,self .startTagHr ),
913
915
("image" ,self .startTagImage ),
@@ -929,10 +931,10 @@ def __init__(self, parser, tree):
929
931
self .endTagHandler = utils .MethodDispatcher ([
930
932
("body" ,self .endTagBody ),
931
933
("html" ,self .endTagHtml ),
932
- (("address" ,"article" ,"aside" ,"blockquote" ,"center" ,"datagrid" ,
933
- "details" ,"dir" ,"div" ,"dl" ,"fieldset" ,"figure" ,
934
+ (("address" ,"article" ,"aside" ,"blockquote" ,"center" ,
935
+ "details" ,"dir" ,"div" ,"dl" ,"fieldset" ,"figcaption" , " figure" ,
934
936
"footer" ,"header" ,"hgroup" ,"listing" ,"menu" ,"nav" ,"ol" ,"pre" ,
935
- "section" ,"ul" ),self .endTagBlock ),
937
+ "section" ,"summary" , " ul" ),self .endTagBlock ),
936
938
("form" ,self .endTagForm ),
937
939
("p" ,self .endTagP ),
938
940
(("dd" ,"dt" ,"li" ),self .endTagListItem ),
@@ -1277,7 +1279,7 @@ def startTagOther(self, token):
1277
1279
self .tree .insertElement (token )
1278
1280
1279
1281
def endTagP (self ,token ):
1280
- if not self .tree .elementInScope ("p" ):
1282
+ if not self .tree .elementInScope ("p" , variant = "button" ):
1281
1283
self .startTagCloseP (impliedTagToken ("p" ,"StartTag" ))
1282
1284
self .parser .parseError ("unexpected-end-tag" , {"name" :"p" })
1283
1285
self .endTagP (impliedTagToken ("p" ,"EndTag" ))
@@ -2358,7 +2360,11 @@ def processCharacters(self, token):
2358
2360
Phase .processCharacters (self ,token )
2359
2361
2360
2362
def processEOF (self ):
2361
- pass
2363
+ self .parser .parseError ("eof-in-foreign-lands" )
2364
+ #while self.tree.openElements.pop().name not in ("svg", "math"):
2365
+ # pass
2366
+ self .parser .phase = self .parser .secondaryPhase
2367
+ self .parser .phase .processEOF ()
2362
2368
2363
2369
def processStartTag (self ,token ):
2364
2370
currentNode = self .tree .openElements [- 1 ]
@@ -2410,9 +2416,7 @@ def processEndTag(self, token):
2410
2416
2411
2417
while True :
2412
2418
if node .name == token ["name" ]:
2413
- popped = self .tree .openElements .pop ()
2414
- while popped != node :
2415
- popped = self .tree .openElements .pop ()
2419
+ while self .tree .openElements .pop ()!= node :
2416
2420
assert self .tree .openElements
2417
2421
break
2418
2422
nodeIndex -= 1