@@ -56,6 +56,7 @@ def __init__(self, strict = False, tree=simpletree.TreeBuilder, tokenizer=tokeni
56
56
"rootElement" : RootElementPhase (self , self .tree ),
57
57
"beforeHead" : BeforeHeadPhase (self , self .tree ),
58
58
"inHead" : InHeadPhase (self , self .tree ),
59
+ # XXX "inHeadNoscript": InHeadNoScriptPhase(self, self.tree),
59
60
"afterHead" : AfterHeadPhase (self , self .tree ),
60
61
"inBody" : InBodyPhase (self , self .tree ),
61
62
"inTable" : InTablePhase (self , self .tree ),
@@ -516,6 +517,7 @@ def __init__(self, parser, tree):
516
517
("html" , self .startTagHtml ),
517
518
("title" , self .startTagTitle ),
518
519
("style" , self .startTagStyle ),
520
+ ("noscript" , self .startTagNoScript ),
519
521
("script" , self .startTagScript ),
520
522
(("base" , "link" , "meta" ), self .startTagBaseLinkMeta ),
521
523
("head" , self .startTagHead )
@@ -525,7 +527,8 @@ def __init__(self, parser, tree):
525
527
self . endTagHandler = utils .MethodDispatcher ([
526
528
("head" , self .endTagHead ),
527
529
(("html" , "body" , "br" , "p" ), self .endTagImplyAfterHead ),
528
- (("title" , "style" , "script" ), self .endTagTitleStyleScript )
530
+ (("title" , "style" , "script" , "noscript" ),
531
+ self .endTagTitleStyleScriptNoScript )
529
532
])
530
533
self .endTagHandler .default = self .endTagOther
531
534
@@ -547,7 +550,8 @@ def processEOF(self):
547
550
self .parser .phase .processEOF ()
548
551
549
552
def processCharacters (self , data ):
550
- if self .tree .openElements [- 1 ].name in ("title" , "style" , "script" ):
553
+ if self .tree .openElements [- 1 ].name in \
554
+ ("title" , "style" , "script" , "noscript" ):
551
555
self .tree .insertText (data )
552
556
else :
553
557
self .anythingElse ()
@@ -572,6 +576,17 @@ def startTagStyle(self, name, attributes):
572
576
self .tree .openElements .append (element )
573
577
self .parser .tokenizer .contentModelFlag = contentModelFlags ["CDATA" ]
574
578
579
+ def startTagNoScript (self , name , attributes ):
580
+ # XXX Need to decide whether to implement the scripting disabled case.
581
+ element = self .tree .createElement (name , attributes )
582
+ if self .tree .headPointer is not None and \
583
+ self .parser .phase == self .parser .phases ["inHead" ]:
584
+ self .appendToHead (element )
585
+ else :
586
+ self .tree .openElements [- 1 ].appendChild (element )
587
+ self .tree .openElements .append (element )
588
+ self .parser .tokenizer .contentModelFlag = contentModelFlags ["CDATA" ]
589
+
575
590
def startTagScript (self , name , attributes ):
576
591
#XXX Inner HTML case may be wrong
577
592
element = self .tree .createElement (name , attributes )
@@ -607,7 +622,7 @@ def endTagImplyAfterHead(self, name):
607
622
self .anythingElse ()
608
623
self .parser .phase .processEndTag (name )
609
624
610
- def endTagTitleStyleScript (self , name ):
625
+ def endTagTitleStyleScriptNoScript (self , name ):
611
626
if self .tree .openElements [- 1 ].name == name :
612
627
self .tree .openElements .pop ()
613
628
else :
@@ -624,6 +639,11 @@ def anythingElse(self):
624
639
else :
625
640
self .parser .phase = self .parser .phases ["afterHead" ]
626
641
642
+ # XXX If we implement a parser for which scripting is disabled we need to
643
+ # implement this phase.
644
+ #
645
+ # class InHeadNoScriptPhase(Phase):
646
+
627
647
class AfterHeadPhase (Phase ):
628
648
def __init__ (self , parser , tree ):
629
649
Phase .__init__ (self , parser , tree )
0 commit comments