1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- def get_include_callback():
- """
- .. function: get_include_callback returns function that processes each DOM element to get xsyn include from it, and it's aware of directory with all the xsyns.
- :param xsyn_dir directory with xsyns.
- """
- def get_include(element):
- """
- .. function: get_include returns list of includes from this DOM element.
- :param element DOM element.
- """
- res = []
- if element.nodeType == element.ELEMENT_NODE and element.nodeName == "parse:include":
- attrs = element.attributes
- for i in xrange(attrs.length):
- attr = attrs.item(i)
- if attr.nodeName == "path":
- include_filename = attr.nodeValue
- res.append(include_filename)
- return res
- return get_include
- def traverse_xsyn(element, on_element):
- """
- .. function: traverse_xsyn traverses element and returns concatenated lists of calling on_element of each element.
- :param element element in DOM.
- :param on_element callback on element that returns list of values.
- """
- res = on_element(element)
- for child in element.childNodes:
- child_results = traverse_xsyn(child, on_element)
- res += child_results
- return res
- def process_xsyn(filepath, on_element):
- """
- .. function: process_xsyn processes xsyn file and return concatenated list of calling on_element on each DOM element.
- :param filepath path to xsyn file
- :param on_element callback called on each element in xsyn that returns list of values.
- """
- # keep a stack of filepathes if on_element calls process_xsyn recursively
- with open(filepath) as xsyn_file:
- from xml.dom.minidom import parse
- tree = parse(xsyn_file)
- tree.normalize()
- res = traverse_xsyn(tree, on_element)
- return res
- def get_all_includes(filepath):
- callback = get_include_callback()
- return process_xsyn(filepath, callback)
|