From 256f6e5222d11be55c06a91a4db360bac0e3a6d6 Mon Sep 17 00:00:00 2001 From: Stef Date: Tue, 29 Jun 2004 22:51:34 +0000 Subject: Updated to new sablot library --- win32/sablot/include/sdom.h | 957 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 957 insertions(+) (limited to 'win32/sablot/include/sdom.h') diff --git a/win32/sablot/include/sdom.h b/win32/sablot/include/sdom.h index cee53ff..476f32a 100644 --- a/win32/sablot/include/sdom.h +++ b/win32/sablot/include/sdom.h @@ -1,921 +1,1878 @@ /* + * The contents of this file are subject to the Mozilla Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is the Sablotron XSLT Processor. + * + * The Initial Developer of the Original Code is Ginger Alliance Ltd. + * Portions created by Ginger Alliance are Copyright (C) 2000-2002 + * Ginger Alliance Ltd. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the + * terms of the GNU General Public License Version 2 or later (the + * "GPL"), in which case the provisions of the GPL are applicable + * instead of those above. If you wish to allow use of your + * version of this file only under the terms of the GPL and not to + * allow others to use your version of this file under the MPL, + * indicate your decision by deleting the provisions above and + * replace them with the notice and other provisions required by + * the GPL. If you do not delete the provisions above, a recipient + * may use your version of this file under either the MPL or the + * GPL. + */ + + /* sdom.h */ + + #ifndef SDomHIncl + #define SDomHIncl + + //used for DISABLE_DOM only anything else is DANGEROUS + #ifdef HAVE_CONFIG_H + #include + #endif + + #ifndef DISABLE_DOM + + #include "sablot.h" + + /** + ** + ** types + ** + **/ + + typedef void* SDOM_Node; + typedef void* SDOM_NodeList; + /* typedef void* SDOM_Document; */ + + typedef enum + { + SDOM_ELEMENT_NODE = 1, + SDOM_ATTRIBUTE_NODE = 2, + SDOM_TEXT_NODE = 3, + SDOM_CDATA_SECTION_NODE = 4, + SDOM_ENTITY_REFERENCE_NODE = 5, + SDOM_ENTITY_NODE = 6, + SDOM_PROCESSING_INSTRUCTION_NODE = 7, + SDOM_COMMENT_NODE = 8, + SDOM_DOCUMENT_NODE = 9, + SDOM_DOCUMENT_TYPE_NODE = 10, + SDOM_DOCUMENT_FRAGMENT_NODE = 11, + SDOM_NOTATION_NODE = 12, + SDOM_OTHER_NODE /* not in spec */ + } + SDOM_NodeType; + + /* + * we define DOM_char as char, although the spec says strings should be + * UTF_16. Needs check. + */ + typedef char SDOM_char; + + + /* + * DomException + * will be an enum of all the values given in the spec. + */ + + /* + INDEX_SIZE_ERR, 1 + STRING_SIZE_ERR, 2 + HIERARCHY_REQUEST_ERR, 3 + WRONG_DOCUMENT_ERR, 4 + INVALID_CHARACTER_ERR, 5 + NO_DATA_ALLOWED_ERR, 6 + NO_MODIFICATION_ALLOWED_ERR, 7 + NOT_FOUND_ERR, 8 + NOT_SUPPORTED_ERR, 9 + INUSE_ATTRIBUTE_ERR, 10 + INVALID_STATE_ERR, 11 + SYNTAX_ERR, 12 + INVALID_MODIFICATION_ERR, 13 + NAMESPACE_ERR, 14 + INVALID_ACCESS_ERR, 15 + */ + + typedef enum + { + SDOM_OK, + SDOM_INDEX_SIZE_ERR = 1, + SDOM_DOMSTRING_SIZE_ERR = 2, + SDOM_HIERARCHY_REQUEST_ERR = 3, + SDOM_WRONG_DOCUMENT_ERR = 4, + SDOM_INVALID_CHARACTER_ERR = 5, + SDOM_NO_DATA_ALLOWED_ERR = 6, + SDOM_NO_MODIFICATION_ALLOWED_ERR = 7, + SDOM_NOT_FOUND_ERR = 8, + SDOM_NOT_SUPPORTED_ERR = 9, + SDOM_INUSE_ATTRIBUTE_ERR = 10, + SDOM_INVALID_STATE_ERR = 11, + SDOM_SYNTAX_ERR = 12, + SDOM_INVALID_MODIFICATION_ERR = 13, + SDOM_NAMESPACE_ERR = 14, + SDOM_INVALID_ACCESS_ERR = 15, + /* not in spec below this point: */ + SDOM_INVALID_NODE_TYPE, /* eg passing a non-element for an element */ + SDOM_QUERY_PARSE_ERR, + SDOM_QUERY_EXECUTION_ERR, + SDOM_NOT_OK + } SDOM_Exception; + + /** + ** + ** Node + ** n is always the node the function is to operate on (kind of 'this') + ** + **/ + + /* + createElement + Creates a new element Node with NULL parent and specified owner, + and returns it in *pn. + Raises: + */ + Declare( + SDOM_Exception SDOM_createElement( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *tagName); + ) + + //_JP_ v + /* + createElementNS + Creates a new element Node with NULL parent and specified owner, + and returns it in *pn. + Raises: + SDOM_NAMESPACE_ERR or SDOM_INVALID_CHARACTER_ERR when qName or uri malformed + */ + Declare( + SDOM_Exception SDOM_createElementNS( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *uri, + const SDOM_char *qName); + ) + //_JP_ ^ + + /* + createAttribute + Creates a new attribute Node and returns it in *pn. + Raises: + */ + + Declare + ( + SDOM_Exception SDOM_createAttribute( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *name); + ) + + //_JP_ v + /* + createAttributeNS + Creates a new attribute Node and returns it in *pn. + Raises: + SDOM_NAMESPACE_ERR or SDOM_INVALID_CHARACTER_ERR when qName or uri malformed + */ + Declare( + SDOM_Exception SDOM_createAttributeNS( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *uri, + const SDOM_char *qName); + ) + //_JP_ ^ + + + /* + createTextNode + Raises: + */ + + Declare + ( + SDOM_Exception SDOM_createTextNode( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *data); + ) + + /* + createAttribute + Creates a new attribute Node and returns it in *pn. + Raises: + */ + + Declare + ( + SDOM_Exception SDOM_createCDATASection( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *data); + ) + + /* + createComment + Raises: + */ + + Declare + ( + SDOM_Exception SDOM_createComment( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *data); + ) + + /* + createProcessingInstruction + Raises: + */ + + Declare + ( + SDOM_Exception SDOM_createProcessingInstruction( + SablotSituation s, + SDOM_Document d, + SDOM_Node *pn, + const SDOM_char *target, + const SDOM_char *data); + ) + + /* + disposeNode + Frees all memory used by the node. + Raises: + !SPEC: Not in the spec. + */ + + Declare + ( + SDOM_Exception SDOM_disposeNode( + SablotSituation s, + SDOM_Node n); + ) + + + /* + getNodeType + Returns the node type in *pType. + Raises: + */ + + Declare + ( + SDOM_Exception SDOM_getNodeType( + SablotSituation s, + SDOM_Node n, + SDOM_NodeType *pType); + ) + + + /* + getNodeName + Returns the pointer to the name of the node in *pName. + */ + + Declare + ( + SDOM_Exception SDOM_getNodeName( + SablotSituation s, + SDOM_Node n, + SDOM_char **pName); + ) + + Declare + ( + SDOM_Exception SDOM_getNodeNSUri( + SablotSituation s, + SDOM_Node n, + SDOM_char **pName); + ) + + Declare + ( + SDOM_Exception SDOM_getNodePrefix( + SablotSituation s, + SDOM_Node n, + SDOM_char **pName); + ) + + Declare + ( + SDOM_Exception SDOM_getNodeLocalName( + SablotSituation s, + SDOM_Node n, + SDOM_char **pName); + ) + + /* + setNodeName + Sets the node name. + */ + Declare( + SDOM_Exception SDOM_setNodeName( + SablotSituation s, + SDOM_Node n, + const SDOM_char *name); + ) + + /* + getNodeValue + Returns in *pValue the string value of the node. + */ + Declare( + SDOM_Exception SDOM_getNodeValue( + SablotSituation s, + SDOM_Node n, + SDOM_char **pValue); + ) + + /* + setNodeValue + Sets the node value. + */ + Declare( + SDOM_Exception SDOM_setNodeValue( + SablotSituation s, + SDOM_Node n, + const SDOM_char *value); + ) + + /* + getParentNode + Returns the parent in *pParent. + */ + Declare( + SDOM_Exception SDOM_getParentNode( + SablotSituation s, + SDOM_Node n, + SDOM_Node *pParent); + ) + + /* + getFirstChild + Returns the first child in *pFirstChild. + */ + Declare( + SDOM_Exception SDOM_getFirstChild( + SablotSituation s, + SDOM_Node n, + SDOM_Node *pFirstChild); + ) + + /* + getLastChild + Returns the last child in *pLastChild. + */ + Declare( + SDOM_Exception SDOM_getLastChild( + SablotSituation s, + SDOM_Node n, + SDOM_Node *pLastChild); + ) + + /* + getPreviousSibling + Returns the previous sibling in *pPreviousSibling. + */ + Declare( + SDOM_Exception SDOM_getPreviousSibling( + SablotSituation s, + SDOM_Node n, + SDOM_Node *pPreviousSibling); + ) + + /* + getNextSibling + Returns the next sibling in *pNextSibling. + */ + Declare( + SDOM_Exception SDOM_getNextSibling( + SablotSituation s, + SDOM_Node n, + SDOM_Node *pNextSibling); + ) + + /* + getChildNode + Returns the child node in specified index or NULL. + */ + Declare( + SDOM_Exception SDOM_getChildNodeIndex( + SablotSituation s, + SDOM_Node n, + int index, + SDOM_Node *pChildNode); + ) + + /* + getChildNodeCount + Returns the count of child nodes. + */ + Declare( + SDOM_Exception SDOM_getChildNodeCount( + SablotSituation s, + SDOM_Node n, + int *count); + ) + + /* + getOwnerDocument + Returns, in *pOwnerDocument, the Document owning the node. + !SPEC: If the node is standalone, returns NULL. + */ + Declare( + SDOM_Exception SDOM_getOwnerDocument( + SablotSituation s, + SDOM_Node n, + SDOM_Document *pOwnerDocument); + ) + + /* + insertBefore + Inserts newChild as n's child, just before refChild. + */ + Declare( + SDOM_Exception SDOM_insertBefore( + SablotSituation s, + SDOM_Node n, + SDOM_Node newChild, + SDOM_Node refChild); + ) + + /* + removeChild + Removes oldChild (a child of n) without deallocating it. + */ + + Declare( + SDOM_Exception SDOM_removeChild( + SablotSituation s, + SDOM_Node n, + SDOM_Node oldChild); + ) + + /* + replaceChild + Replaces oldChild (a child of n) by newChild. + */ + Declare( + SDOM_Exception SDOM_replaceChild( + SablotSituation s, + SDOM_Node n, + SDOM_Node newChild, + SDOM_Node oldChild); + ) + + /* + appendChild + Appends newChild as the last of n's children. + */ + Declare( + SDOM_Exception SDOM_appendChild( + SablotSituation s, + SDOM_Node n, + SDOM_Node newChild); + ) + + /* + cloneNode + Duplicates the node, returning the result in *clone. + If deep is nonzero, the cloning process will be recursive. + */ + + Declare( + SDOM_Exception SDOM_cloneNode( + SablotSituation s, + SDOM_Node n, + int deep, + SDOM_Node *clone); + ) + + /* + cloneForeignNode + Duplicates a node from a different doc, returning the result in *clone. + If deep is nonzero, the cloning process will be recursive. + As opposed to cloneNode, represents a Document method + */ + + Declare( + SDOM_Exception SDOM_cloneForeignNode( + SablotSituation s, + SDOM_Document d, + SDOM_Node n, + int deep, + SDOM_Node *clone); + ) + + /* + getAttribute + Returns, in *pValue, the contents of the attribute (of n) named 'name'. + */ + Declare( + SDOM_Exception SDOM_getAttribute( + SablotSituation s, + SDOM_Node n, + const SDOM_char *name, + SDOM_char **pValue); + ) + + /* + getAttributeNS + Returns, in *pValue, the contents of the attribute (of n) with 'uri' and 'local'. + */ + Declare( + SDOM_Exception SDOM_getAttributeNS( + SablotSituation s, + SDOM_Node n, + SDOM_char *uri, + SDOM_char *local, + SDOM_char **pValue); + ) + + /* + getAttributeNode + Returns, in *attr, the attribute named 'name'. + */ + Declare( + SDOM_Exception SDOM_getAttributeNode( + SablotSituation s, + SDOM_Node n, + const SDOM_char *name, + SDOM_Node *attr); + ) + + /* + getAttributeNodeNS + Returns, in *attr, the n's attribute with uri and local. + */ + Declare( + SDOM_Exception SDOM_getAttributeNodeNS( + SablotSituation s, + SDOM_Node n, + SDOM_char *uri, + SDOM_char *local, + SDOM_Node *attr); + ) + + //_JP_ v + /* + getAttributeNodeIndex + Returns, in *attr, the index'th attribute, namespaces precede other atts. + */ + Declare( + SDOM_Exception SDOM_getAttributeNodeIndex( + SablotSituation s, + SDOM_Node n, + const int index, + SDOM_Node *attr); + ) + + /* + getAttributeNodeCount + Returns, in *count, the count of atts, including namespaces in scope. + */ + Declare( + SDOM_Exception SDOM_getAttributeNodeCount( + SablotSituation s, + SDOM_Node n, + int *count); + ) + //_JP_ ^ + + /* + setAttribute + Assigns the given value to n's attribute named 'name'. + */ + Declare( + SDOM_Exception SDOM_setAttribute( + SablotSituation s, + SDOM_Node n, + const SDOM_char *name, + const SDOM_char *value); + ) + + /* + setAttributeNS + Assigns the given value to n's attribute with 'uri' and qualified name 'qName'. + */ + Declare( + SDOM_Exception SDOM_setAttributeNS( + SablotSituation s, + SDOM_Node n, + const SDOM_char *uri, + const SDOM_char *qName, + const SDOM_char *value); + ) + + /* + setAttributeNode + Assigns the given attnode as n's attribute. + Returns replaced, if was replaced some node with the same nodeName. + */ + Declare( + SDOM_Exception SDOM_setAttributeNode( + SablotSituation s, + SDOM_Node n, + SDOM_Node attnode, + SDOM_Node *replaced); + ) + + /* + setAttributeNodeNS + Assigns the given attnode to n's attribute with attnode.uri and attnode.localname. + Returns replaced, if was replaced some node. + */ + Declare( + SDOM_Exception SDOM_setAttributeNodeNS( + SablotSituation s, + SDOM_Node n, + SDOM_Node attnode, + SDOM_Node *replaced); + ) + + /* + removeAttribute + Removes the given attribute of n. + */ + Declare( + SDOM_Exception SDOM_removeAttribute( + SablotSituation s, + SDOM_Node n, + const SDOM_char *name); + ) + + /* + removeAttribute + Removes the given attribute of n. + */ + Declare( + SDOM_Exception SDOM_removeAttributeNode( + SablotSituation s, + SDOM_Node n, + SDOM_Node attnode, + SDOM_Node *removed); + ) + /* + attributeElement + returns owner element of attribute specified + */ + Declare( + SDOM_Exception SDOM_getAttributeElement( + SablotSituation s, + SDOM_Node attr, + SDOM_Node *owner); + ) + + /* + getAttributeList + Returns, in *pAttrList, the list of all attributes of the element n. + !SPEC: Not in spec. + */ + Declare( + SDOM_Exception SDOM_getAttributeList( + SablotSituation s, + SDOM_Node n, + SDOM_NodeList *pAttrList); + ) + + /** + ** END Node + **/ + + + /** + ** Functions related to Document + **/ + + + /* + docToString + Serializes the document, returning the resulting string in + *pSerialized, which is a Sablotron-allocated buffer. + !SPEC: Not in spec. + */ + Declare( + SDOM_Exception SDOM_docToString( + SablotSituation s, + SDOM_Document d, + SDOM_char **pSerialized); + ) + + Declare( + SDOM_Exception SDOM_nodeToString( + SablotSituation s, + SDOM_Document d, + SDOM_Node n, + SDOM_char **pSerialized); + ) + + /** + ** END Document functions + **/ + + + /** + ** NodeList + ** An ordered collection of nodes, returned by xql. + **/ + + + /* + getNodeListLength + Returns, in *pLength, the number of nodes in the list l. + !SPEC: Not in spec. + */ + Declare( + SDOM_Exception SDOM_getNodeListLength( + SablotSituation s, + SDOM_NodeList l, + int *pLength); + ) + + /* + getNodeListItem + Returns, in *pItem, the index'th member of the node list l. + !SPEC: Not in spec. + */ + Declare( + SDOM_Exception SDOM_getNodeListItem( + SablotSituation s, + SDOM_NodeList l, + int index, + SDOM_Node *pItem); + ) + + /* + disposeNodeList + Destroys the node list l. The nodes themselves are NOT disposed. + !SPEC: Not in spec. + */ + Declare( + SDOM_Exception SDOM_disposeNodeList( + SablotSituation s, + SDOM_NodeList l); + ) + + /** + ** END NodeList + **/ + + + /** + ** Miscellaneous + **/ + + /* + xql + Returns, in *pResult, the list of all nodes satisfying the XPath + query given as a string in 'query'. For the evaluation of the query, the + current node will be set to currentNode. + Note that the query is necessarily rather restricted. + After the contents of *pResult have been retrieved, the list should + be freed using disposeNodeList. + !SPEC: Not in spec. + */ + Declare( + SDOM_Exception SDOM_xql( + SablotSituation s, + const SDOM_char *query, + SDOM_Node currentNode, + SDOM_NodeList *pResult); + ) + + +Declare( + +SDOM_Exception SDOM_xql_ns( + + SablotSituation s, + + const SDOM_char *query, + + SDOM_Node currentNode, + + char** nsmap, + + SDOM_NodeList *pResult); + +) + + + /** + ** END Miscellaneous + ** + ** + ** + ** Exception retrieval + **/ + + /* + getExceptionCode + returns the code of the pending exception + */ + + Declare + ( + int SDOM_getExceptionCode(SablotSituation s); + ) + + /* + getExceptionMessage + returns the message for the pending exception + */ + + Declare + ( + char* SDOM_getExceptionMessage(SablotSituation s); + ) + + /* + getExceptionDetails + returns extra information for the pending exception + - on the code and message of the primary error + - on the document and file line where the primary error occured + */ + + Declare + ( + void SDOM_getExceptionDetails( + SablotSituation s, + int *code, + char **message, + char **documentURI, + int *fileLine); + ) + + /** + ** END Exception retrieval + ** + ** + ** Internal functions + **/ + + /* + setNodeInstanceData + saves a pointer in a node instance + */ + + Declare( + void SDOM_setNodeInstanceData(SDOM_Node n, void *data); + ) + + /* + getNodeInstanceData + retrieves the saved pointer + */ + Declare( + void* SDOM_getNodeInstanceData(SDOM_Node n); + ) + /* + setDisposeNodeCallback + sets callback to be called on every node disposal + */ + + typedef void SDOM_NodeCallback(SDOM_Node n); + + Declare + ( + void SDOM_setDisposeCallback(SDOM_NodeCallback *f); + ) + + Declare + ( + SDOM_NodeCallback* SDOM_getDisposeCallback(); + ) + + /** + ** FOR IMPLEMENTATION IN PERL + ** None of these fuctions appear in the spec. + **/ + + + /* + ArrayRef getChildNodes(Node n) + Returns the array of n's children. + Implement using getFirstChild and getNextSibling. + + + HashRef getAttributes(Node n) + Returns the hash of n's attributes. + Implement using getAttributeList, getNodeListLength, + getNodeListItem, getNodeName and getNodeValue. + + + setAttributes(Node n, HashRef atts) + Sets n's attributes to atts, keeping the old ones alive but making + them standalone. + Implement using getAttributeList, getNodeListLength, removeAttribute + and setAttribute (not too efficient perhaps). + */ + + /* _TH_ v */ + Declare + ( + void SDOM_tmpListDump(SDOM_Document doc, int p); + ) + + +Declare + +( + + SDOM_Exception SDOM_compareNodes( + + SablotSituation s, + + SDOM_Node n1, + + SDOM_Node n2, + + int *res); + +) + + + #endif /* DISABLE_DOM */ + + #endif /* SDomHIncl */ + -- cgit v1.2.3