diff options
Diffstat (limited to 'misc/pylib/robofab/plistFromTree.py')
-rwxr-xr-x | misc/pylib/robofab/plistFromTree.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/misc/pylib/robofab/plistFromTree.py b/misc/pylib/robofab/plistFromTree.py new file mode 100755 index 000000000..5bf608467 --- /dev/null +++ b/misc/pylib/robofab/plistFromTree.py @@ -0,0 +1,43 @@ +"""Small helper module to parse Plist-formatted data from trees as created +by xmlTreeBuilder. +""" + + +__all__ = "readPlistFromTree" + + +from plistlib import PlistParser + + +def readPlistFromTree(tree): + """Given a (sub)tree created by xmlTreeBuilder, interpret it + as Plist-formatted data, and return the root object. + """ + parser = PlistTreeParser() + return parser.parseTree(tree) + + +class PlistTreeParser(PlistParser): + + def parseTree(self, tree): + element, attributes, children = tree + self.parseElement(element, attributes, children) + return self.root + + def parseElement(self, element, attributes, children): + self.handleBeginElement(element, attributes) + for child in children: + if isinstance(child, tuple): + self.parseElement(child[0], child[1], child[2]) + else: + if not isinstance(child, unicode): + # ugh, xmlTreeBuilder returns utf-8 :-( + child = unicode(child, "utf-8") + self.handleData(child) + self.handleEndElement(element) + + +if __name__ == "__main__": + from xmlTreeBuilder import buildTree + tree = buildTree("xxx.plist", stripData=0) + print readPlistFromTree(tree) |