@@ -110,50 +110,52 @@ 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 )
113
+ try :
114
+ from genshi .core import QName , Attrs
115
+ from genshi .core import START , END , TEXT , COMMENT , DOCTYPE
116
+
117
+ def GenshiAdapter (tree ):
118
+ text = None
119
+ for token in treewalkers .getTreeWalker ("simpletree" )(tree ):
120
+ type = token ["type" ]
121
+ if type in ("Characters" , "SpaceCharacters" ):
122
+ if text is None :
123
+ text = token ["data" ]
124
+ else :
125
+ text += token ["data" ]
126
+ elif text is not None :
127
+ yield TEXT , text , (None , - 1 , - 1 )
128
+ text = None
129
+
130
+ if type in ("StartTag" , "EmptyTag" ):
131
+ yield (START ,
132
+ (QName (token ["name" ]),
133
+ Attrs ([(QName (attr ),value ) for attr ,value in token ["data" ]])),
134
+ (None , - 1 , - 1 ))
135
+ if type == "EmptyTag" :
136
+ type = "EndTag"
137
+
138
+ if type == "EndTag" :
139
+ yield END , QName (token ["name" ]), (None , - 1 , - 1 )
140
+
141
+ elif type == "Comment" :
142
+ yield COMMENT , token ["data" ], (None , - 1 , - 1 )
143
+
144
+ elif type == "Doctype" :
145
+ yield DOCTYPE , token ["name" ], (None , - 1 , - 1 )
134
146
135
147
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
148
+ pass # FIXME: What to do?
149
+
150
+ if text is not None :
151
+ yield TEXT , text , (None , - 1 , - 1 )
152
+
153
+ treeTypes ["genshi" ] = \
154
+ {"builder" : treebuilders .getTreeBuilder ("simpletree" ),
155
+ "adapter" : GenshiAdapter ,
156
+ "walker" : treewalkers .getTreeWalker ("genshi" )}
157
+ except ImportError :
158
+ pass
157
159
158
160
def concatenateCharacterTokens (tokens ):
159
161
charactersToken = None
0 commit comments