@@ -50,8 +50,10 @@ def __str__(self):
5050 return '#document'
5151
5252 def printTree (self ):
53- for line in Node .printTree (self , - 1 )[2 :].split ('\n ' ):
54- print line
53+ tree = str (self )
54+ for child in self .childNodes :
55+ tree += child .printTree (2 )
56+ return tree
5557
5658class DocumentType (Node ):
5759 def __init__ (self , name ):
@@ -181,7 +183,7 @@ def elementInScope(self, target, tableVariant=False):
181183 # AT How about while True and simply set node to [-1] and set it to
182184 # [-2] at the end...
183185 for node in self .openElements [::- 1 ]:
184- if node == target :
186+ if node . name == target :
185187 return True
186188 elif node .name == "table" :
187189 return False
@@ -246,13 +248,12 @@ def insertElement(self, name, attributes, parent=None):
246248 raise NotImplementedError
247249
248250 def generateImpliedEndTags (self , exclude = None ):
249- while True :
250- name = self .openElements [- 1 ].name
251- if name in frozenset (("dd" , "dt" , "li" , "p" , "td" , "th" ,
252- "tr" )) and name != exclude :
253- self .phase .processEndTag (name )
254- else :
255- break
251+ name = self .openElements [- 1 ].name
252+ if name != exclude and name in frozenset (("dd" , "dt" , "li" , "p" ,
253+ "td" , "th" , "tr" )):
254+ self .processEndTag (name )
255+ self .generateImpliedEndTags ()
256+
256257 # XXX AT:
257258 # name = self.openElements[-1].name
258259 # while name in frozenset(("dd", "dt", "li", "p", "td", "th", "tr")) and \
@@ -517,14 +518,18 @@ def processStartTag(self, name, attributes):
517518 handlers .get (name , self .createHeadNode )(name , attributes )
518519
519520 def processEndTag (self , name ):
520- handlers = {"html" :self .createHeadNode }
521+ handlers = {"html" :self .endTagHtml }
521522 handlers .get (name , self .endTagOther )(name )
522523
523524 def startTagHead (self , name , attributes ):
524525 self .parser .insertElement (name , attributes )
525526 self .parser .headPointer = self .parser .openElements [- 1 ]
526527 self .parser .switchInsertionMode ('inHead' )
527528
529+ def endTagHtml (self , name ):
530+ self .startTagHead ("head" , [])
531+ self .parser .processEndTag (name )
532+
528533 def endTagOther (self , name ):
529534 self .parser .parseError ()
530535
@@ -580,17 +585,17 @@ def startTagHead(self, name, attributes):
580585 self .parser .switchInsertionMode ('inHead' )
581586
582587 def appendToHead (self , element ):
583- if self .headPointer is not None :
588+ if self .parser . headPointer is not None :
584589 self .parser .headPointer .appendChild (element )
585590 else :
586591 assert self .innerHTML
587592 self .parser .openElements [- 1 ].append (element )
588593
589594 def startTagTitleStyle (self , name , attributes ):
590- stateFlags = {"title" :"RCDATA" , "style" :"CDATA" }
595+ cmFlags = {"title" :"RCDATA" , "style" :"CDATA" }
591596 element = self .parser .createElement (name , attributes )
592597 self .appendToHead (element )
593- self .parser .tokenizer .state = self . parser . tokenizer . states [ stateFlags [name ]]
598+ self .parser .tokenizer .contentModelFlag = contentModelFlags [ cmFlags [name ]]
594599 # We have to start collecting characters
595600 self .collectingCharacters = True
596601 self .collectionStartTag = name
@@ -600,7 +605,7 @@ def startTagScript(self, name, attributes):
600605 element ._flags .append ("parser-inserted" )
601606 # XXX Should this be moved to after we finish collecting characters
602607 self .appendToHead (element )
603- self .parser .tokenizer .state = self . parser . tokenizer . states ["CDATA" ]
608+ self .parser .tokenizer .contentModelFlag = contentModelFlags ["CDATA" ]
604609
605610 def startTagBaseLinkMeta (self , name , attributes ):
606611 element = self .createElement (name , attributes )
@@ -746,35 +751,35 @@ def endTagP(self, name):
746751 self .parser .openElements .pop ()
747752
748753 def startTagScript (self , name , attributes ):
749- self .insertionModes ["inHead" ](self .parser ).processStartTag (name ,
754+ self .parser . phase . insertionModes ["inHead" ](self .parser ).processStartTag (name ,
750755 attributes )
751756
752757 def startTagFromHead (self , name , attributes ):
753758 self .parser .parseError ()
754- self .parser .insertionModes ["inHead" ](self .parser ).processStartTag (name ,
759+ self .parser .phase . insertionModes ["inHead" ](self .parser ).processStartTag (name ,
755760 attributes )
756761 def startTagBody (self , name , attributes ):
757762 self .parser .parseError ()
758763 if len (self .parser .openElements )== 1 or self .parser .openElements [1 ].name != "body" :
759- assert self .parser .innerHtml
764+ assert self .parser .innerHTML
760765 else :
761766 for attr , value in attributes .iteritems ():
762767 if attr not in self .parser .openElements [1 ].attributes :
763768 self .parser .openElements [1 ].attributes [attr ] = value
764769
765770 def endTagBody (self , name ):
766771 if self .parser .openElements [1 ].name != "body" :
767- assert self .innerHtml
772+ assert self .innerHTML
768773 self .parser .parseError ()
769774 else :
770775 if self .parser .openElements [- 1 ].name != "body" :
771- assert self .innerHtml
776+ assert self .innerHTML
772777 self .parser .switchInsertionMode ("afterBody" )
773778
774- def endTagHtml (self , name , attributes ):
775- self .bodyEndTag (name )
776- if not self .parser .innerHtml :
777- self .endTagHtml (name )
779+ def endTagHtml (self , name ):
780+ self .endTagBody (name )
781+ if not self .parser .innerHTML :
782+ self .parser . processEndTag (name )
778783
779784 def startTagCloseP (self , name , attributes ):
780785 if self .parser .elementInScope ("p" ):
0 commit comments