@@ -81,24 +81,24 @@ def PullDOMAdapter(node):
81
81
pass
82
82
83
83
try :
84
- import xml .etree .cElementTree as cElementTree
84
+ import xml .etree .cElementTree as ElementTree
85
85
treeTypes ['cElementTree' ] = \
86
- {"builder" : treebuilders .getTreeBuilder ("etree" , cElementTree ),
87
- "walker" : treewalkers .getTreeWalker ("etree" , cElementTree )}
86
+ {"builder" : treebuilders .getTreeBuilder ("etree" , ElementTree ),
87
+ "walker" : treewalkers .getTreeWalker ("etree" , ElementTree )}
88
88
except ImportError :
89
89
try :
90
- import cElementTree
90
+ import cElementTree as ElementTree
91
91
treeTypes ['cElementTree' ] = \
92
- {"builder" : treebuilders .getTreeBuilder ("etree" , cElementTree ),
93
- "walker" : treewalkers .getTreeWalker ("etree" , cElementTree )}
92
+ {"builder" : treebuilders .getTreeBuilder ("etree" , ElementTree ),
93
+ "walker" : treewalkers .getTreeWalker ("etree" , ElementTree )}
94
94
except ImportError :
95
95
pass
96
96
97
97
try :
98
- import lxml .etree as lxml
98
+ import lxml .etree as ElementTree
99
99
treeTypes ['lxml' ] = \
100
- {"builder" : treebuilders .getTreeBuilder ("etree" , lxml ),
101
- "walker" : treewalkers .getTreeWalker ("etree" , lxml )}
100
+ {"builder" : treebuilders .getTreeBuilder ("etree" , ElementTree ),
101
+ "walker" : treewalkers .getTreeWalker ("etree" , ElementTree )}
102
102
except ImportError :
103
103
pass
104
104
@@ -110,6 +110,51 @@ def PullDOMAdapter(node):
110
110
except ImportError :
111
111
pass
112
112
113
+ if "ElementTree" in locals ():
114
+ try :
115
+ from genshi .core import Attrs , QName
116
+ from genshi .core import START , END , DOCTYPE , TEXT , COMMENT
117
+
118
+ def GenshiAdapter (tree ):
119
+ if not (hasattr (tree , "tag" )):
120
+ tree = tree .getroot ()
121
+
122
+ if tree .tag in ("<DOCUMENT_ROOT>" , "<DOCUMENT_FRAGMENT>" ):
123
+ if tree .text :
124
+ yield TEXT , tree .text , (None , - 1 , - 1 )
125
+ for child in tree .getchildren ():
126
+ for item in GenshiAdapter (child ):
127
+ yield item
128
+
129
+ elif tree .tag == "<!DOCTYPE>" :
130
+ yield DOCTYPE , QName (tree .text ), (None , - 1 , - 1 )
131
+
132
+ elif type (tree .tag ) == type (ElementTree .Comment ):
133
+ yield COMMENT , tree .text , (None , - 1 , - 1 )
134
+
135
+ else :
136
+ tag_name = QName (tree .tag .lstrip ('{' ))
137
+ attrs = Attrs ([(QName (attr .lstrip ('{' )), value )
138
+ for attr , value in tree .items ()])
139
+
140
+ yield START , (tag_name , attrs ), (None , - 1 , - 1 )
141
+ if tree .text :
142
+ yield TEXT , tree .text , (None , - 1 , - 1 )
143
+ for child in tree .getchildren ():
144
+ for item in GenshiAdapter (child ):
145
+ yield item
146
+ yield END , tag_name , (None , - 1 , - 1 )
147
+
148
+ if tree .tail :
149
+ yield TEXT , tree .tail , (None , - 1 , - 1 )
150
+
151
+ treeTypes ["genshi" ] = \
152
+ {"builder" : treebuilders .getTreeBuilder ("etree" , ElementTree ),
153
+ "adapter" : GenshiAdapter ,
154
+ "walker" : treewalkers .getTreeWalker ("genshi" )}
155
+ except ImportError :
156
+ pass
157
+
113
158
def concatenateCharacterTokens (tokens ):
114
159
charactersToken = None
115
160
for token in tokens :
0 commit comments