Page Menu
Home
Xreate
Search
Configure Global Search
Log In
Docs
Questions
Repository
Issues
Patches
Internal API
Files
F3995920
all.xreate
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Jul 8, 7:35 AM
Size
4 KB
Mime Type
text/plain
Expires
Fri, Jul 10, 7:35 AM (1 d, 18 h)
Engine
blob
Format
Raw Data
Handle
271808
Attached To
rXR Xreate
all.xreate
View Options
/* C++ SECTION
Example of c++ code:
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile(docname.c_str());
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
cur = cur->xmlChildrenNode;
while (cur != NULL) {
printf("child: %s\n", cur->name);
cur = cur->next;
}
*/
/* FEATURES SECTION
Default strategies:
- what to do with unspecified nodes
Node content strategy:
- send as-is
- apply transforms (all / named)
- ?? skip
Processing order:
- dependencies
Mapping:
* tree -> list
*/
/* TODO SECTION
-- gather types aliases (tree->list mapping)
-- flyweight implementation (doc calculation, for example. based on are there more than one opened document )
*/
// REQUIREMENTS SECTION
/* require ptrvalid */
/* local scope doc ptr */
/* singleton element check(::single) */
XmlAttr = type alias {
name:: String,
content:: String
}.
XmlNode = type alias {
name:: String, /* the name of the node, or the entity */
children:: [xmlNode], /* parent->childs link */
content:: String, /* the content */
attributes::[XmlAttr] /* properties list */
/*
void *_private; // application data
struct _xmlNode *parent; // child->parent link
struct _xmlNode *next; // next sibling link
struct _xmlNode *prev; // previous sibling link
struct _xmlDoc *doc; // the containing document
unsigned short line; // line number
*/
}.
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).
find = ..
[xmlNodePtr]; containers:linkedlist(next, null).
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.
count + 1
}
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
}
*/
Alias = type alias {
alias: String,
original: String
}.
AliasList = type alias [Alias].
classesPar = ["pgess1", "pgess2"] :: [String].
classesAliasQuery = function(node:: xmlNodePtr):: Alias
{
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 = findNodes(tree, "office:automatic-styles"):: xmlNodePtr; single.
nodesStyles= findNodes(nodeStylesRoot, "style:style"):: [xmlNodePtr].
nodesChildAliases = filter(nodeStyles){
"style:parent-style-name" in classesPar
}
dictChildAliases = loop fold(nodesChilds->node:: xmlNodePtr, []->aliases::[Alias]) {
aliases + {alias = attr(node, "style:name"), original = attr(node, "style:parent-style-name")}
}.
nodesDisplayAliases = filter(nodesStyles){
"style:parent-style-name" in classesPar
}
dictDisplayAliases = loop fold(nodesDisplayAliases->node:: xmlNodePtr, []->aliases::[Alias]) {
aliases + {alias = attr(node, "style:display-name"), original = attr(node, "style:name")}
}.
nodesDisplayAliases + dictDisplayAliases
}
Event Timeline
Log In to Comment