@@ -53,8 +53,8 @@ def __init__(self, strict = False, tree=simpletree.TreeBuilder,
5353self .tokenizer_class = tokenizer
5454self .errors = []
5555
56- # "quirks" / "almost-standards " / "standards "
57- self .quirksMode = "standards "
56+ # "quirks" / "limited-quirks " / "no-quirks "
57+ self .compatMode = "no-quirks "
5858
5959self .phases = {
6060"initial" :InitialPhase (self ,self .tree ),
@@ -304,6 +304,7 @@ class InitialPhase(Phase):
304304# this.
305305def processEOF (self ):
306306self .parser .parseError ("expected-doctype-but-got-eof" )
307+ self .compatMode = "quirks"
307308self .parser .phase = self .parser .phases ["beforeHtml" ]
308309self .parser .phase .processEOF ()
309310
@@ -323,11 +324,8 @@ def processDoctype(self, name, publicId, systemId, correct):
323324if publicId != "" :
324325publicId = publicId .translate (asciiUpper2Lower )
325326
326- if nameLower != "html" :
327- # XXX quirks mode
328- pass
329- else :
330- if publicId in \
327+ if not correct or nameLower != "html" \
328+ or publicId in \
331329 ("+//silmaril//dtd html pro v0r11 19970101//en" ,
332330"-//advasoft ltd//dtd html 3.0 aswedit + extensions//en" ,
333331"-//as//dtd html 3.0 aswedit + extensions//en" ,
@@ -397,13 +395,19 @@ def processDoctype(self, name, publicId, systemId, correct):
397395"-//webtechs//dtd mozilla html//en" ,
398396"-/w3c/dtd html 4.0 transitional/en" ,
399397"html" )\
400- or (publicId in \
398+ or (publicId in \
401399 ("-//w3c//dtd html 4.01 frameset//EN" ,
402400"-//w3c//dtd html 4.01 transitional//EN" )and systemId == None )\
403- or (systemId != None and \
401+ or (systemId != None and \
404402systemId == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" ):
405- #XXX quirks mode
406- pass
403+ self .compatMode = "quirks"
404+ elif publicId in \
405+ ("-//w3c//dtd xhtml 1.0 frameset//EN" ,
406+ "-//w3c//dtd xhtml 1.0 transitional//EN" )\
407+ or (publicId in \
408+ ("-//w3c//dtd html 4.01 frameset//EN" ,
409+ "-//w3c//dtd html 4.01 transitional//EN" )and systemId == None ):
410+ self .compatMode = "limited-quirks"
407411
408412self .parser .phase = self .parser .phases ["beforeHtml" ]
409413
@@ -412,18 +416,21 @@ def processSpaceCharacters(self, data):
412416
413417def processCharacters (self ,data ):
414418self .parser .parseError ("expected-doctype-but-got-chars" )
419+ self .compatMode = "quirks"
415420self .parser .phase = self .parser .phases ["beforeHtml" ]
416421self .parser .phase .processCharacters (data )
417422
418423def processStartTag (self ,name ,attributes ):
419424self .parser .parseError ("expected-doctype-but-got-start-tag" ,
420425 {"name" :name })
426+ self .compatMode = "quirks"
421427self .parser .phase = self .parser .phases ["beforeHtml" ]
422428self .parser .phase .processStartTag (name ,attributes )
423429
424430def processEndTag (self ,name ):
425431self .parser .parseError ("expected-doctype-but-got-end-tag" ,
426432 {"name" :name })
433+ self .compatMode = "quirks"
427434self .parser .phase = self .parser .phases ["beforeHtml" ]
428435self .parser .phase .processEndTag (name )
429436