1
1
from __future__ import absolute_import , division , unicode_literals
2
- from six import text_type , string_types
3
2
4
3
from xml .dom import Node
5
4
from ..constants import namespaces , voidElements , spaceCharacters
18
17
spaceCharacters = "" .join (spaceCharacters )
19
18
20
19
21
- def to_text (s , blank_if_none = True ):
22
- """Wrapper around six.text_type to convert None to empty string"""
23
- if s is None :
24
- if blank_if_none :
25
- return ""
26
- else :
27
- return None
28
- elif isinstance (s , text_type ):
29
- return s
30
- else :
31
- return text_type (s )
32
-
33
-
34
20
class TreeWalker (object ):
35
21
def __init__ (self , tree ):
36
22
self .tree = tree
@@ -42,28 +28,26 @@ def error(self, msg):
42
28
return {"type" : "SerializeError" , "data" : msg }
43
29
44
30
def emptyTag (self , namespace , name , attrs , hasChildren = False ):
45
- yield {"type" : "EmptyTag" , "name" : to_text ( name , False ) ,
46
- "namespace" : to_text ( namespace ) ,
31
+ yield {"type" : "EmptyTag" , "name" : name ,
32
+ "namespace" : namespace ,
47
33
"data" : attrs }
48
34
if hasChildren :
49
35
yield self .error ("Void element has children" )
50
36
51
37
def startTag (self , namespace , name , attrs ):
52
38
return {"type" : "StartTag" ,
53
- "name" : text_type (name ),
54
- "namespace" : to_text (namespace ),
55
- "data" : dict (((to_text (namespace , False ), to_text (name )),
56
- to_text (value , False ))
57
- for (namespace , name ), value in attrs .items ())}
39
+ "name" : name ,
40
+ "namespace" : namespace ,
41
+ "data" : attrs }
58
42
59
43
def endTag (self , namespace , name ):
60
44
return {"type" : "EndTag" ,
61
- "name" : to_text ( name , False ) ,
62
- "namespace" : to_text ( namespace ) ,
45
+ "name" : name ,
46
+ "namespace" : namespace ,
63
47
"data" : {}}
64
48
65
49
def text (self , data ):
66
- data = to_text ( data )
50
+ data = data
67
51
middle = data .lstrip (spaceCharacters )
68
52
left = data [:len (data ) - len (middle )]
69
53
if left :
@@ -77,17 +61,17 @@ def text(self, data):
77
61
yield {"type" : "SpaceCharacters" , "data" : right }
78
62
79
63
def comment (self , data ):
80
- return {"type" : "Comment" , "data" : text_type ( data ) }
64
+ return {"type" : "Comment" , "data" : data }
81
65
82
66
def doctype (self , name , publicId = None , systemId = None , correct = True ):
83
67
return {"type" : "Doctype" ,
84
- "name" : to_text ( name ) ,
85
- "publicId" : to_text ( publicId ) ,
86
- "systemId" : to_text ( systemId ) ,
87
- "correct" : to_text ( correct ) }
68
+ "name" : name ,
69
+ "publicId" : publicId ,
70
+ "systemId" : systemId ,
71
+ "correct" : correct }
88
72
89
73
def entity (self , name ):
90
- return {"type" : "Entity" , "name" : text_type ( name ) }
74
+ return {"type" : "Entity" , "name" : name }
91
75
92
76
def unknown (self , nodeType ):
93
77
return self .error ("Unknown node type: " + nodeType )
0 commit comments