xmlsrv_plat/cxml_library_api/inc/nw_wbxml_parse.h
branchRCL_3
changeset 20 889504eac4fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlsrv_plat/cxml_library_api/inc/nw_wbxml_parse.h	Tue Aug 31 17:02:56 2010 +0300
@@ -0,0 +1,971 @@
+/*
+* 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_WBXML
+
+    @synopsis:    default
+
+    @description: Wbxml token definitions
+
+ ** ----------------------------------------------------------------------- **/
+
+#ifndef NW_PARSER_WBXML_PARSE_H
+#define NW_PARSER_WBXML_PARSE_H
+
+#include <xml/cxml/cxml_proj.h>
+#include <xml/cxml/nw_wbxml_token.h>
+#include <xml/cxml/nw_wbxml_event.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_WBXML_CP_Registry_Entry
+
+    @synopsis:    Registry entry.
+
+    @scope:       public
+    @variables:
+       NW_Uint8 code_page
+                  The code page.
+
+       NW_Uint32 start_offset
+                  Start offset.
+
+    @description: Each entry must record if it is for tokens or attributes.
+                  A trick to encode this without extra memory relies on the
+                  use of two bytes in WBXML to encode a page switch.  With two 
+                  bytes one has an even offset and one an odd offset.  We pick
+                  the even if it is a tag page and the odd offset if it is an 
+                  attribute page. 
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_WBXML_CP_Registry_Entry_s{
+  NW_Uint8 code_page;
+  NW_Uint32 start_offset;
+}NW_WBXML_CP_Registry_Entry_t;
+
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_WBXML_CP_Registry
+
+    @synopsis:    The code page registry.
+
+    @scope:       public
+    @variables:
+       NW_WBXML_CP_Registry_Entry_t* storage
+                  Storage array.
+
+       NW_WBXML_CP_Registry_Entry_t* current
+                  Current entry.
+
+       NW_Int32 count
+                  Entry count.
+
+    @description: The code page registry.
+ ** ----------------------------------------------------------------------- **/
+typedef struct NW_WBXML_CP_Registry_s {
+  NW_WBXML_CP_Registry_Entry_t* storage;
+  NW_WBXML_CP_Registry_Entry_t* current;
+  NW_Int32 count;
+  // WLIU_DEBUG:NW_Int32 realcount;
+} NW_WBXML_CP_Registry_t;
+
+/* ----------------------------------------------------------------------- **
+   TO DO: the NW_Byte code pointer needs to be removed and put into a
+   derived class in the buffer implementation 
+** ----------------------------------------------------------------------- **/
+
+/** ----------------------------------------------------------------------- **
+    @struct:      NW_WBXML_Parser
+
+    @synopsis:    The parser.
+
+    @scope:       public
+    @variables:
+       const struct NW_WBXML_EventHandler_s* handler
+                  Event handlers.
+
+       void* context
+                  Context to pass to event handlers.
+
+       NW_Uint32 flags
+                  The flags.
+
+       NW_Uint32 state
+                  The state.
+
+       NW_Uint8 tag_code_page
+                  The tag code page.
+
+       NW_Uint8 attribute_code_page
+                  The attribute code page.
+
+       NW_WBXML_CP_Registry_t cp_registry
+                  The code page registry.
+
+       NW_Uint32 dictionary
+                  1-based index into dictionary table.
+
+       NW_WBXML_Document_t* doc
+                  The document.
+
+       NW_Uint32 offset
+                  Offset into bytecode.
+
+       NW_Uint32 left
+                  Byte code left after current pointer.
+
+       NW_Status_t status
+                  Parser status from CallBacks.
+
+       NW_Byte* p
+                  Byte code pointer.
+
+       NW_Uint8 ext_t_not_table_index
+                  A boolean: whether the associated index with
+                  EXT_T_[0,1,2] refs a string table or not, defaults
+                  to 0 meaning use string table, 1 means associated
+                  integer with EXT_T_[0,1,2] is not a string table
+                  index
+
+    @description: The parser.
+ ** ----------------------------------------------------------------------- **/
+struct NW_WBXML_Parser_s {
+  const struct NW_WBXML_EventHandler_s* handler; /* Event handlers */
+  void* context;                           /* Context to pass to event handlers */
+  NW_Uint32 flags;                         
+  NW_Uint32 state;
+  NW_Uint8 tag_code_page;
+  NW_Uint8 attribute_code_page;
+  NW_WBXML_CP_Registry_t cp_registry;
+  NW_Uint32 dictionary;                     /* 1-based index into dictionary table */
+  NW_WBXML_Document_t* doc;
+  NW_Uint32 offset;                          /*Offset into bytecode */
+  NW_Uint32 left;                            /* Byte code left after current pointer */
+  NW_Status_t status;                       /* Parser status from CallBacks */
+  NW_Byte* p;                               /*Byte code pointer */
+  NW_Uint32 recursiveCallCnt;               /* counts "element parse/content parse" recursive calls*/
+  /* a boolean, whether EXT_T_[0,1,2] refs a string table or not,
+     defaults to 0 meaning use string table, 1 means associated
+     integer with EXT_T_[0,1,2] is not a string table index */
+  NW_Uint8 ext_t_not_table_index;
+//  WLIU_DEBUG: NW_Int32 lastValid;
+};
+
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_newInPlace
+
+    @synopsis:    Parser initialization 
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parser initialization 
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C void
+NW_WBXML_Parser_newInPlace (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_reset
+
+    @synopsis:    Reset the parser.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Reset the parser.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_WBXML_Parser_reset (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_delete
+
+    @synopsis:    Destructor.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Destructor.
+
+ ** ----------------------------------------------------------------------- **/
+void
+NW_WBXML_Parser_delete (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_addCPRegistry
+
+    @synopsis:    Add CP registry.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_WBXML_CP_Registry_Entry_t* storage
+                  The entries.
+
+       [in] NW_Int32 count
+                  The number of entries.
+
+    @description: Create an uninitialized code page registry. As long
+                  as the registry is not created, it will be
+                  ignored. Once it has been created, the parser will
+                  check the REGISTRY_INIT flag. If this is not set, the
+                  registry will be initialized as the parser runs. If
+                  this is set, then the registry will be consulted when
+                  updating the offset.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_addCPRegistry(NW_WBXML_Parser_t* parser,
+                              NW_WBXML_CP_Registry_Entry_t* storage,
+                              NW_Int32 count);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_registerHandler
+
+    @synopsis:    Register handler.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] const struct NW_WBXML_EventHandler_s* handler
+                  The handler.
+
+       [in] void* context
+                  The context.
+
+    @description: Cache the parser's event handler and context.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Status_t
+NW_WBXML_Parser_registerHandler(NW_WBXML_Parser_t* parser,
+                                const struct NW_WBXML_EventHandler_s* handler,
+                                void* context);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_saveContext
+
+    @synopsis:    Save parser context.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [out] NW_WBXML_Parser_t* context
+                  The context.
+
+    @description: Save/restore context can be used if the parser is to be
+                  invoked reentrantly (in a callback).  Normally this should
+                  be avoided since the only really safe way to do this is to
+                  save the whole parser object on the stack. 
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_saveContext(NW_WBXML_Parser_t* parser,
+                            NW_WBXML_Parser_t* context);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_restoreContext
+
+    @synopsis:    Restore parser context.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_WBXML_Parser_t* context
+                  The context.
+
+    @description: Restore parser context. See description for saveContext().
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_restoreContext(NW_WBXML_Parser_t* parser, 
+                               NW_WBXML_Parser_t* context);
+
+/* ----------------------------------------------------------------------- **
+   Get and set methods
+** ----------------------------------------------------------------------- **/
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_getOffset
+
+    @synopsis:    Get offset.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Get offset.
+
+    @returns:     NW_Uint32
+                  Read offset.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Uint32 
+NW_WBXML_Parser_getOffset(NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_setOffset
+
+    @synopsis:    Set offset.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_Uint32 offset
+                  New offset.
+
+    @description: Set offset.
+
+    @returns:     NW_Int32
+                  Offset or -1 if out of range.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Int32 
+NW_WBXML_Parser_setOffset(NW_WBXML_Parser_t* parser, 
+                          NW_Uint32 offset);  
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_setTagCodepage
+
+    @synopsis:    Set tag codepage.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_Uint8 page
+                  The page.
+
+    @description: Set tag codepage.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_setTagCodepage(NW_WBXML_Parser_t* parser, 
+                               NW_Uint8 page);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_getTagCodepage
+
+    @synopsis:    Get tag codepage.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Get tag codepage.
+
+    @returns:     NW_Uint8
+                  The code page.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Uint8
+NW_WBXML_Parser_getTagCodepage(NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_setAttrCodepage
+
+    @synopsis:    Set attribute codepage.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_Uint8 page
+                  The code page.
+
+    @description: Set attribute codepage.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_setAttrCodepage(NW_WBXML_Parser_t* parser, 
+                                NW_Uint8 page);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_getAttrCodepage
+
+    @synopsis:    Get attribute codepage.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Get attribute codepage.
+
+    @returns:     NW_Uint8
+                  Code page.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Uint8
+NW_WBXML_Parser_getAttrCodepage(NW_WBXML_Parser_t* parser);
+
+
+/* ----------------------------------------------------------------------- **
+    Parse document elements 
+** ----------------------------------------------------------------------- **/
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_tagNameParse
+
+    @synopsis:    Tag name parse.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse the token and name part of a tag. This generates a
+                  fully qualified token.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Tag name parsed.
+
+       [NW_STAT_WBXML_HAS_ATTRIBUTES]
+                  Has attributes.
+
+       [NW_STAT_WBXML_HAS_ATTR_CONTENT]
+                  Has attribute content.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_tagNameParse(NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_attributeListIterate
+
+    @synopsis:    Parse an attribute list.
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse an attribute list
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+       [NW_STAT_WBXML_ITERATE_DONE]
+                  Done.
+
+       [NW_STAT_WBXML_ITERATE_MORE]
+                  More to do.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t 
+NW_WBXML_Parser_attributeListIterate (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_attributeValsIterate
+
+    @synopsis:    Parse an attribute value list.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse an attribute value list.
+
+    @returns:     NW_Status_t 
+                  Status of operation.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+       [NW_STAT_WBXML_ITERATE_DONE]
+                  Done.
+
+       [NW_STAT_WBXML_ITERATE_MORE]
+                  More to do.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t 
+NW_WBXML_Parser_attributeValsIterate (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_attributeNameParse
+
+    @synopsis:    Parse an attribute.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse an attribute.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Attribute parsed.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t 
+NW_WBXML_Parser_attributeNameParse (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_textIterate
+
+    @synopsis:    Parse text.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse text.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+       [NW_STAT_WBXML_ITERATE_DONE]
+                  Done.
+
+       [NW_STAT_WBXML_ITERATE_MORE]
+                  More to do.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_textIterate(NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_parser_attributeListIterate
+
+    @synopsis:    Parse an attribute list.
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse an attribute list.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+       [NW_STAT_WBXML_ITERATE_DONE]
+                  Done.
+
+       [NW_STAT_WBXML_ITERATE_MORE]
+                  More to do.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_parser_attributeListIterate(NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_parser_attributeValsIterate
+
+    @synopsis:    Parse attribute values.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse attribute values.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+       [NW_STAT_WBXML_ITERATE_DONE]
+                  Done.
+
+       [NW_STAT_WBXML_ITERATE_MORE]
+                  More to do.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t 
+NW_WBXML_parser_attributeValsIterate (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_attributeParse
+
+    @synopsis:    Attribute parse.
+
+    @scope:       public
+
+    @parameters:
+       [in] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Attribute parse.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Done.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_attributeParse(NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_contentParse
+
+    @synopsis:    Parse content.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+    @description: Parse content.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Done.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_contentParse (NW_WBXML_Parser_t* parser);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_extensionParse
+
+    @synopsis:    Parse extension.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_Int32 token_state
+                  Token state.
+
+    @description: Parse extension.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Done.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_extensionParse (NW_WBXML_Parser_t* parser,
+                                NW_Int32 token_state);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_opaqueParse
+
+    @synopsis:    Parse opaque data.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_Int32 token_state
+                  Token state.
+
+    @description: Parse opaque data.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Done.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_opaqueParse (NW_WBXML_Parser_t* parser, 
+                             NW_Int32 token_state);
+
+/* ----------------------------------------------------------------------- **
+   TODO READ_WRITE only? 
+** ----------------------------------------------------------------------- **/
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_setBuffer
+
+    @synopsis:    Sets parser to use a buffer without parsing it.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_WBXML_Document_t* doc
+                  The document.
+
+       [in] NW_Byte* buf
+                  The buffer.
+
+       [in] NW_Uint32 bufsize
+                  The size of the buffer.
+
+    @description: This method sets the parser to use a buffer without
+                  actually parsing it.  This is used by clients who want
+                  to create a tree from scratch without parsing a 
+                  document. This requires that doc be initialized with
+                  any document type and charset and that the parser be 
+                  initialized.  This should leave the parser in the same
+                  state as NW_WBXML_Parser_parserBuffer() followed by
+                  NW_WBXML_Parser_reintialize().  
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_setBuffer (NW_WBXML_Parser_t* parser, 
+                           NW_WBXML_Document_t* doc,
+                           NW_Byte* buf,
+                           NW_Uint32 bufsize);
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_resetBuffer
+
+    @synopsis:    Reset buffer.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_Byte* buff
+                  The buffer.
+
+       [in] NW_Uint32 buffsize
+                  The size of the buffer.
+
+    @description: Reset the parser buffer without resetting the doc.  
+                  This is more efficient when, for example, the buffer 
+                  gets resized due to a reallocation.
+
+    @returns:     NW_Status_t
+                  Status of operation.
+
+       [NW_STAT_SUCCESS]
+                  Always returns success.
+
+ ** ----------------------------------------------------------------------- **/
+NW_Status_t
+NW_WBXML_Parser_resetBuffer(NW_WBXML_Parser_t* parser, 
+                            NW_Byte* buff, 
+                            NW_Uint32 buffsize);
+
+/* ----------------------------------------------------------------------- **
+   TODO: Move to parser buffer header?
+** ----------------------------------------------------------------------- **/
+
+
+/** ----------------------------------------------------------------------- **
+    @function:    NW_WBXML_Parser_parseBuffer
+
+    @synopsis:    Parse buffer.
+
+    @scope:       public
+
+    @parameters:
+       [in-out] NW_WBXML_Parser_t* parser
+                  The parser.
+
+       [in] NW_WBXML_Document_t* doc
+                  The document.
+
+       [in] NW_Byte* buf
+                  The buffer.
+
+       [in] NW_Uint32 bufsize
+                  The size of the buffer.
+
+    @description: Parse document from a buffer.  
+
+    @returns:     NW_Status_t
+                  Status of the operation.
+
+       [NW_STAT_SUCCESS]
+                  Done.
+
+       [NW_STAT_WBXML_ERROR_BYTECODE]
+                  Parse error.
+
+       [NW_STAT_OUT_OF_MEMORY]
+                  Out of memory.
+
+       [NW_STAT_BAD_INPUT_PARAM]
+                  Requird parameter is NULL.
+
+       [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED]
+                  Invalid character set.
+
+ ** ----------------------------------------------------------------------- **/
+IMPORT_C NW_Status_t 
+NW_WBXML_Parser_parseBuffer (NW_WBXML_Parser_t* parser,
+                             NW_WBXML_Document_t* doc,
+                             NW_Byte* buf,
+                             NW_Uint32 bufsize);
+
+#ifdef __cplusplus
+} /* extern "C" { */
+#endif /* __cplusplus */
+
+#endif  /* NW_PARSER_WBXML_PARSE_H */