diff options
Diffstat (limited to 'include/xmlsec/nodeset.h')
-rw-r--r-- | include/xmlsec/nodeset.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/include/xmlsec/nodeset.h b/include/xmlsec/nodeset.h new file mode 100644 index 00000000..104e04fa --- /dev/null +++ b/include/xmlsec/nodeset.h @@ -0,0 +1,139 @@ +/** + * XML Security Library (http://www.aleksey.com/xmlsec). + * + * Enchanced nodes Set + * + * This is free software; see Copyright file in the source + * distribution for preciese wording. + * + * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com> + */ +#ifndef __XMLSEC_NODESET_H__ +#define __XMLSEC_NODESET_H__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include <libxml/tree.h> +#include <libxml/xpath.h> + +#include <xmlsec/xmlsec.h> + +typedef struct _xmlSecNodeSet xmlSecNodeSet, *xmlSecNodeSetPtr; + +/** + * xmlSecNodeSetType: + * @xmlSecNodeSetNormal: nodes set = nodes in the list. + * @xmlSecNodeSetInvert: nodes set = all document nodes minus nodes in the list. + * @xmlSecNodeSetTree: nodes set = nodes in the list and all their subtress. + * @xmlSecNodeSetTreeWithoutComments: nodes set = nodes in the list and + * all their subtress but no comment nodes. + * @xmlSecNodeSetTreeInvert: nodes set = all document nodes minus nodes in the + * list and all their subtress. + * @xmlSecNodeSetTreeWithoutCommentsInvert: nodes set = all document nodes + * minus (nodes in the list and all their subtress + * plus all comment nodes). + * @xmlSecNodeSetList: nodes set = all nodes in the chidren list of nodes sets. + * + * The basic nodes sets types. + */ +typedef enum { + xmlSecNodeSetNormal = 0, + xmlSecNodeSetInvert, + xmlSecNodeSetTree, + xmlSecNodeSetTreeWithoutComments, + xmlSecNodeSetTreeInvert, + xmlSecNodeSetTreeWithoutCommentsInvert, + xmlSecNodeSetList +} xmlSecNodeSetType; + +/** + * xmlSecNodeSetOp: + * @xmlSecNodeSetIntersection: intersection. + * @xmlSecNodeSetSubtraction: subtraction. + * @xmlSecNodeSetUnion: union. + * + * The simple nodes sets operations. + */ +typedef enum { + xmlSecNodeSetIntersection = 0, + xmlSecNodeSetSubtraction, + xmlSecNodeSetUnion +} xmlSecNodeSetOp; + +/** + * xmlSecNodeSet: + * @nodes: the nodes list. + * @doc: the parent XML document. + * @destroyDoc: the flag: if set to 1 then @doc will + * be destroyed when node set is destroyed. + * @type: the nodes set type. + * @op: the operation type. + * @next: the next nodes set. + * @prev: the previous nodes set. + * @children: the children list (valid only if type + * equal to #xmlSecNodeSetList). + * + * The enchanced nodes set. + */ +struct _xmlSecNodeSet { + xmlNodeSetPtr nodes; + xmlDocPtr doc; + int destroyDoc; + xmlSecNodeSetType type; + xmlSecNodeSetOp op; + xmlSecNodeSetPtr next; + xmlSecNodeSetPtr prev; + xmlSecNodeSetPtr children; +}; + +/** + * xmlSecNodeSetWalkCallback: + * @nset: the pointer to #xmlSecNodeSet structure. + * @cur: the pointer current XML node. + * @parent: the pointer to the @cur parent node. + * @data: the pointer to application specific data. + * + * The callback function called once per each node in the nodes set. + * + * Returns: 0 on success or a negative value if an error occurs + * an walk procedure should be interrupted. + */ +typedef int (*xmlSecNodeSetWalkCallback) (xmlSecNodeSetPtr nset, + xmlNodePtr cur, + xmlNodePtr parent, + void* data); + +XMLSEC_EXPORT xmlSecNodeSetPtr xmlSecNodeSetCreate (xmlDocPtr doc, + xmlNodeSetPtr nodes, + xmlSecNodeSetType type); +XMLSEC_EXPORT void xmlSecNodeSetDestroy (xmlSecNodeSetPtr nset); +XMLSEC_EXPORT void xmlSecNodeSetDocDestroy (xmlSecNodeSetPtr nset); +XMLSEC_EXPORT int xmlSecNodeSetContains (xmlSecNodeSetPtr nset, + xmlNodePtr node, + xmlNodePtr parent); +XMLSEC_EXPORT xmlSecNodeSetPtr xmlSecNodeSetAdd (xmlSecNodeSetPtr nset, + xmlSecNodeSetPtr newNSet, + xmlSecNodeSetOp op); +XMLSEC_EXPORT xmlSecNodeSetPtr xmlSecNodeSetAddList (xmlSecNodeSetPtr nset, + xmlSecNodeSetPtr newNSet, + xmlSecNodeSetOp op); +XMLSEC_EXPORT xmlSecNodeSetPtr xmlSecNodeSetGetChildren(xmlDocPtr doc, + const xmlNodePtr parent, + int withComments, + int invert); +XMLSEC_EXPORT int xmlSecNodeSetWalk (xmlSecNodeSetPtr nset, + xmlSecNodeSetWalkCallback walkFunc, + void* data); +XMLSEC_EXPORT int xmlSecNodeSetDumpTextNodes(xmlSecNodeSetPtr nset, + xmlOutputBufferPtr out); +XMLSEC_EXPORT void xmlSecNodeSetDebugDump (xmlSecNodeSetPtr nset, + FILE *output); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __XMLSEC_NODESET_H__ */ + |