17
17
# Import from the sets module for python 2.3
18
18
from sets import Set as set
19
19
from sets import ImmutableSet as frozenset
20
+ import gettext
21
+ _ = gettext .gettext
20
22
21
23
import tokenizer
22
24
@@ -214,7 +216,7 @@ class InitialPhase(Phase):
214
216
# "quirks mode". It is expected that a future version of HTML5 will defin
215
217
# this.
216
218
def processEOF (self ):
217
- self .parser .parseError ("No DOCTYPE seen." )
219
+ self .parser .parseError (_ ( "No DOCTYPE seen." ) )
218
220
self .parser .phase = self .parser .phases ["rootElement" ]
219
221
self .parser .phase .processEOF ()
220
222
@@ -223,25 +225,25 @@ def processComment(self, data):
223
225
224
226
def processDoctype (self , name , error ):
225
227
if error :
226
- self .parser .parseError ("DOCTYPE is in error." )
228
+ self .parser .parseError (_ ( "DOCTYPE is in error." ) )
227
229
self .tree .insertDoctype (name )
228
230
self .parser .phase = self .parser .phases ["rootElement" ]
229
231
230
232
def processSpaceCharacters (self , data ):
231
233
self .tree .insertText (data , self .tree .document )
232
234
233
235
def processCharacters (self , data ):
234
- self .parser .parseError ("No DOCTYPE seen." )
236
+ self .parser .parseError (_ ( "No DOCTYPE seen." ) )
235
237
self .parser .phase = self .parser .phases ["rootElement" ]
236
238
self .parser .phase .processCharacters (data )
237
239
238
240
def processStartTag (self , name , attributes ):
239
- self .parser .parseError ("No DOCTYPE seen." )
241
+ self .parser .parseError (_ ( "No DOCTYPE seen." ) )
240
242
self .parser .phase = self .parser .phases ["rootElement" ]
241
243
self .parser .phase .processStartTag (name , attributes )
242
244
243
245
def processEndTag (self , name ):
244
- self .parser .parseError ("No DOCTYPE seen." )
246
+ self .parser .parseError (_ ( "No DOCTYPE seen." ) )
245
247
self .parser .phase = self .parser .phases ["rootElement" ]
246
248
self .parser .phase .processEndTag (name )
247
249
@@ -315,8 +317,8 @@ def endTagHtml(self, name):
315
317
self .parser .phase .processEndTag (name )
316
318
317
319
def endTagOther (self , name ):
318
- self .parser .parseError ("Unexpected end tag (" + name + \
319
- ") after the root element." )
320
+ self .parser .parseError (_ ( "Unexpected end tag (" + name + \
321
+ ") after the root element." ))
320
322
321
323
class InHeadPhase (Phase ):
322
324
def __init__ (self , parser , tree ):
@@ -409,10 +411,11 @@ def endTagTitleStyleScript(self, name):
409
411
if self .tree .openElements [- 1 ].name == name :
410
412
self .tree .openElements .pop ()
411
413
else :
412
- self .parser .parseError ()
414
+ self .parser .parseError (_ ("Unexpected end tag " + name + \
415
+ ". Ignored." ))
413
416
414
417
def endTagOther (self , name ):
415
- self .parser .parseError ()
418
+ self .parser .parseError (_ ( "Unexpected end tag " + name + ". Ignored." ) )
416
419
417
420
def anythingElse (self ):
418
421
if self .tree .openElements [- 1 ].name == "head" :
@@ -551,11 +554,12 @@ def startTagScript(self, name, attributes):
551
554
self .parser .phases ["inHead" ].processStartTag (name , attributes )
552
555
553
556
def startTagFromHead (self , name , attributes ):
554
- self .parser .parseError ()
557
+ self .parser .parseError (_ ("Unexpected start tag " + name + \
558
+ " that belongs in the head. Moved." ))
555
559
self .parser .phases ["inHead" ].processStartTag (name , attributes )
556
560
557
561
def startTagBody (self , name , attributes ):
558
- self .parser .parseError ()
562
+ self .parser .parseError (_ ( "Unexpected start tag body" ) )
559
563
if len (self .tree .openElements ) == 1 \
560
564
or self .tree .openElements [1 ].name != "body" :
561
565
assert self .parser .innerHTML
@@ -634,7 +638,8 @@ def startTagFormatting(self, name, attributes):
634
638
635
639
def startTagButton (self , name , attributes ):
636
640
if self .tree .elementInScope ("button" ):
637
- self .parser .parseError ()
641
+ self .parser .parseError (_ ("Unexpected start tag button. Implying"
642
+ "button end tag." ))
638
643
self .processEndTag ("button" )
639
644
self .parser .phase .processStartTag (name , attributes )
640
645
else :
@@ -671,7 +676,8 @@ def startTagHr(self, name, attributes):
671
676
672
677
def startTagImage (self , name , attributes ):
673
678
# No really...
674
- self .parser .parseError ()
679
+ self .parser .parseError (_ ("Unexpected start tag image. Use img "
680
+ "instead" ))
675
681
self .processStartTag ("img" , attributes )
676
682
677
683
def startTagInput (self , name , attributes ):
@@ -683,7 +689,7 @@ def startTagInput(self, name, attributes):
683
689
self .tree .openElements .pop ()
684
690
685
691
def startTagIsIndex (self , name , attributes ):
686
- self .parser .parseError ()
692
+ self .parser .parseError ("Unexpected start tag isindex. Don't use it!" )
687
693
if self .tree .formPointer :
688
694
return
689
695
self .processStartTag ("form" , {})
@@ -743,6 +749,9 @@ def endTagP(self, name):
743
749
self .tree .openElements .pop ()
744
750
745
751
def endTagBody (self , name ):
752
+ # XXX Need to take open <p> tags into account here. We shouldn't imply
753
+ # </p> but we should not throw a parse error either. Specification is
754
+ # likely to be updated.
746
755
if self .tree .openElements [1 ].name != "body" :
747
756
# innerHTML case
748
757
self .parser .parseError ()
@@ -941,7 +950,8 @@ def endTagCdataTextAreaXmp(self, name):
941
950
if self .tree .openElements [- 1 ].name == name :
942
951
self .tree .openElements .pop ()
943
952
else :
944
- self .parser .parseError ()
953
+ self .parser .parseError (_ ("Unexpected end tag " + name + \
954
+ ". Ignored." ))
945
955
946
956
def endTagNew (self , name ):
947
957
"""New HTML5 elements, "event-source", "section", "nav",
@@ -956,7 +966,8 @@ def endTagOther(self, name):
956
966
if node .name == name :
957
967
self .tree .generateImpliedEndTags ()
958
968
if self .tree .openElements [- 1 ].name != name :
959
- self .parser .parseError ()
969
+ self .parser .parseError (_ ("Unexpected end tag " + name + \
970
+ "." ))
960
971
while self .tree .openElements .pop () != node :
961
972
pass
962
973
break
@@ -1553,8 +1564,8 @@ def __init__(self, parser, tree):
1553
1564
self .endTagHandler .default = self .endTagOther
1554
1565
1555
1566
def processCharacters (self , data ):
1556
- self .parser .parseError ("Unepxected characters in the frameset phase. "
1557
- "Characters ignored." )
1567
+ self .parser .parseError (_ ( "Unepxected characters in the frameset phase. "
1568
+ "Characters ignored." ))
1558
1569
1559
1570
def startTagFrameset (self , name , attributes ):
1560
1571
self .tree .insertElement (name , attributes )
@@ -1567,14 +1578,14 @@ def startTagNoframes(self, name, attributes):
1567
1578
self .parser .phases ["inBody" ].processStartTag (name , attributes )
1568
1579
1569
1580
def startTagOther (self , name , attributes ):
1570
- self .parser .parseError ("Unexpected start tag token (" + name + \
1571
- ") in the frameset phase." )
1581
+ self .parser .parseError (_ ( "Unexpected start tag token (" + name + \
1582
+ ") in the frameset phase." ))
1572
1583
1573
1584
def endTagFrameset (self , name ):
1574
1585
if self .tree .openElements [- 1 ].name == "html" :
1575
1586
# innerHTML case
1576
- self .parser .parseError ("Unexpected end tag token (frameset) in the"
1577
- "frameset phase (innerHTML)" )
1587
+ self .parser .parseError (_ ( "Unexpected end tag token (frameset) in the"
1588
+ "frameset phase (innerHTML)" ))
1578
1589
else :
1579
1590
self .tree .openElements .pop ()
1580
1591
if not self .parser .innerHTML and \
@@ -1587,8 +1598,8 @@ def endTagNoframes(self, name):
1587
1598
self .parser .phases ["inBody" ].processEndTag (name )
1588
1599
1589
1600
def endTagOther (self , name ):
1590
- self .parser .parseError ("Unexpected end tag token (" + name +
1591
- ") in the frameset phase." )
1601
+ self .parser .parseError (_ ( "Unexpected end tag token (" + name +
1602
+ ") in the frameset phase." ))
1592
1603
1593
1604
1594
1605
class AfterFramesetPhase (Phase ):
0 commit comments