/* local scope doc ptr */ XmlNode = type alias { tag:: string, /* attrs:: [string],*/ content:: string }. interface(extern-c){ xml2 = library:: pkgconfig("libxml-2.0"). include { xml2 = ["libxml/tree.h", "string.h"] }. } Tree = type Tree(Leaf) [Leaf, [Tree(Leaf)]]. XmlTree = type alias Tree(XmlNode). Alias = type alias [String, String]. AliasList = type alias [Alias]. classesAliasQuery = function(node:: xmlNodePtr):: Alias { classesPara = ["pgess1", "pgess2"] :: [String]. result = case default {none} case node[tag] == "style", class in classesPara, classAlias = node[attrs, "name"], class=node[attrs, "parent-style-name"], { [classAlias. class] }. result. } dictAliases = function():: AliasList{ filename = "project/documentation.fodt" :: string. docRaw = xmlParseFile(filename) :: xmlDocPtr. tree= xmlDocGetRootElement(docRaw) :: xmlNodePtr. nodeStylesRoot = find(tree, "automatic-styles"):: xmlNodePtr. nodesStyles= nodeStylesRoot["xmlChildrenNode"]:: [xmlNodePtr]; containers:linkedlist(next, null). dictAliases = loop fold(nodesStyles->nodeStyle:: xmlNodePtr, []->aliases::[xmlNodePtr]):: [xmlNodePtr] { aliases + classAliasesQuery(nodeStyle). }. dictAliases } test1 = function():: int; entry { dictAliases = dictAliases():: AliasList. count = loop fold(dictAliases->alias::Alias, 0->count::int):: int{ aliasName = alias[0]:: String; logging. aliasOrigClass = alias[1]::String; logging. 0 + strlen(aliasName) + strlen(aliasOrigClass). } count } /* toXmlNode = function (nodeRaw:: xmlNodePtr):: XmlNode { {tag = nodeRaw["name"], content=null} } children = function (tree:: xmlNodePtr):: XmlTree { childrenRaw = tree["xmlChildrenNode"]:: [xmlNodePtr]; containers:linkedlist(next, null). loop map (childrenRaw->childRaw:: xmlNodePtr):: XmlTree { [toXmlNode(childRaw), children(childRaw)] } } document = function (filename:: string):: XmlTree { docRaw = xmlParseFile(filename) :: xmlDocPtr. nodeRaw= xmlDocGetRootElement(docRaw) :: xmlNodePtr. [toXmlNode(nodeRaw), children(nodeRaw)]:: XmlTree } */