xmlsrv_plat/cxml_library_api/inc/nw_tinydom.h
changeset 24 74f0b3eb154c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlsrv_plat/cxml_library_api/inc/nw_tinydom.h	Wed Jun 23 20:27:15 2010 +0530
@@ -0,0 +1,1300 @@
+/*
+* 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_TinyDom
+
+    @synopsis:    default
+
+    @description: default
+
+ ** ----------------------------------------------------------------------- **/
+
+#ifndef NW_TINY_DOM_H
+#define NW_TINY_DOM_H
+
+#include <xml/cxml/cxml_proj.h>
+#include <xml/cxml/nw_tinytree.h>
+#include <xml/cxml/nw_wbxml_document.h>
+#include <xml/cxml/nw_wbxml_parse.h>
+#include <xml/cxml/nw_wbxml_opaque.h>
+#include <xml/cxml/nw_encoder_wbxmlwriter.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+
+
+enum NW_TinyDom_ExtensionType_e {
+  NW_TINYDOM_EXTENSION_TYPE_NORMAL,
+  NW_TINYDOM_EXTENSION_TYPE_EXT_T_INTEGER
+};
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_TinyDom_Extension
+
+    @synopsis:    Extension structure.
+
+    @scope:       public
+    @variables:
+       NW_Uint32 token
+                  Token.
+
+       NW_String_t string
+                  Extension string.
+
+    @description: Extension structure.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_Extension_s{
+  /* type is either NW_TINYDOM_EXTENSION_TYPE_NORMAL or
+     NW_TINYDOM_EXTENSION_TYPE_EXT_T_INTEGER */
+  NW_Uint8 type;
+  NW_Uint32 token;
+  union {
+    NW_String_t string;
+    NW_Uint32 x;
+  } value;
+} NW_TinyDom_Extension_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @union:      NW_TinyDom_AttrValComponent
+
+    @synopsis:    Attribute value component union.
+
+    @scope:       public
+    @variables:
+       NW_Uint32 value_token
+                  token
+
+       NW_String_t string
+                  string
+
+       NW_TinyDom_Extension_t ext
+                  extension
+
+       NW_Uint32 entity
+                  entity.
+
+       NW_WBXML_Opaque_t opaque
+                  opaque
+
+    @description: Union of all possible attribute value types.
+ ** ----------------------------------------------------------------------- **/
+typedef union NW_TinyDom_AttrValComponent_u{
+  NW_Uint32 value_token;
+  NW_String_t string;
+  NW_TinyDom_Extension_t ext;
+  NW_Uint32 entity;
+  NW_WBXML_Opaque_t opaque;
+}NW_TinyDom_AttrValComponent_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:       NW_TinyDom_AttrVal
+
+    @synopsis:    Attribute value.
+
+    @scope:       public
+    @variables:
+       NW_Uint32 type
+                  type
+
+       NW_TinyDom_AttrValComponent_t component
+                  attribute value union of all possible types.
+
+    @description: An attribute value has a type info field and a union of
+                  all the possible types. The type info values are defined
+                  in NW_WBXML_Attribute.h. This type is designed to be
+                  passed as an in/out param to the attribute value iterator.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_AttrVal_s {
+  NW_Uint32 type;
+  NW_TinyDom_AttrValComponent_t component;
+} NW_TinyDom_AttrVal_t;
+
+
+/* Node type bits */
+
+#define T_DOM_NODE_DOC          (NW_Uint16)00
+#define T_DOM_NODE_TAG          (NW_Uint16)01
+#define T_DOM_NODE_ATTR         (NW_Uint16)02
+#define T_DOM_NODE_TEXT         (NW_Uint16)03
+#define T_DOM_NODE_PI           (NW_Uint16)04
+#define T_DOM_NODE_COMMENT      (NW_Uint16)05
+#define T_DOM_NODE_CDATASECTION (NW_Uint16)06
+#define T_DOM_NODE_XML          (NW_Uint16)80
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_TinyDom_Tree
+
+    @synopsis:    Wrapper for tree components.
+
+    @scope:       public
+    @variables:
+       NW_WBXML_Document_t* doc
+                  The document.
+
+       NW_TinyTree_t tree
+                  The tree.
+
+       NW_WBXML_Parser_t* parser
+                  Parser associated with this tree.
+
+       NW_WBXML_Writer_t* writer
+                  Writer for this tree.
+
+       NW_TinyTree_Node_t* root_node
+                  Root node of tree.
+
+    @description:  Wrapper for tree components.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_Tree_s{
+  NW_WBXML_Document_t* doc;
+  NW_TinyTree_t tree;
+  NW_WBXML_Parser_t* parser;
+  NW_WBXML_Writer_t* writer;
+  NW_TinyTree_Node_t* root_node;
+}NW_TinyDom_Tree_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_TinyDom_Parser
+
+    @synopsis:    Parser structure.
+
+    @scope:       public
+    @variables:
+       NW_Uint32 state
+                  State.
+
+       NW_TinyTree_Offset_t node_count
+                  default
+
+       NW_TinyTree_Offset_t cp_count
+                  Current offset.
+
+       NW_TinyDom_Tree_t* dom_tree
+                  The tree.
+
+       NW_TinyTree_Node_t* current_node
+                  Present position in tree.
+
+       NW_TinyTree_Offset_t content_offset
+                  Present offset into buffer.
+
+    @description: Parser structure.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_Parser_s{
+  NW_Uint32 state;
+  NW_TinyTree_Offset_t node_count;
+  NW_TinyTree_Offset_t cp_count;
+  NW_TinyDom_Tree_t* dom_tree;
+  NW_TinyTree_Node_t* current_node;
+  /* Offset where current content begins */
+  NW_TinyTree_Offset_t content_offset;
+}NW_TinyDom_Parser_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Tree_construct
+
+    @synopsis:    Constructor.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_TinyDom_Tree_t* domTree
+                  The tree.
+
+       [in] NW_WBXML_Parser_t* wbxmlParser
+                  The parser
+
+       [in] NW_WBXML_Document_t* doc
+                  The document.
+
+       [in] NW_WBXML_Writer_t* writer
+                  The writer.
+
+    @description: Constructor.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_TinyDom_Tree_construct(NW_TinyDom_Tree_t* domTree,
+                          NW_WBXML_Parser_t* wbxmlParser,
+                          NW_WBXML_Document_t* doc,
+                          NW_WBXML_Writer_t* writer);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Tree_destruct
+
+    @synopsis:    Destructor.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_TinyDom_Tree_t* domTree
+                  The DOM tree.
+
+    @description: Destructor.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_TinyDom_Tree_destruct(NW_TinyDom_Tree_t* domTree);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Parser_construct
+
+    @synopsis:    Constructor.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Parser_t* domParser
+                  The DOM parser.
+
+       [in] NW_TinyDom_Tree_t* domTree
+                  The DOM tree.
+
+    @description: Constructor.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C void
+NW_TinyDom_Parser_construct(NW_TinyDom_Parser_t* domParser,
+                            NW_TinyDom_Tree_t* domTree);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Parser_destruct
+
+    @synopsis:    Desctructor.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_TinyDom_Parser_t* domParser
+                  The DOM parser.
+
+    @description: Destructor.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_TinyDom_Parser_destruct(NW_TinyDom_Parser_t* domParser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Parser_buildTree
+
+    @synopsis:    Build tiny DOM tree.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Parser_t* domParser
+                  The DOM parser.
+
+       [in] char* buffer
+                  The buffer containing the document data.
+
+       [in] NW_Uint32 buffsize
+                  The size of the document buffer.
+
+       [in] NW_Bool freeBuff
+                  Flag
+
+    @description: Builds a DOM tree. The DOM parser must previously have
+                  been initialized to use a parser (WBXML or XML) that
+                  knows how to parse the contents of the buffer.Build tiny
+                  DOM tree. Run Pass1 and Pass 2.
+
+    @returns:     NW_Status_t
+                  default
+
+       [NW_STAT_SUCCESS]
+                  Tree built.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  General error.
+
+       [NW_STAT_OUT_OF_MEMORY]
+                  Out of memory.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_Parser_buildTree(NW_TinyDom_Parser_t* domParser,
+                            char* buffer,
+                            NW_Uint32 buffsize,
+                            NW_Bool freeBuff);
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Parser_incrementalBuildTree
+
+    @synopsis:    build/append tiny DOM tree.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Parser_t* domParser
+                  The DOM parser.
+
+       [in] char* buffer
+                  The buffer containing the document data.
+
+       [in] NW_Uint32 buffsize
+                  The size of the document buffer.
+
+       [in] NW_Bool freeBuff
+                  Flag
+
+    @description: Builds a DOM tree. The DOM parser must previously have
+                  been initialized to use a parser (WBXML or XML) that
+                  knows how to parse the contents of the buffer.Build tiny
+                  DOM tree. Run Pass1 and Pass 2.
+
+    @returns:     NW_Status_t
+                  default
+
+       [NW_STAT_SUCCESS]
+                  Tree built.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  General error.
+
+       [NW_STAT_OUT_OF_MEMORY]
+                  Out of memory.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_Parser_incrementalBuildTree(NW_TinyDom_Parser_t* domParser,
+                            char* buffer,
+                            NW_Uint32 buffsize,
+                            NW_Bool freeBuff,
+                            NW_Int32 lastValid);
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Node_getType
+
+    @synopsis:    Get node type.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyTree_Node_t* node
+                  The DOM parser.
+
+    @description: Get node type.
+
+    @returns:     NW_Uint16
+                  Node flag.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Uint16
+NW_TinyDom_Node_getType(NW_TinyTree_Node_t* node);
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_TinyDom_ListIterator
+
+    @synopsis:    ListIterator structure.
+
+    @scope:       public
+    @variables:
+       NW_Uint32 state
+                  Iterator state.
+
+       void* segment
+                  Segment
+
+       NW_TinyTree_Offset_t segSize
+                  Segment size
+
+       NW_TinyTree_Offset_t offset
+                  Offset into document.
+
+       NW_TinyDom_Parser_t* tiny_parser
+                  Parser used for iteration.
+
+       void* context
+                  Context.
+
+    @description: ListIterator structure.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_ListIterator_s {
+  NW_Uint32 state;
+  void* segment;
+  NW_TinyTree_Offset_t segSize;
+  NW_TinyTree_Offset_t offset;
+  NW_TinyDom_Parser_t* tiny_parser;
+  void* context;
+}NW_TinyDom_ListIterator_t;
+
+
+/* Tiny dom routines to support tags */
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_TinyDom_Tag
+
+    @synopsis:    Tag structure.
+
+    @scope:       public
+    @variables:
+       NW_TinyDom_Parser_t* tiny_parser
+                  This parser.
+
+       NW_Uint32 fq_token
+                  Token with codepage and attribute/element tag.
+
+       NW_Uint32 name_index
+                  Index of first character of name into string table.
+
+    @description: Tag structure.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_Tag_s {
+  NW_TinyDom_Parser_t* tiny_parser;
+  NW_Uint32 fq_token;
+  NW_Uint32 name_index;
+}NW_TinyDom_Tag_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_getTagToken
+
+    @synopsis:    Get tag token.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Parser_t* parser
+                  The parser.
+
+       [in] NW_TinyTree_Node_t* node
+                  Node to use.
+
+    @description: Get tag token.
+
+    @returns:     NW_Uint32
+                  Tag token.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Uint32
+NW_TinyDom_getTagToken(NW_TinyDom_Parser_t* parser,
+                       NW_TinyTree_Node_t* node);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_getTagName
+
+    @synopsis:    Get tag name.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Parser_t* parser
+                  This parser.
+
+       [in] NW_TinyTree_Node_t* node
+                  This node.
+
+       [out] NW_String_t* name
+                  Name of tag.
+
+    @description: Get tag name.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Name found.
+
+       [NW_STAT_WBXML_NO_NAME]
+                  No name found.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  No name found.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_getTagName(NW_TinyDom_Parser_t* parser,
+                      NW_TinyTree_Node_t* node,
+                      NW_String_t* name);
+
+/* Tiny dom routines to support attributes */
+
+/** ----------------------------------------------------------------------- **
+    @typedef:     NW_TinyDom_AttrListHandle
+
+    @synopsis:    Attribute list handle.
+
+    @scope:       public
+    @type:        NW_TinyDom_ListIterator_t
+
+    @description: Attribute list handle.
+ ** ----------------------------------------------------------------------- **/
+typedef NW_TinyDom_ListIterator_t NW_TinyDom_AttrListHandle_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttrListHandle_init
+
+    @synopsis:    Initialize attribute list handle.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttrListHandle_t* handle
+                  This handle.
+
+       [in] NW_TinyDom_Parser_t* parser
+                  This parser.
+
+       [in] NW_TinyTree_Node_t* node
+                  This node.
+
+    @description: Initialize attribute list handle.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_TinyDom_AttrListHandle_init(NW_TinyDom_AttrListHandle_t* handle,
+                               NW_TinyDom_Parser_t* parser,
+                               NW_TinyTree_Node_t* node);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttrListHandle_iterate
+
+    @synopsis:    Iterate through a list of attributes.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_TinyDom_AttrListHandle_t* handle
+                  The handle.
+
+    @description: Iterate through a list of attributes. There are no
+                  attribute list callbacks since we just want to iterate
+                  the attribute list, returning the start of each attribute.
+
+    @returns:     NW_TinyTree_Offset_t
+                  Tree offset  or NULL if at end of iteration.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Offset_t
+NW_TinyDom_AttrListHandle_iterate(NW_TinyDom_AttrListHandle_t* handle);
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_TinyDom_AttributeHandle
+
+    @synopsis:    An attribute handle, for iteration over values.
+
+    @scope:       public
+    @variables:
+       NW_TinyDom_ListIterator_t tlit
+                  The iterator structure.
+
+       void* value
+                  The current value.
+
+       NW_Uint32 fq_token
+                  Fully qualified token. That is: token, codepage and
+                  attribute flag.
+
+       NW_Uint32 name_index
+                  Index into string table.
+
+    @description: An attribute handle, for iteration over values.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_TinyDom_AttributeHandle_s {
+  NW_TinyDom_ListIterator_t tlit;
+  /* field value is a pointer to the struct to fill in by parsing */
+  NW_TinyDom_AttrVal_t* value;
+  NW_Uint32 fq_token;
+  NW_Uint32 name_index;
+} NW_TinyDom_AttributeHandle_t;
+
+
+/* ----------------------------------------------------------------------- **
+   Attribute values are made up of components of several types. These are
+   defined in WBXML/types.h
+** ----------------------------------------------------------------------- **/
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_init
+
+    @synopsis:    Initialize an attribute handle.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_TinyDom_AttributeHandle_t* handle
+                  The handle.
+
+       [in-out] NW_TinyDom_Parser_t* parser
+                  The parser.
+
+       [in] NW_TinyTree_Offset_t offset
+                  Offset into buffer.
+
+    @description: Initialize an attribute handle by parsing an attribute's
+                  start token and values, calling the attribute handlers.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_TinyDom_AttributeHandle_init(NW_TinyDom_AttributeHandle_t* handle,
+                                NW_TinyDom_Parser_t* parser,
+                                NW_TinyTree_Offset_t offset);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_valsIterate
+
+    @synopsis:    Iterate over attribute values.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_TinyDom_ListIterator_t *it
+                  The iterator.
+
+    @description: Initialize an attribute handle by parsing an attribute's
+                  start token and values, calling the attribute handlers.
+
+    @returns:     NW_TinyTree_Offset_t
+                  Offset.  If offset is 0, then at end of iteration.
+
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Offset_t
+NW_TinyDom_AttributeHandle_valsIterate(NW_TinyDom_ListIterator_t *it);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_getToken
+
+    @synopsis:    Get the token from the handle.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttributeHandle_t* handle
+                  dThe handle.
+
+    @description: Get the fully qualified token.
+
+    @returns:     NW_Uint32
+                  Token in handle structure.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Uint32
+NW_TinyDom_AttributeHandle_getToken(NW_TinyDom_AttributeHandle_t* handle);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_getName
+
+    @synopsis:    Get the name from the handle.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttributeHandle_t* handle
+                  The handle.
+
+       [out] NW_String_t* name
+                  The name.
+
+    @description: Get the name, if any, from the handle.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Name found.
+
+       [NW_STAT_WBXML_NO_NAME]
+                  Name not found.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Invalid string in table.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_AttributeHandle_getName(NW_TinyDom_AttributeHandle_t* handle,
+                                   NW_String_t* name);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_iterateValues
+
+    @synopsis:    Iterate the values.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttributeHandle_t* handle
+                  The handle.
+
+       [out] NW_TinyDom_AttrVal_t* value
+                  Attribute value.
+
+    @description: Iterate the values.
+
+    @returns:     NW_TinyTree_Offset_t
+                  Buffer offset or zero if done.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Offset_t
+NW_TinyDom_AttributeHandle_iterateValues(NW_TinyDom_AttributeHandle_t* handle,
+                                         NW_TinyDom_AttrVal_t* value);
+
+
+/* TODO: Add method to get values as a string */
+
+
+/** ----------------------------------------------------------------------- **
+    @typedef:     NW_TinyDom_TextHandle
+
+    @synopsis:    A text handle, for iteration over text components.
+
+    @scope:       public
+    @type:        NW_TinyDom_AttributeHandle_t
+
+    @description: A text handle, for iteration over text components.
+ ** ----------------------------------------------------------------------- **/
+typedef NW_TinyDom_AttributeHandle_t NW_TinyDom_TextHandle_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_TextHandle_init
+
+    @synopsis:    Initialize a text handle.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_TextHandle_t* handle
+                  The handle.
+
+       [in] NW_TinyDom_Parser_t* parser
+                  The parser.
+
+       [in] NW_TinyTree_Offset_t offset
+                  The offset.
+
+    @description: Initialize a text handle.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_TinyDom_TextHandle_init(NW_TinyDom_TextHandle_t* handle,
+                           NW_TinyDom_Parser_t* parser,
+                           NW_TinyTree_Offset_t offset);
+
+
+/** ----------------------------------------------------------------------- **
+    @typedef:     NW_TinyDom_Text
+
+    @synopsis:    Text item types are a subset of attribute value types.
+
+    @scope:       public
+    @type:        NW_TinyDom_AttrVal_t
+
+    @description: Text item types are a subset of attribute value types.
+ ** ----------------------------------------------------------------------- **/
+typedef NW_TinyDom_AttrVal_t NW_TinyDom_Text_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_TextHandle_iterate
+
+    @synopsis:    Text item iterator.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_TextHandle_t* handle
+                  The handle.
+
+       [out] NW_TinyDom_Text_t* item
+                  The returned text item.
+    @description: Iterate through the text items in a text element, calling
+                  the text handlers
+
+    @returns:     NW_TinyTree_Offset_t
+                  Offset into buffer or zero if no item returned.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Offset_t
+NW_TinyDom_TextHandle_iterate(NW_TinyDom_TextHandle_t* handle,
+                              NW_TinyDom_Text_t* item);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_getDocHeader
+
+    @synopsis:    Get the doc header from the tiny tree.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyTree_t* tree
+                  The tree.
+
+    @description: Get the doc header from the tiny tree.
+
+    @returns:     NW_WBXML_Document_t*
+                  Doc header or NULL if NULL tree.
+
+ ** ----------------------------------------------------------------------- **/
+NW_WBXML_Document_t*
+NW_TinyDom_getDocHeader(NW_TinyTree_t* tree);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_getParser
+
+    @synopsis:    Get a pointer to the dom parser from the tiny_tree.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyTree_t* tree
+                  The tree.
+
+    @description: Get a pointer to the dom parser from the tiny_tree.
+
+    @returns:     NW_TinyDom_Parser_t*
+                  default
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_TinyDom_Parser_t*
+NW_TinyDom_getParser(NW_TinyTree_t* tree);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_getTree
+
+    @synopsis:    Get a pointer to the dom tree from a tiny tree.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyTree_t* tree
+                  The tree.
+
+    @description: Get a pointer to the dom tree from a tiny tree.
+
+    @returns:     NW_TinyDom_Tree_t*
+                  POinter to the DOM tree or NULL if not found.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_TinyDom_Tree_t*
+NW_TinyDom_getTree(NW_TinyTree_t* tree);
+
+/* ----------------------------------------------------------------------- **
+   Dom write support methods: These are created as orphan nodes that
+   then need to be attached to the tree.
+** ----------------------------------------------------------------------- **/
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_createAttributeByToken
+
+    @synopsis:    Create attribute by token.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The DOM tree.
+
+       [in] NW_Uint16 token
+                  The token.
+
+       [in] NW_TinyDom_AttrVal_t* value
+                  The new attribute.
+
+    @description: Create attribute by token as an orphan node that
+                  then need to be attached to the tree.
+
+    @returns:     NW_TinyTree_Node_t*
+                  Pointer to the new node or NULL if not successful.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Node_t*
+NW_TinyDom_createAttributeByToken(NW_TinyDom_Tree_t* dom_tree,
+                                  NW_Uint16 token,
+                                  NW_TinyDom_AttrVal_t* value);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_createAttributeByName
+
+    @synopsis:    Create attribute by name.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The tree.
+
+       [in] NW_String_t* name
+                  The name.
+
+       [in] NW_TinyDom_AttrVal_t* value
+                  The new attribute.
+
+    @description: Create attribute by name as an orphan node that
+                  then need to be attached to the tree.
+
+    @returns:     NW_TinyTree_Node_t*
+                  Pointer to the new node or NULL if not successful.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Node_t*
+NW_TinyDom_createAttributeByName(NW_TinyDom_Tree_t* dom_tree,
+                                 NW_String_t* name,
+                                 NW_TinyDom_AttrVal_t* value);
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_initWithStartToken
+
+    @synopsis:    Initialize the handle with a start token.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttributeHandle_t* tinyHandle
+                  The handle.
+
+       [out] NW_TinyTree_Node_t** ppNode
+                  The tree node.
+
+       [in] NW_TinyDom_Parser_t* parser
+                  The parser.
+
+       [in] NW_Uint16 fqToken
+                  The token with page.
+
+    @description: Initialize the handle with a start token.
+
+    @returns:     NW_Status_t
+
+        [NW_STAT_SUCCESS]
+                  Success
+
+        [NW_STAT_FAILURE]
+                  A failure other than out-of-memory.
+
+        [NW_STAT_OUT_OF_MEMORY]
+                  Out of memory.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_AttributeHandle_initWithStartToken(NW_TinyDom_AttributeHandle_t* tinyHandle,
+                                              NW_TinyTree_Node_t** ppNode,
+                                              NW_TinyDom_Parser_t* parser,
+                                              NW_Uint16 fqToken);
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_AttributeHandle_addVal
+
+    @synopsis:    Append the attribute value to the attribute handle.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttributeHandle_t* tinyHandle
+                  The handle.
+
+       [in] NW_TinyTree_Node_t* node
+                  The tree node.
+
+       [in] NW_DOM_AttrVal_t* value
+                  The attribute value to append to handle
+
+    @description: Append the attribute value to the attribute handle.
+
+    @returns:     NW_Status_t
+
+        [NW_STAT_SUCCESS]
+                  Success
+
+        [NW_STAT_FAILURE]
+                  A failure other than out-of-memory.
+
+        [NW_STAT_OUT_OF_MEMORY]
+                  Out of memory.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_AttributeHandle_addVal(NW_TinyDom_AttributeHandle_t* tinyHandle,
+                                  NW_TinyTree_Node_t* node,
+                                  NW_TinyDom_AttrVal_t* val);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_createElementByToken
+
+    @synopsis:    Create element by token.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The tree.
+
+       [in] NW_Uint16 token
+                  The token.
+
+    @description: Create element by token as an orphan node that
+                  then need to be attached to the tree.
+
+    @returns:     NW_TinyTree_Node_t*
+                  Pointer to the new node or NULL if not successful.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Node_t*
+NW_TinyDom_createElementByToken(NW_TinyDom_Tree_t* dom_tree,
+                                NW_Uint16 token);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_createElementByName
+
+    @synopsis:    Create element by name.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The tree.
+
+       [in] NW_String_t* name
+                  The name.
+
+    @description: Create element by name as an orphan node that
+                  then need to be attached to the tree.
+
+    @returns:     NW_TinyTree_Node_t*
+                  Pointer to the new node or NULL if not successful.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Node_t*
+NW_TinyDom_createElementByName(NW_TinyDom_Tree_t* dom_tree,
+                               NW_String_t* name);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_createTextNode
+
+    @synopsis:    Create text node.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The tree.
+
+       [in] NW_TinyDom_Text_t* text
+                  The value.
+
+    @description: Create element by name as an orphan node that
+                  then needs to be attached to the tree.
+
+    @returns:     NW_TinyTree_Node_t*
+                  Pointer to the new node or NULL if not successful.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Node_t*
+NW_TinyDom_createTextNode(NW_TinyDom_Tree_t* dom_tree,
+                          NW_TinyDom_Text_t* text);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_addDataFromTextItem
+
+    @synopsis:    Adds data to a text node from a text item.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyTree_t* tinyTree
+                  The tree.
+
+       [in] NW_TinyDom_Tree_t* tinyDomTree
+                  The DOM tree.
+
+       [in] NW_TinyTree_Node_t* node
+                  The text node.
+
+       [in] NW_TinyTree_Text_t text
+                  The value.
+
+       [in] NW_Uint32 encoding
+                  The IANA MIBenum for the character encoding.
+
+    @description: Adds data to a text node from a text item.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Data added.
+
+       [NW_STAT_FAILURE]
+                  Data not added.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_addDataFromTextItem(NW_TinyTree_t* tinyTree,
+                               NW_TinyDom_Tree_t* tinyDomTree,
+                               NW_TinyTree_Node_t* node,
+                               NW_TinyDom_Text_t* val,
+                               NW_Uint32 encoding);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_Tree_create
+
+    @synopsis:    Create a new tree.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The DOM tree.
+
+       [in] NW_TinyDom_Parser_t* dom_parser
+                  The parser to associate with this tree.
+
+       [in] NW_WBXML_Document_t* doc
+                  The source document.
+
+       [in] NW_WBXML_Parser_t* parser
+                  The WBXML parser.
+
+       [in] NW_WBXML_Writer_t* writer
+                  Tree writer.
+
+       [in] NW_Uint16 init_node_count
+                  Initial allocation.
+
+       [in] NW_Bool enableStringTable
+                  Set to true for normal WBXML.  Set to false to disable
+                  writing from using a string table.
+
+    @description: Create a new tree.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Tree created.
+
+       [NW_STAT_FAILURE]
+                  Dictionary not found or root node not created.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_Tree_create(NW_TinyDom_Tree_t* dom_tree,
+                       NW_TinyDom_Parser_t* dom_parser,
+                       NW_WBXML_Document_t* doc,
+                       NW_WBXML_Parser_t* parser,
+                       NW_WBXML_Writer_t* writer,
+                       NW_Uint16 init_node_count,
+                       NW_Bool enableStringTable);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_writeDocHeader
+
+    @synopsis:    Write doc header.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_Tree_t* dom_tree
+                  The tree.
+
+       [in] NW_Uint8 version
+                  The version.
+
+       [in] NW_Uint32 publicid
+                  The dictionary public ID.
+
+       [in] NW_Uint32 encoding
+                  Character encoding.
+
+    @description: Write doc header.
+
+    @returns:     NW_TinyTree_Node_t*
+                  New node or NULL if not successful.
+
+ ** ----------------------------------------------------------------------- **/
+NW_TinyTree_Node_t*
+NW_TinyDom_writeDocHeader(NW_TinyDom_Tree_t* dom_tree,
+                                      NW_Uint8 version,
+                                      NW_Uint32 publicid,
+                                      NW_Uint32 encoding);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_TinyDom_removeAttrFromListNode
+
+    @synopsis:    Remove attribute from list node.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_TinyDom_AttrListHandle_t* h
+                  The handle.
+
+       [in] NW_Uint32 length
+                  Length of attribute.
+
+    @description: Remove attribute from list node.
+
+    @returns:     NW_Status_t
+                  Success of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_TinyDom_removeAttrFromListNode(NW_TinyDom_AttrListHandle_t* h,
+                                  NW_Uint32 length);
+
+void
+NW_TinyDom_setLastValid(NW_TinyDom_Tree_t* dom_tree, NW_Int32 lastValid);
+
+NW_Int32
+NW_TinyDom_getLastValid(NW_TinyDom_Tree_t* dom_tree);
+
+#ifdef __cplusplus
+} /* extern "C" { */
+#endif /* __cplusplus */
+
+
+#endif  /* NW_TINY_DOM_H */