@@ -110,50 +110,52 @@ def PullDOMAdapter(node):
110110except ImportError :
111111 pass
112112
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 )
134146
135147 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
157159
158160def concatenateCharacterTokens (tokens ):
159161 charactersToken = None
0 commit comments