@@ -716,7 +716,7 @@ def __init__(self, parser, tree):
716716 ("title" ,self .startTagTitle ),
717717 (("noscript" ,"noframes" ,"style" ),self .startTagNoScriptNoFramesStyle ),
718718 ("script" ,self .startTagScript ),
719- (("base" ,"link " ,"command" ),
719+ (("base" ,"basefont " ,"bgsound" , " command" , "link " ),
720720self .startTagBaseLinkCommand ),
721721 ("meta" ,self .startTagMeta ),
722722 ("head" ,self .startTagHead )
@@ -814,7 +814,8 @@ def __init__(self, parser, tree):
814814 ("html" ,self .startTagHtml ),
815815 ("body" ,self .startTagBody ),
816816 ("frameset" ,self .startTagFrameset ),
817- (("base" ,"link" ,"meta" ,"noframes" ,"script" ,"style" ,"title" ),
817+ (("base" ,"basefont" ,"bgsound" ,"link" ,"meta" ,"noframes" ,"script" ,
818+ "style" ,"title" ),
818819self .startTagFromHead ),
819820 ("head" ,self .startTagHead )
820821 ])
@@ -884,20 +885,21 @@ def __init__(self, parser, tree):
884885
885886self .startTagHandler = utils .MethodDispatcher ([
886887 ("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 ),
889891 ("body" ,self .startTagBody ),
890892 ("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" ,
893895"footer" ,"header" ,"hgroup" ,"menu" ,"nav" ,"ol" ,"p" ,
894- "section" ,"ul" ),
896+ "section" ,"summary" , " ul" ),
895897self .startTagCloseP ),
898+ (headingElements ,self .startTagHeading ),
896899 (("pre" ,"listing" ),self .startTagPreListing ),
897900 ("form" ,self .startTagForm ),
898901 (("li" ,"dd" ,"dt" ),self .startTagListItem ),
899902 ("plaintext" ,self .startTagPlaintext ),
900- (headingElements ,self .startTagHeading ),
901903 ("a" ,self .startTagA ),
902904 (("b" ,"big" ,"code" ,"em" ,"font" ,"i" ,"s" ,"small" ,"strike" ,
903905"strong" ,"tt" ,"u" ),self .startTagFormatting ),
@@ -906,8 +908,8 @@ def __init__(self, parser, tree):
906908 (("applet" ,"marquee" ,"object" ),self .startTagAppletMarqueeObject ),
907909 ("xmp" ,self .startTagXmp ),
908910 ("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 ),
911913 (("param" ,"source" ),self .startTagParamSource ),
912914 ("hr" ,self .startTagHr ),
913915 ("image" ,self .startTagImage ),
@@ -929,10 +931,10 @@ def __init__(self, parser, tree):
929931self .endTagHandler = utils .MethodDispatcher ([
930932 ("body" ,self .endTagBody ),
931933 ("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" ,
934936"footer" ,"header" ,"hgroup" ,"listing" ,"menu" ,"nav" ,"ol" ,"pre" ,
935- "section" ,"ul" ),self .endTagBlock ),
937+ "section" ,"summary" , " ul" ),self .endTagBlock ),
936938 ("form" ,self .endTagForm ),
937939 ("p" ,self .endTagP ),
938940 (("dd" ,"dt" ,"li" ),self .endTagListItem ),
@@ -1277,7 +1279,7 @@ def startTagOther(self, token):
12771279self .tree .insertElement (token )
12781280
12791281def endTagP (self ,token ):
1280- if not self .tree .elementInScope ("p" ):
1282+ if not self .tree .elementInScope ("p" , variant = "button" ):
12811283self .startTagCloseP (impliedTagToken ("p" ,"StartTag" ))
12821284self .parser .parseError ("unexpected-end-tag" , {"name" :"p" })
12831285self .endTagP (impliedTagToken ("p" ,"EndTag" ))
@@ -2358,7 +2360,11 @@ def processCharacters(self, token):
23582360Phase .processCharacters (self ,token )
23592361
23602362def 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 ()
23622368
23632369def processStartTag (self ,token ):
23642370currentNode = self .tree .openElements [- 1 ]
@@ -2410,9 +2416,7 @@ def processEndTag(self, token):
24102416
24112417while True :
24122418if 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 :
24162420assert self .tree .openElements
24172421break
24182422nodeIndex -= 1