| Viewing file:  genshi.py (1.67 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
from __future__ import absolute_import, division, unicode_literals
 from genshi.core import QName, Attrs
 from genshi.core import START, END, TEXT, COMMENT, DOCTYPE
 
 
 def to_genshi(walker):
 """Convert a tree to a genshi tree
 
 :arg walker: the treewalker to use to walk the tree to convert it
 
 :returns: generator of genshi nodes
 
 """
 text = []
 for token in walker:
 type = token["type"]
 if type in ("Characters", "SpaceCharacters"):
 text.append(token["data"])
 elif text:
 yield TEXT, "".join(text), (None, -1, -1)
 text = []
 
 if type in ("StartTag", "EmptyTag"):
 if token["namespace"]:
 name = "{%s}%s" % (token["namespace"], token["name"])
 else:
 name = token["name"]
 attrs = Attrs([(QName("{%s}%s" % attr if attr[0] is not None else attr[1]), value)
 for attr, value in token["data"].items()])
 yield (START, (QName(name), attrs), (None, -1, -1))
 if type == "EmptyTag":
 type = "EndTag"
 
 if type == "EndTag":
 if token["namespace"]:
 name = "{%s}%s" % (token["namespace"], token["name"])
 else:
 name = token["name"]
 
 yield END, QName(name), (None, -1, -1)
 
 elif type == "Comment":
 yield COMMENT, token["data"], (None, -1, -1)
 
 elif type == "Doctype":
 yield DOCTYPE, (token["name"], token["publicId"],
 token["systemId"]), (None, -1, -1)
 
 else:
 pass  # FIXME: What to do?
 
 if text:
 yield TEXT, "".join(text), (None, -1, -1)
 
 |