xml-query.xreate
No OneTemporary

File Metadata

Created
Sat, Mar 14, 1:24 AM

xml-query.xreate

XmlNode = type {
tag: string;
attrs: [string];
content: string}.
Tree = type(Leaf) Tree [Leaf; [Tree(Leaf)]].
XmlTree = Tree(XmlNode).
query = function(tree: XmlTree): [XmlTree]
{
children : context(children) =
case default
[]
case (tree[0]: NeedChildren(childrenFilters), ApplyTransform(transFilters))
{
loop fold (tree[1]->child: Tree(Leaf) | childrenFilters; []->accum).
{accum + traverse(child): cases(transFilters) };
}
node =
case (node.tag == "style:style"; class = node[attrs, "style:name"]; exists(class, ParaKnownClasses))
{
[class, node[attrs, "style:display-name"]];
}
case default
[] ;
Tree[node children] | node + children
}
/*
traverse = function(trees: [XmlTree]) : [XmlTree]
loop fold(trees->tree: Tree; []->acc)
acc + traverse(tree)
*/

Event Timeline