web_plat/cxml_library_api/inc/nw_dom_document.h
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web_plat/cxml_library_api/inc/nw_dom_document.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,715 @@
+/*
+* Copyright (c) 2000 - 2001 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/** ----------------------------------------------------------------------- **
+    @package:     NW_DOM
+
+    @synopsis:    default
+
+    @description: default
+
+ ** ----------------------------------------------------------------------- **/
+#ifndef NW_DOM_DOCUMENT_H
+#define NW_DOM_DOCUMENT_H
+
+#include "cxml_proj.h"
+#include "nw_dom_node.h"
+#include "nw_dom_text.h"
+#include "nw_dom_element.h"
+#include "nw_wbxml_dictionary.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_getPublicIdAsNumber
+
+    @synopsis:    Gets the public id of the document as an integer.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* d
+                  The document node.
+
+    @description: Gets the public id of the document as an integer.
+
+    @returns:     NW_Uint32
+                  publicID or 0
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Uint32 
+NW_DOM_DocumentNode_getPublicIdAsNumber(NW_DOM_DocumentNode_t* d);
+
+
+/** ----------------------------------------------------------------------- **
+
+    @function:    NW_DOM_DocumentNode_getPublicId
+
+    @synopsis:    Gets the publicid of the document as string (docType).
+
+    @scope:       public      
+
+    @parameters: 
+       [in]  NW_DOM_DocumentNode_t* d
+                  The document node.
+
+       [out] NW_String_t* str
+                  The public id as a string.
+
+    @description: The document type declaration associated with this 
+                  document is returned.
+
+    @returns:     NW_Status_t 
+                  Status of operation.
+                 
+       [NW_STAT_DOM_NODE_TYPE_ERR]
+                  Error reading node.
+
+       [NW_STAT_SUCCESS]
+                  Success.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Status_t 
+NW_DOM_DocumentNode_getPublicId(NW_DOM_DocumentNode_t* d, 
+                                NW_String_t* str);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_getVersion
+
+    @synopsis:    Returns the version of the document, 
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+    @description: Returns the version of the document. Returns 0 if this
+                  is not valid.
+
+    @returns:     NW_Uint8 
+                  Version number or 0.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Uint8 
+NW_DOM_DocumentNode_getVersion(NW_DOM_DocumentNode_t* doc);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_getCharacterEncoding
+
+    @synopsis:    Returns the supported encoding of the document.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+    @description: Returns the supported encoding of the document or 0 
+                  for invalid document.
+
+    @returns:     NW_Uint32  
+                  Encoding or 0.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Uint32 
+NW_DOM_DocumentNode_getCharacterEncoding(NW_DOM_DocumentNode_t* doc);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_getDocumentElement
+
+    @synopsis:    Returns child node that is the root of this document
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+    @description: Returns child node that is the root of this document
+
+    @returns:     NW_DOM_DocumentNode_t* 
+                  Child node that is the root element of the document; 
+                  NULL if doc is not a document node.
+                  
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_ElementNode_t* 
+NW_DOM_DocumentNode_getDocumentElement(NW_DOM_DocumentNode_t* doc);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_getElementIteratorByTagName
+
+    @synopsis:    Gets the handle to iterate over elements of a given name.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_String_t* tagName
+                  Name of the element.
+
+       [out] NW_DOM_NodeIterator_t* handle
+                  Iterator to iterate over nodes of same name)
+
+    @description: Gets the handle to iterate over elements of a given name.
+
+    @returns:     NW_Status_t                  
+                  Status of operation.
+
+       [NW_STAT_SUCCESS] 
+                  Success
+
+       [NW_STAT_FAILURE] 
+                  Failure
+
+       [NW_STAT_DOM_NODE_TYPE_ERR]
+                  Not NW_DOM_DOCUMENT_NODE.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t 
+NW_DOM_DocumentNode_getElementIteratorByTagName(NW_DOM_DocumentNode_t* doc, 
+                                                NW_String_t* tagName,
+                                                NW_DOM_NodeIterator_t* handle);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:   NW_DOM_DocumentNode_getElementIteratorByTagToken
+
+    @synopsis:    Gets the iterator to iterate over elements of a given token.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_Uint16 token
+                  Token of the element to be found.
+
+       [out] NW_DOM_NodeIterator_t* handle
+                  Iterator to iterate over nodes of same name.
+
+    @description: Gets the iterator to iterate over elements of a given token.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS] 
+                  Success
+
+       [NW_STAT_DOM_NODE_TYPE_ERR]
+                  Not NW_DOM_DOCUMENT_NODE.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t 
+NW_DOM_DocumentNode_getElementIteratorByTagToken(NW_DOM_DocumentNode_t* doc, 
+                                                 NW_Uint16 token,
+                                                 NW_DOM_NodeIterator_t* handle);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_getDictionary
+
+    @synopsis:    Returns dictionary used by this document   
+
+    @scope:       public
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                 The document node.
+
+    @description: Returns dictionary used by this document   
+
+    @returns:     NW_WBXML_Dictionary_t*
+                  Dictionary or null if not found.
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_WBXML_Dictionary_t* 
+NW_DOM_DocumentNode_getDictionary(NW_DOM_DocumentNode_t* doc);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createElementNode
+
+    @synopsis:    Creates a new element with the given name.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_String_t* name
+                  Name of the element to be created.
+
+    @description: Creates a new element with the given name.
+
+    @returns:     NW_DOM_ElementNode_t*                  
+                  New element with the given name; NULL if doc is not a 
+                  document node.
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_ElementNode_t* 
+NW_DOM_DocumentNode_createElementNode(NW_DOM_DocumentNode_t* doc, NW_String_t* name);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:   NW_DOM_DocumentNode_createElementNodeByToken
+
+    @synopsis:    Creates a new element with the given token.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                 The document node.
+
+       [in] NW_Uint16 token
+                 Token of the element to be created.
+
+    @description: Creates a new element with the given token. 
+
+    @returns:     NW_DOM_ElementNode_t*  
+                  New element with the given token; NULL if doc is not a 
+                  document node or token is an invalid token.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_ElementNode_t* 
+NW_DOM_DocumentNode_createElementNodeByToken(
+  NW_DOM_DocumentNode_t* doc, NW_Uint16 token);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createTextNodeWithTextItem
+
+    @synopsis:    Returns a pointer to the created Text Node.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_DOM_TextItem_t* data
+                  The value for the new text node.
+
+    @description: Returns a pointer to the created Text Node.
+
+    @returns:     NW_DOM_TextNode_t*
+                  New text node; NULL if if doc is not a document node.
+                  
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_TextNode_t* 
+NW_DOM_DocumentNode_createTextNodeWithTextItem(
+  NW_DOM_DocumentNode_t* doc, NW_DOM_TextItem_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createTextNode
+
+    @synopsis:    Creates a text node.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_String_t* data
+                  The value for the new text node.
+
+    @description: Creates a text node with the given data.
+
+    @returns:     NW_DOM_TextNode_t*
+                  New text node; NULL if if doc is not a document node.
+                  
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_TextNode_t* 
+NW_DOM_DocumentNode_createTextNode(NW_DOM_DocumentNode_t* doc, NW_String_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:     NW_DOM_DocumentNode_createCommentNode
+
+    @synopsis:     Creates a comment node with the given data.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_String_t* data
+                  Value for the new comment node.
+
+    @description: Creates a comment node with the given data.
+
+    @returns:     NW_DOM_CommentNode_t*
+                  New comment node; NULL if doc is not a document node.
+                   
+ ** ----------------------------------------------------------------------- **/
+NW_DOM_CommentNode_t* 
+NW_DOM_DocumentNode_createCommentNode(NW_DOM_DocumentNode_t* doc, 
+                                      NW_String_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createCDATASectionNode
+
+    @synopsis:    Creates a CDATA section.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+      [in] NW_String_t* data
+                  The value for the new CDATA section node.
+
+    @description: Creates a CDATA section node with the given data.
+
+    @returns:     NW_DOM_CDATASectionNode_t*
+                  New CData section node; NULL if doc is not a document node.
+                  
+ ** ----------------------------------------------------------------------- **/
+NW_DOM_CDATASectionNode_t* 
+NW_DOM_DocumentNode_createCDATASectionNode(NW_DOM_DocumentNode_t* doc, 
+                                           NW_String_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createProcessingInstructionNodeByAttrVal
+
+    @synopsis:    Creates a processing instruction node.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_String_t* target
+                  The target for the processing instruction.
+
+       [in] NW_DOM_AttrVal_t* data
+                  Data for the processing instruction.
+
+    @description: Creates a processing instruction node with the given data.
+                  In WBXML, a processing instruction node can have a combination 
+                  of opaque, string, token, extension, and entity as the data.
+
+    @returns:     NW_DOM_ProcessingInstructionNode_t*
+                  New processing instruction node; NULL if this is a node 
+                  type mismatch.
+                  
+ ** ----------------------------------------------------------------------- **/
+NW_DOM_ProcessingInstructionNode_t* 
+NW_DOM_DocumentNode_createProcessingInstructionNodeByAttrVal(
+ NW_DOM_DocumentNode_t* doc, NW_String_t* target, NW_DOM_AttrVal_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createProcessingInstructionNodeByToken
+
+    @synopsis:    Creates a processing instruction node.
+
+    @scope:       public      
+
+    @parameters: 
+
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_Uint16 token
+                  Token identifying the target.
+
+       [in] NW_DOM_AttrVal_t* data
+                  Data for the processing instruction.
+
+    @description: Creates a processing instruction node with the given data.
+                  In WBXML, a processing instruction node can have a combination 
+                  of opaque, string, token, extension, and entity as the data.
+
+    @returns:     NW_DOM_ProcessingInstructionNode_t*
+                  New processing instruction node; NULL if this is a node type 
+                  mismatch.
+                  
+ ** ----------------------------------------------------------------------- **/
+NW_DOM_ProcessingInstructionNode_t* 
+NW_DOM_DocumentNode_createProcessingInstructionNodeByToken(
+  NW_DOM_DocumentNode_t* doc, NW_Uint16 token, NW_DOM_AttrVal_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createProcessingInstructionNode
+
+    @synopsis:    Creates a processing instruction node.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_DOM_DocumentNode_t* doc
+                  The document node.
+
+       [in] NW_String_t* target
+                  The target for the processing instruction.
+
+       [in] NW_String_t* data
+                  Data for the processing instruction.
+
+    @description: Creates a processing instruction node with the given data.
+
+    @returns:     NW_DOM_ProcessingInstructionNode_t*
+                  New processing instruction node; NULL if doc is not a document 
+                  node.
+                  
+ ** ----------------------------------------------------------------------- **/
+NW_DOM_ProcessingInstructionNode_t* 
+NW_DOM_DocumentNode_createProcessingInstructionNode(
+  NW_DOM_DocumentNode_t* doc, NW_String_t* target, NW_String_t* data);
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:       NW_TinyDom_Handle
+
+    @synopsis:    A handle to hold all the state required to build a tree.
+
+    @scope:       public
+    @variables:
+       NW_WBXML_Parser_t wbxmlParser
+                  WBXML parser
+
+       NW_TinyDom_Parser_t tinyParser
+                  Tiny parser
+
+       NW_TinyDom_Tree_t tinyDOMTree
+                  Tiny DOM tree
+
+       NW_WBXML_Writer_t writer
+                  WBXML writer
+
+       NW_WBXML_Document_t document
+                  WBXML document
+
+    @description: A handle to hold all the state required to build a tree.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_Handle_s{
+  NW_WBXML_Parser_t   wbxmlParser;
+  NW_TinyDom_Parser_t tinyParser;
+  NW_TinyDom_Tree_t   tinyDOMTree;
+  NW_WBXML_Writer_t writer;
+  NW_WBXML_Document_t document;
+} NW_TinyDom_Handle_t;
+
+
+/* "Factory methods" that generate a dom tree and return the tree
+ * root as a document node 
+ */
+ 
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_BuildTree
+
+    @synopsis:    Create a dom tree by parsing a buffer. 
+
+    @scope:       public      
+
+    @parameters: 
+        [in] NW_TinyDom_Handle_t* h
+                  Handle for new tree.
+
+        [in] NW_Byte* buffer
+                  Buffer to parse.
+
+        [in] NW_Int32 length
+                  Length of buffer.
+
+        [in] NW_Bool encoded
+                  Encoded if true, otherwise text.
+
+        [in] NW_Uint32 publicID
+                  Dictionary to apply.
+				
+ 
+        [in] NW_Bool extTNotStringTable
+                  If NW_FALSE then extension tokens EXT_T_[0,1,2] have
+                  an associated index into the string table.  If NW_TRUE
+                  then the NW_Uint32 associated with EXT_T_[0,1,2] is
+                  just an anonymous value.
+
+    @description: Create a dom tree by parsing a buffer. 
+
+    @returns:     NW_DOM_DocumentNode_t*
+                  Node of created tree.
+                  
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_DocumentNode_t* 
+NW_DOM_DocumentNode_BuildTree(NW_TinyDom_Handle_t* h, 
+                              NW_Byte* buffer,
+                              NW_Int32 length,
+                              NW_Bool encoded,
+                              NW_Uint32 publicID,
+                              NW_Bool extTNotStringTable);
+
+
+
+/* ************************************************************************/
+
+/*
+ * Create and populate a dom tree by parsing a buffer, returning the
+ * document node.
+ */
+IMPORT_C
+NW_DOM_DocumentNode_t * 
+NW_DOM_DocumentNode_BuildWBXMLTree(NW_TinyDom_Handle_t *h, 
+                                   NW_Byte *buffer,
+                                   NW_Int32 length,
+                                   NW_Bool freeBuff,
+                                   NW_Bool extTNotStringTable);
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_createDocumentWithNumberPublicId
+
+    @synopsis:    Create an empty dom tree.
+
+    @scope:       public      
+
+    @parameters: 
+       [in] NW_TinyDom_Handle_t* h
+                  The tiny DOM handle.
+
+       [in] NW_Uint8 version
+                  Version of the document to be created.
+
+       [in] NW_Uint32 publicid
+                  Unique identifier for the DTD.
+
+       [in] NW_Uint32 encoding
+                  Encoding for the document.
+ 
+       [in] NW_Bool extTNotStringTable
+                  If NW_FALSE then extension tokens EXT_T_[0,1,2] have
+                  an associated index into the string table.  If NW_TRUE
+                  then the NW_Uint32 associated with EXT_T_[0,1,2] is
+                  just an anonymous value.
+
+       [in] NW_Bool enableStringTable
+                  Set to true for noraml WBXML.  Set to false to prevent
+                  writable DOM from using a string table.
+
+
+    @description: Create an empty dom tree.
+                  In XML and HTML, a public id identifying the DTD is in 
+                  string form, but in WBXML sometimes numbers identify the 
+                  well-known DTDs. Thus, there is a need for two methods for 
+                  document creation.
+
+    @returns:     NW_DOM_DocumentNode_t*
+                  New document node; NULL if error during creation.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_DocumentNode_t* 
+NW_DOM_DocumentNode_createDocumentWithNumberPublicId(NW_TinyDom_Handle_t* h,
+                                                     NW_Uint8 version,
+                                                     NW_Uint32 publicid, 
+                                                     NW_Uint32 encoding,
+                                                     NW_Bool extTNotStringTable,
+                                                     NW_Bool enableStringTable);
+
+/** ----------------------------------------------------------------------- **
+    @function:    CXML_DOM_DocumentNode_BuildTree
+
+    @synopsis:    Create a dom tree by parsing a buffer and retuen the error
+                  status also. 
+
+    @scope:       public      
+
+    @parameters: 
+        [in] NW_TinyDom_Handle_t* h
+                  Handle for new tree.
+
+        [in] NW_Byte* buffer
+                  Buffer to parse.
+
+        [in] NW_Int32 length
+                  Length of buffer.
+
+        [in] NW_Bool encoded
+                  Encoded if true, otherwise text.
+
+        [in] NW_Uint32 publicID
+                  Dictionary to apply.
+				
+ 
+        [in] NW_Bool extTNotStringTable
+                  If NW_FALSE then extension tokens EXT_T_[0,1,2] have
+                  an associated index into the string table.  If NW_TRUE
+                  then the NW_Uint32 associated with EXT_T_[0,1,2] is
+                  just an anonymous value.
+
+        [out] NW_Status_t* errorStatus
+                  Returns the error status code as defined in the WBXML 
+                  parser if any error is occured during the parsing of WBXML.
+                  If DOM tree is created successfully then this return NW_STAT_SUCCESS.
+
+    @description: Create a dom tree by parsing a buffer. 
+
+    @returns:     NW_DOM_DocumentNode_t*
+                  Node of created tree.
+                  
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_DOM_DocumentNode_t* 
+CXML_DOM_DocumentNode_BuildTree(NW_TinyDom_Handle_t* h, 
+                              NW_Byte* buffer,
+                              NW_Int32 length,
+                              NW_Bool encoded,
+                              NW_Uint32 publicID,
+                              NW_Bool extTNotStringTable,
+                              NW_Status_t* errorStatus);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_DOM_DocumentNode_Delete
+
+    @synopsis:    Free the tree created by one of the above methods.
+
+    @scope:       public      
+
+    @parameters: 
+      [in-out] NW_DOM_DocumentNode_t* docNode
+                  Tree to free.
+
+    @description: Free the tree created by one of the above methods.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C void 
+NW_DOM_DocumentNode_Delete(NW_DOM_DocumentNode_t* docNode);
+
+#ifdef __cplusplus
+} /* extern "C" { */
+#endif /* __cplusplus */
+
+#endif  /* NW_DOM_DOCUMENT_H */