@@ -17,37 +17,45 @@ def __iter__(self):
1717 def error (self , msg ):
1818 return {"type" : "SerializeError" , "data" : msg }
1919
20- def normalizeAttrs (self , attrs ):
21- newattrs = {}
22- if attrs :
23- #TODO: treewalkers should always have attrs
24- for (namespace ,name ),value in attrs .items ():
25- assert namespace is None or isinstance (namespace , text_type ), type (namespace )
26- assert isinstance (name , text_type )
27- assert isinstance (value , text_type )
28- newattrs [(namespace ,name )] = value
29- return newattrs
30-
3120 def emptyTag (self , namespace , name , attrs , hasChildren = False ):
21+ assert namespace is None or isinstance (namespace , text_type ), type (namespace )
22+ assert isinstance (name , text_type ), type (name )
23+ assert all ((namespace is None or isinstance (namespace , text_type )) and
24+ isinstance (name , text_type ) and
25+ isinstance (value , text_type )
26+ for (namespace , name ), value in attrs .items ())
27+
3228 yield {"type" : "EmptyTag" , "name" : name ,
3329 "namespace" :namespace ,
34- "data" : self . normalizeAttrs ( attrs ) }
30+ "data" : attrs }
3531 if hasChildren :
3632 yield self .error (_ ("Void element has children" ))
3733
3834 def startTag (self , namespace , name , attrs ):
35+ assert namespace is None or isinstance (namespace , text_type ), type (namespace )
36+ assert isinstance (name , text_type ), type (name )
37+ assert all ((namespace is None or isinstance (namespace , text_type )) and
38+ isinstance (name , text_type ) and
39+ isinstance (value , text_type )
40+ for (namespace , name ), value in attrs .items ())
41+
3942 return {"type" : "StartTag" ,
4043 "name" : name ,
4144 "namespace" :namespace ,
42- "data" : self . normalizeAttrs ( attrs ) }
45+ "data" : attrs }
4346
4447 def endTag (self , namespace , name ):
48+ assert namespace is None or isinstance (namespace , text_type ), type (namespace )
49+ assert isinstance (name , text_type ), type (namespace )
50+
4551 return {"type" : "EndTag" ,
4652 "name" : name ,
4753 "namespace" :namespace ,
4854 "data" : {}}
4955
5056 def text (self , data ):
57+ assert isinstance (data , text_type ), type (data )
58+
5159 data = data
5260 middle = data .lstrip (spaceCharacters )
5361 left = data [:len (data )- len (middle )]
@@ -62,16 +70,24 @@ def text(self, data):
6270 yield {"type" : "SpaceCharacters" , "data" : right }
6371
6472 def comment (self , data ):
73+ assert isinstance (data , text_type ), type (data )
74+
6575 return {"type" : "Comment" , "data" : data }
6676
6777 def doctype (self , name , publicId = None , systemId = None , correct = True ):
78+ assert name is None or isinstance (name , text_type ), type (name )
79+ assert publicId is None or isinstance (publicId , text_type ), type (publicId )
80+ assert systemId is None or isinstance (systemId , text_type ), type (systemId )
81+
6882 return {"type" : "Doctype" ,
69- "name" : name is not None and name or "" ,
83+ "name" : name if name is not None else "" ,
7084 "publicId" : publicId ,
7185 "systemId" : systemId ,
7286 "correct" : correct }
7387
7488 def entity (self , name ):
89+ assert isinstance (name , text_type ), type (name )
90+
7591 return {"type" : "Entity" , "name" : name }
7692
7793 def unknown (self , nodeType ):
0 commit comments