xml/cxmllibrary/src/xmlp/src/Xmlp2Wbxml.c
branchRCL_3
changeset 33 604ca70b6235
parent 32 889504eac4fb
child 40 80a0ad972c63
--- a/xml/cxmllibrary/src/xmlp/src/Xmlp2Wbxml.c	Tue Aug 31 17:02:56 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1215 +0,0 @@
-/*
-* 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: 
-*
-*/
-
-#include <string.h>
-#include "cxml_internal.h"
-#include <xml/cxml/nw_encoder_wbxmlwriter.h>
-#include <xml/cxml/nw_xmlp_xmlparser.h>
-#include <xml/cxml/nw_xmlp_xmlp2wbxml.h>
-#include <xml/cxml/nw_encoder_stringtable.h>
-#include "cxml_xmlp_entity.h"
-
-
-typedef struct CXML_Encoding_String_s {
-   NW_Int8* charSetStr;
-   NW_Uint32   encodingVal;
-}CXML_Encoding_String_t;
-
-/* Number of encoding string supported */
-
-#define CXML_Encoding_Str_Num 5
-
-static
-const CXML_Encoding_String_t CXML_EncodingStr_Array[] = 
-{
- {(NW_Int8*) "utf-8", HTTP_utf_8 },
- {(NW_Int8*) "us-ascii", HTTP_us_ascii  },
- {(NW_Int8*) "iso-10646-ucs-2", HTTP_iso_10646_ucs_2 },
- {(NW_Int8*) "iso-8859-1", HTTP_iso_8859_1 },
- {(NW_Int8*) "utf-8", HTTP_utf_16}
-};
-
-typedef struct NW_XML_XmlpWbxmlEncoder_s
-{
-    NW_WBXML_Writer_t* pE;
-    /*
-    need access to last tag token to backpatch attribute and content flags
-    */
-    NW_Uint32 lastTagTokenIndex;
-    NW_Uint32 publicID; /* needed to pass to start callback */
-    NW_Uint32 encoding; /* needed to pass to start callback */
-
-} NW_XML_XmlpWbxmlEncoder_t;
-
-/* The following function finds the encoding in the XML declaration statement (if any). 
- * This function is called only when there is no BOM present and encoding is assumed 
- * ASCII/Latine-1.
- * e.g. <?xml version="1.0" encoding="iso-8859-1"?>, here XML Declaration has the encoding
- * of "iso-8859-1"
- */
-
-static NW_Bool NW_XML_FindEncoding(NW_Uint32 length, const unsigned char* pBuf, NW_Uint32* encodingVal)
-{
-
- NW_Bool s = NW_FALSE;
- NW_Uint8* sourceWalker     = NULL;
- NW_Uint8* encodingStart    = NULL;
- NW_Uint8* encodingValStart = NULL;
- NW_Uint8* endXMLDecl       = NULL;
- NW_Uint32  xmlDeclLen       = 0;
- NW_Uint32  encodingValLen   = 0;
- NW_Uint32 i = 0;
-
- /* Look for end of the XML Declration statement */
-
- endXMLDecl = (NW_Uint8*) strstr((char*) pBuf+2, "?>");
-
- if(endXMLDecl)
- {
-  xmlDeclLen =  endXMLDecl -  pBuf;
-
-
-     if(xmlDeclLen < length)
-     {
-      encodingStart = (NW_Uint8*) strstr(( (char*)(pBuf+2) ),"encoding");
-
-      /*Move the pointer after the encoding */
-
-
-       if(encodingStart)
-       {
-        sourceWalker = encodingStart + 8;
-
-        /*Skip any space */
-        while(CXML_Str_Isspace((NW_Ucs2)(*sourceWalker & 0xffff) ) ) 
-        {
-            sourceWalker++;
-        }
-
-        if(*sourceWalker == '=')
-        {
-            sourceWalker++;
-            while(CXML_Str_Isspace((NW_Ucs2)(*sourceWalker & 0xffff) ) )
-            {
-                sourceWalker++;
-            }
-        }
-
-        if( (*sourceWalker == '\'') || (*sourceWalker == '\"') )
-        {
-         sourceWalker++;
-        }
-
-		 encodingValStart = sourceWalker;
-
-		/* End the Encoding value consume if one of following condition is reached:
-		 * 1) Closing quote has encounted.
-		 * 2) '>' closing tag has encountered
-		 * 3) Space had encounted
-		 * 4) '?' has encounded.
-		 * There is possibilty of some arguments after encoding like following:
-		 * <?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
-		 */
-
-		while( (*sourceWalker != '\'') && (*sourceWalker != '\"') &&
-			   (*sourceWalker != '>') && (*sourceWalker != '?') )
-		{
-		 encodingValLen++;
-		 sourceWalker++;
-		}
-
-        for(i=0; i < CXML_Encoding_Str_Num; i++)
-	    {
-         if(!strncmp((char*) encodingValStart, (char*) CXML_EncodingStr_Array[i].charSetStr,encodingValLen))
-         {
-          *encodingVal = CXML_EncodingStr_Array[i].encodingVal;
-          s = NW_TRUE;
-          break;
-         }
-        }/*end for() */
-       }/*end if(encodingStart)*/
-     }/*end if(xmlDeclLen < length)*/
- }/*end if(endXMLDecl)*/
-
- return s;
-}/*end NW_XML_FindEncoding()*/
-
-NW_Status_t
-EXPORT_C
-NW_XML_ComputeEncoding(NW_Uint32 length, const unsigned char* pBuf,
-                             NW_Uint32* pEncoding, NW_Endianness_t* pEndianness)
-{
-    NW_Uint32 c0, c1, c2, c3;
-    if (length < 4)
-    {
-        return NW_STAT_FAILURE;
-    }
-    c0 = pBuf[0];
-    c1 = pBuf[1];
-    c2 = pBuf[2];
-    c3 = pBuf[3];
-    if (c0 == 0 && c1 == 0 && c2 == 0xfe && c3 == 0xff)
-    {
-        *pEncoding = 1001; /* ISO-10646-UCS-4 IANA MIBenum */
-        *pEndianness = NW_BIG_ENDIAN;
-    }
-    else if (c0 == 0 && c1 == 0 && c2 == 0 && c3 == 0x3c)
-    {
-        *pEncoding = 1001; /* ISO-10646-UCS-4 IANA MIBenum */
-        *pEndianness = NW_BIG_ENDIAN;
-    }
-    else if (c0 == 0xff && c1 == 0xfe && c2 == 0 && c3 == 0)
-    {
-        *pEncoding = 1001; /* ISO-10646-UCS-4 IANA MIBenum */
-        *pEndianness = NW_LITTLE_ENDIAN;
-    }
-    else if (c0 == 0x3c && c1 == 0 && c2 == 0 && c3 == 0)
-    {
-        *pEncoding = 1001; /* ISO-10646-UCS-4 IANA MIBenum */
-        *pEndianness = NW_LITTLE_ENDIAN;
-    }
-    else if (c0 == 0xfe && c1 == 0xff && !(c2 == 0 && c3 == 0))
-    {
-        /* call it UCS-2 instead of UTF-16 IANA MIBenum, favor over
-           UTF-16BE 1013 */
-        *pEncoding = 1000;
-        *pEndianness = NW_BIG_ENDIAN;
-    }
-    else if (c0 == 0 && c1 == 0x3c && c2 == 0 && c3 == 0x3f)
-    {
-        /* could be UTF-16 but must read xml encoding decl to tell */
-        *pEncoding = 1000; /* UCS-2 IANA MIBenum */
-        *pEndianness = NW_BIG_ENDIAN;
-    }
-    else if (c0 == 0xff && c1 == 0xfe && !(c2 == 0 && c3 == 0))
-    {
-         /* call it UCS-2 instead of UTF-16 IANA MIBenum, favor over
-            UTF-16LE 1014 */
-        *pEncoding = 1000;
-        *pEndianness = NW_LITTLE_ENDIAN;
-    }
-    else if (c0 == 0x3c && c1 == 0 && c2 == 0x3f && c3 == 0)
-    {
-        /* could be UTF-16 but must read xml encoding decl to tell */
-        *pEncoding = 1000; /* UCS-2 IANA MIBenum */
-        *pEndianness = NW_LITTLE_ENDIAN;
-    }
-    else if (c0 == 0x3c && c1 == 0x3f && c2 == 0x78 && c3 == 0x6d)
-    {
-        /* could be anything with anything with an ASCII subset,
-        must read xml encoding decl to tell */
-        if( !NW_XML_FindEncoding (length,pBuf, pEncoding) )
-        {
-        /*If encoding is not in the XML Declaration */
-        *pEncoding = 106; /* UTF-8 IANA MIBenum, no endianness */
-        }
-        *pEndianness = NW_NATIVE_ENDIAN; 
-    }
-    else if (c0 == 0xef && c1 == 0xbb && c2 == 0xbf) /* c3 ignored */
-    {
-        *pEncoding = 106; /* UTF-8 IANA MIBenum, no endianness */
-        *pEndianness = NW_NATIVE_ENDIAN; /* Ha! */
-    }
-    else
-    {
-        /* default to UTF-8 and let the parser barf if it isn't */
-        *pEncoding = 106; /* UTF-8 IANA MIBenum, no endianness */
-        *pEndianness = NW_NATIVE_ENDIAN; /* Ha! */
-    }
-    return NW_STAT_SUCCESS;
-}
-
-
-
-/* When encoding is UCS-2, the parser has changed the byte order to
-native, however, the WBXML should be written in network (i.e., big
-endian) order.  The way this is done is to change the byte order
-in-place to network order, write the WBXML, and then put the byte
-order back to native in-place. */
-static
-void
-NW_XML_XmlpWbxmlEncoder_Ucs2NativeToNetworkByteOrder(NW_Uint32 byteCount,
-                                                     NW_Uint8* pBuf)
-{
-  NW_Uint32 i;
-  NW_Uint16 c_ucs2 = 1;
-
-  if (((NW_Uint8*)&c_ucs2)[0] == 1) { /* test for little endian host */
-    for (i = 0; i < byteCount; i += 2) {
-      (void)NW_Mem_memcpy(&c_ucs2, pBuf + i, sizeof(NW_Uint16));
-      pBuf[i] = (NW_Uint8)((c_ucs2 >> 8) & 0xff);
-      pBuf[i+1] = (NW_Uint8)(c_ucs2 & 0xff);
-    }
-  }
-}
-
-static
-void
-NW_XML_XmlpWbxmlEncoder_Ucs2NetworkToNativeByteOrder(NW_Uint32 byteCount,
-                                                     NW_Uint8* pBuf)
-{
-  NW_Uint32 i;
-  NW_Uint16 c_ucs2 = 1;
-
-  if (((NW_Uint8*)&c_ucs2)[0] == 1) { /* test for little endian host */
-    for (i = 0; i < byteCount; i += 2) {
-      /* this is a clever trick: pick up bytes in big endian order,
-         force the result to memory via taking address of result which
-         will put the 16-bits into native byte order, then copy the
-         result over the original bytes */
-      c_ucs2 = (NW_Uint16)((pBuf[i] << 8) | pBuf[i+1]);
-      (void)NW_Mem_memcpy(pBuf + i, &c_ucs2, sizeof(NW_Uint16));
-    }
-  }
-}
-
-/* end of line normalization replaces DOS or Mac style end of line
-with Unix style end of line.  If no normalization is needed, then on
-return *ppTextOut == pTextIn (i.e., no malloc was done), otherwise you
-need to call NW_Mem_Free(*ppTextOut) when you are done with the output
-NOTE: only works for native byte order!
-*/
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_EndOfLineNormalization(NW_Uint32 encoding,
-                                               NW_Uint32* pCharCount,
-                                               NW_Uint32* pByteCount,
-                                               const NW_Uint8* pTextIn,
-                                               NW_Uint8** ppTextOut)
-{
-  NW_Uint32 i;
-  NW_Uint32 j;
-  NW_Uint32 elideCharCount;
-  NW_Uint32 elideByteCount;
-  NW_Int32 byteCount;
-  NW_Ucs2 cUCS2;
-  NW_Uint8 crHit;
-  NW_Uint8 needsNormalization = 0;
-
-  /* the output is the input unless it must be normalized */
-  *ppTextOut = (NW_Uint8*)pTextIn;
-
-  /* scan to count #xD's that need translating */
-  elideCharCount = 0;
-  elideByteCount = 0;
-  crHit = 0;
-  for (i = 0; i < *pByteCount; i += (NW_Uint32)byteCount) {
-    byteCount = NW_String_readChar((NW_Uint8*)&(pTextIn[i]), &cUCS2, encoding);
-    if (byteCount < 0) {
-      return NW_STAT_FAILURE;
-    }
-    /* catch DOS 0xd 0xa eol */
-    if (crHit && (cUCS2 == 0xa)) {
-      elideCharCount++;
-      elideByteCount += (NW_Uint32)byteCount;
-    }
-    if (cUCS2 == 0xd) {
-      needsNormalization = 1;
-      crHit = 1;
-    } else {
-      crHit = 0;
-    }
-  }
-  if (needsNormalization) {
-    /* alloc a new string */
-    *ppTextOut = (NW_Uint8*) NW_Mem_Malloc(*pByteCount - elideByteCount);
-    if (*ppTextOut == NULL) {
-      *ppTextOut = (NW_Uint8*)pTextIn;
-      return NW_STAT_OUT_OF_MEMORY;
-    }
-
-    /* make a normalized copy of input */
-    crHit = 0;
-    j = 0;
-    for (i = 0; i < *pByteCount; i += (NW_Uint32)byteCount) {
-      byteCount = NW_String_readChar((NW_Uint8*)&(pTextIn[i]), &cUCS2, encoding);
-      if (byteCount < 0) {
-        NW_Mem_Free(*ppTextOut);
-        *ppTextOut = (NW_Uint8*)pTextIn;
-        return NW_STAT_FAILURE;
-      }
-      /* check that readChar isn't trying to read off end of buffer */
-      NW_ASSERT((i + byteCount - 1) < *pByteCount);
-      if (cUCS2 == 0xd) {
-        crHit = 1;
-        if (byteCount == 1) {
-          (*ppTextOut)[j++] = 0xa;
-        } else if (byteCount == 2) {
-          /* this looks odd but takes into account either endianess */
-          if (pTextIn[i] == 0xd) {
-            (*ppTextOut)[j++] = (NW_Uint8)0xa;
-            (*ppTextOut)[j++] = 0;
-          } else {
-            (*ppTextOut)[j++] = 0;
-            (*ppTextOut)[j++] = (NW_Uint8)0xa;
-          }
-        } else {
-          NW_ASSERT(byteCount <= 2); /* code bug, force debug stop here */
-          NW_Mem_Free(*ppTextOut);
-          *ppTextOut = (NW_Uint8*)pTextIn;
-          return NW_STAT_FAILURE;
-        }
-      } else {
-        if (!(crHit && (cUCS2 == 0xa))) {
-          (void)NW_Mem_memcpy(&((*ppTextOut)[j]), &(pTextIn[i]), (NW_Uint32)byteCount);
-          j += (NW_Uint32)byteCount;
-        }
-        crHit = 0;
-      }
-    }
-    *pByteCount -= elideByteCount;
-    *pCharCount -= elideCharCount;
-  }
-  return NW_STAT_SUCCESS;
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_New(NW_Uint32 publicID, NW_Uint32 encoding, void** ppV)
-{
-    NW_WBXML_Dictionary_t* pDictionary;
-    NW_XML_XmlpWbxmlEncoder_t** ppTE = (NW_XML_XmlpWbxmlEncoder_t**)ppV;
-    *ppTE = (NW_XML_XmlpWbxmlEncoder_t*) NW_Mem_Malloc(sizeof(NW_XML_XmlpWbxmlEncoder_t));
-    if (!*ppTE) {
-        return NW_STAT_OUT_OF_MEMORY;
-    }
-    (*ppTE)->lastTagTokenIndex = 0;
-    (*ppTE)->publicID = publicID;
-    (*ppTE)->encoding = encoding;
-    (*ppTE)->pE = (NW_WBXML_Writer_t*) NW_Mem_Malloc(sizeof(NW_WBXML_Writer_t));
-    if (!((*ppTE)->pE)) {
-        return NW_STAT_OUT_OF_MEMORY;
-    }
-    /* Note that we only have access to one dictionary and we
-    should really have two: one for tags and one for attributes. */
-    pDictionary = NW_WBXML_Dictionary_getByPublicId((*ppTE)->publicID);
-
-    if(  ( CXML_Additional_Feature_Supprted() & CXML_DTD_SUPPORT_ON) )
-    {
-     NW_Encoder_StringTable_t* strTable = NW_Encoder_StringTable_new();
-   
-
-     NW_WBXML_Writer_Initialize((*ppTE)->pE,
-                             0, NULL, NULL, /* no mem needed for sizing */
-                             pDictionary,
-							 pDictionary,
-                             NW_Encoder_StringTable_getStringTableOffset,
-							 NW_Encoder_StringTable_addToStringTable,
-                             strTable, 
-							 NW_Encoder_StringTable_StringTableIterateInit,
-							 NW_Encoder_StringTable_StringTableIterateNext,
-                             1 /* do sizing only */);
-    }
-    else
-    {
-
-    NW_WBXML_Writer_Initialize((*ppTE)->pE,
-                               0, NULL, NULL, /* no mem needed for sizing */
-                               pDictionary, pDictionary,
-                               NULL, NULL, NULL, NULL, NULL, /* string table stuff */
-                               1 /* do sizing only */);
-    }
-    return NW_STAT_SUCCESS;
-}
-
-static
-void
-NW_XML_XmlpWbxmlEncoder_SetToWrite(NW_XML_XmlpWbxmlEncoder_t* pTE,
-                                   NW_Uint32 byteLength, NW_Uint8* pBuf,
-                                   NW_WBXML_Writer_GrowBuf_t growBufCallback)
-{
-
-    if( ( CXML_Additional_Feature_Supprted() & CXML_DTD_SUPPORT_ON) )
-    {
-        NW_Encoder_StringTable_t* strTable = NW_Encoder_StringTable_new();
-   
-
-        NW_WBXML_Writer_Initialize(pTE->pE,
-                             byteLength, pBuf,
-                             growBufCallback,
-                             pTE->pE->pTagDictionary,
-							 pTE->pE->pAttributeDictionary,
-                             NW_Encoder_StringTable_getStringTableOffset,
-							 NW_Encoder_StringTable_addToStringTable,
-                             strTable, 
-							 NW_Encoder_StringTable_StringTableIterateInit,
-							 NW_Encoder_StringTable_StringTableIterateNext,
-                             0 /* don't do sizing, write */);
-    }
-   else
-    {
-    NW_WBXML_Writer_Initialize(pTE->pE,
-                               byteLength, pBuf,
-                               growBufCallback,
-                               pTE->pE->pTagDictionary,
-                               pTE->pE->pAttributeDictionary,
-                               NULL, NULL, NULL, NULL, NULL,  /* string table stuff */
-                               0 /* don't do sizing, write */);
-    }
-}
-
-void
-NW_XML_XmlpWbxmlEncoder_Delete(void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Mem_Free(pE); /* note that this doesn't free WBXML buf and string table. */
-    NW_Mem_Free(pTE);
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_StartDocument_CB(NW_XML_Reader_t* pT, void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-
-    NW_REQUIRED_PARAM(pT);
-
-    /* Note: We do not build a string table because it isn't clear if
-    it is worthwhile. */
-
-    return NW_WBXML_Writer_Header(pE, 3, pTE->publicID, pTE->encoding, 0);
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Tag_Start_CB(NW_XML_Reader_t* pT,
-                                     const NW_XML_Reader_Interval_t* pI_name,
-                                     void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Uint32 length;
-    NW_Uint32 nameByteLength;
-    NW_Uint8* pName;
-    NW_Status_t s;
-    if (!NW_XML_Reader_Interval_IsWellFormed(pI_name)) {
-        return NW_STAT_FAILURE;
-    }
-    length = pI_name->stop - pI_name->start;
-    nameByteLength = length;
-    s = NW_XML_Reader_DataAddressFromBuffer(pT, pI_name->start,
-                                         &nameByteLength,
-                                         &pName);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (nameByteLength != length) {
-        return NW_STAT_FAILURE;
-    }
-    length = pI_name->charStop - pI_name->charStart;
-    s = NW_WBXML_Writer_TagString(pE, pTE->encoding, length, nameByteLength,
-                            pName, &(pTE->lastTagTokenIndex));
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    /* default to content but erase if see empty tag end */
-    return NW_WBXML_Writer_TagSetContentFlag(pE, pTE->lastTagTokenIndex);
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Attr_Start_CB(NW_XML_Reader_t* pT,
-                                      const NW_XML_Reader_Interval_t* pI_name,
-                                      void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_REQUIRED_PARAM(pT);
-    NW_REQUIRED_PARAM(pI_name);
-    return NW_WBXML_Writer_TagSetAttributesFlag(pE, pTE->lastTagTokenIndex);
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Attr_VarVal_CB(NW_XML_Reader_t* pT,
-                                        const NW_XML_Reader_Interval_t* pI_name,
-                                        const NW_XML_Reader_Interval_t* pI_value,
-                                        void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Uint32 length;
-    NW_Uint32 nameLength;
-    NW_Uint8* pName;
-    NW_Uint32 valueByteLength;
-    NW_Uint32 valueCharCount;
-    NW_Uint8* pValue;
-    NW_Status_t s;
-
-    if (!NW_XML_Reader_Interval_IsWellFormed(pI_name)) {
-        return NW_STAT_FAILURE;
-    }
-
-    /* var name setup */
-    length = pI_name->stop - pI_name->start;
-    nameLength = length; /* byte length */
-    s = NW_XML_Reader_DataAddressFromBuffer(pT, pI_name->start,
-                                         &nameLength, &pName);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (nameLength != length) {
-        return NW_STAT_FAILURE;
-    }
-    nameLength = pI_name->charStop - pI_name->charStart; /* char count */
-
-    /* value setup */
-    length = pI_value->stop - pI_value->start;
-    valueByteLength = length;
-    s = NW_XML_Reader_DataAddressFromBuffer(pT, pI_value->start,
-                                         &valueByteLength, &pValue);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (valueByteLength != length) {
-        return NW_STAT_FAILURE;
-    }
-    valueCharCount = pI_value->charStop - pI_value->charStart;
-
-    if (pT->encoding == HTTP_iso_10646_ucs_2) {
-      NW_XML_XmlpWbxmlEncoder_Ucs2NativeToNetworkByteOrder(valueByteLength,
-                                                           pValue);
-    }
-    s = NW_WBXML_Writer_AttributeAndValue(pE, pTE->encoding, nameLength,
-                                          pName, valueCharCount,
-                                          valueByteLength, pValue);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (pT->encoding == HTTP_iso_10646_ucs_2) {
-      NW_XML_XmlpWbxmlEncoder_Ucs2NetworkToNativeByteOrder(valueByteLength,
-                                                           pValue);
-    }
-    return NW_STAT_SUCCESS;
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Attributes_End_CB(NW_XML_Reader_t* pT,
-                                          NW_Uint32 attributeCount, void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Status_t s;
-    NW_REQUIRED_PARAM(pT);
-    /* if there were any attributes, then must write end token */
-    if (attributeCount) {
-        s = NW_WBXML_Writer_End(pE);
-        if (NW_STAT_IS_FAILURE(s)) {
-            return s;
-        }
-    }
-    return NW_STAT_SUCCESS;
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_CoreTextHandler(NW_Uint32 encoding,
-                                        NW_Uint32 charCount,
-                                        NW_Uint32 byteLength,
-                                        NW_Uint8* pText,
-                                        NW_WBXML_Writer_t* pE)
-{
-    NW_Uint8* pNormalizedText;
-    NW_Status_t s;
-
-    s = NW_XML_XmlpWbxmlEncoder_EndOfLineNormalization(encoding,
-                                                       &charCount,
-                                                       &byteLength,
-                                                       pText,
-                                                       &pNormalizedText);
-    if (NW_STAT_IS_FAILURE(s)) {
-      return s;
-    }
-    if (encoding == HTTP_iso_10646_ucs_2) {
-      NW_XML_XmlpWbxmlEncoder_Ucs2NativeToNetworkByteOrder(byteLength,
-                                                           pNormalizedText);
-    }
-    s = NW_WBXML_Writer_Text(pE, encoding, byteLength, pNormalizedText);
-    if (NW_STAT_IS_FAILURE(s)) {
-      return s;
-    }
-    if (pText == pNormalizedText) {
-      if (encoding == HTTP_iso_10646_ucs_2) {
-        NW_XML_XmlpWbxmlEncoder_Ucs2NetworkToNativeByteOrder(byteLength,
-                                                             pNormalizedText);
-      }
-    } else {
-      NW_Mem_Free(pNormalizedText);
-    }
-    return NW_STAT_SUCCESS;
-}
-
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Content_CB(NW_XML_Reader_t* pT,
-                                   const NW_XML_Reader_Interval_t* pI_content,
-                                   void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Status_t s;
-    NW_Uint32 length;
-    NW_Uint32 byteLength;
-    NW_Uint32 charCount;
-    NW_Uint8* pContent;
-    NW_Uint8* pNormalizedContent;
-
-    if (!NW_XML_Reader_Interval_IsWellFormed(pI_content)) {
-        return NW_STAT_FAILURE;
-    }
-    length = pI_content->stop - pI_content->start;
-    byteLength = length;
-    s = NW_XML_Reader_DataAddressFromBuffer(pT, pI_content->start,
-                                            &byteLength,
-                                            &pContent);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (byteLength != length) {
-        return NW_STAT_FAILURE;
-    }
-    charCount = pI_content->charStop - pI_content->charStart;
-    s = NW_XML_XmlpWbxmlEncoder_EndOfLineNormalization(pT->encoding,
-                                                       &charCount,
-                                                       &byteLength,
-                                                       pContent,
-                                                       &pNormalizedContent);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (pT->encoding == HTTP_iso_10646_ucs_2) {
-      NW_XML_XmlpWbxmlEncoder_Ucs2NativeToNetworkByteOrder(byteLength,
-                                                           pNormalizedContent);
-    }
-    s = NW_WBXML_Writer_Text(pE, pT->encoding, byteLength, pNormalizedContent);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (pContent == pNormalizedContent) {
-      if (pT->encoding == HTTP_iso_10646_ucs_2) {
-        NW_XML_XmlpWbxmlEncoder_Ucs2NetworkToNativeByteOrder(byteLength,
-                                                             pNormalizedContent);
-      }
-    } else {
-      NW_Mem_Free(pNormalizedContent);
-    }
-    return NW_STAT_SUCCESS;
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Tag_End_CB(NW_XML_Reader_t* pT,
-                                   const NW_XML_Reader_Interval_t* pI_name,
-                                   NW_Uint32 emptyTagFlag, void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Status_t s;
-    NW_REQUIRED_PARAM(pT);
-    NW_REQUIRED_PARAM(pI_name);
-    if (emptyTagFlag) {
-        s = NW_WBXML_Writer_TagClearContentFlag(pE, pTE->lastTagTokenIndex);
-    } else {
-        s = NW_WBXML_Writer_End(pE);
-    }
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    return s;
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Cdata_CB(NW_XML_Reader_t* pT,
-                                 const NW_XML_Reader_Interval_t* pI_cdata,
-                                 void* pV)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Uint8* pText;
-    NW_Uint8* pQuotedText;
-    NW_Uint8* pSrc;
-    NW_Uint8* pDest;
-    NW_Uint32 encoding = pT->encoding;
-    NW_Uint32 length;
-    NW_Uint32 byteLength;
-    NW_Uint32 charCount;
-    NW_Uint32 ampCount;
-    NW_Uint32 i, j;
-    NW_Ucs2 cUCS2;
-    NW_Status_t s;
-
-    /* code only supports the following charset values */
-    NW_ASSERT((encoding == HTTP_us_ascii)
-              || (encoding == HTTP_iso_8859_1)
-              || (encoding == HTTP_utf_8)
-              || (encoding == HTTP_iso_10646_ucs_2));
-    
-    charCount = pI_cdata->charStop - pI_cdata->charStart;
-    length = pI_cdata->stop - pI_cdata->start;
-    if (length < 1) {
-      return NW_STAT_SUCCESS;
-    }
-    byteLength = length;
-    s = NW_XML_Reader_DataAddressFromBuffer(pT, pI_cdata->start,
-                                            &byteLength,
-                                            &pText);
-    if (NW_STAT_IS_FAILURE(s)) {
-      return s;
-    }
-    if (byteLength != length) {
-      return NW_STAT_FAILURE;
-    }
-
-    /* Cdata is not supposed to have any entity expansion done on it.
-       Since we don't alter the original document text in general, we
-       have done the entity expansion outside of cXML.  Therefore, we
-       must quote any ampersands in the Cdata to prevent later entity
-       expansion. */
-
-    /* count ampersands */
-    pSrc = pText;
-    ampCount = 0;
-    for (i = 0; i < charCount; i++) {
-      j = NW_String_readChar(pSrc, &cUCS2, pT->encoding);
-      pSrc += j;
-      /* don't need to check j < 1, text has already been validated */
-      if (cUCS2 == '&') {
-        ampCount++;
-      }
-    }
-
-    pQuotedText = pText;
-    if (ampCount) {
-      /* allocate a new buffer
-
-      need incremental length for: & => &amp;
-      start with single byte charset value */
-      ampCount *= 4;
-      /* double for ucs2 */
-      if (pT->encoding == HTTP_iso_10646_ucs_2) {
-        ampCount *= 2;
-      }
-      pQuotedText = (NW_Uint8*)NW_Mem_Malloc(byteLength + ampCount);
-      if (pQuotedText == NULL) {
-        return NW_STAT_OUT_OF_MEMORY;
-      }
-
-      /* copy and quote ampersands */
-      pSrc = pText;
-      pDest = pQuotedText;
-      for (i = 0; i < charCount; i++) {
-        j = NW_String_readChar(pSrc, &cUCS2, encoding);
-        /* don't need to check for byteCount < 1, text has already been
-           validated */
-        NW_Mem_memcpy(pDest, pSrc, j);
-        pSrc += j;
-        pDest += j;
-        if (cUCS2 == '&') {
-          if (encoding == HTTP_iso_10646_ucs_2) {
-            /* double byte */
-            *((NW_Uint16*)pDest) = 'a';
-            *((NW_Uint16*)(pDest + 2)) = 'm';
-            *((NW_Uint16*)(pDest + 4)) = 'p';
-            *((NW_Uint16*)(pDest + 6)) = ';';
-            pDest += 8;
-          } else {
-            /* single byte encodings */
-            NW_Mem_memcpy(pDest, "amp;", 4);
-            pDest += 4;
-          }
-        }
-      }
-      byteLength += ampCount;
-      if (pT->encoding == HTTP_iso_10646_ucs_2) {
-        charCount += (ampCount / 2);
-      } else {
-        charCount = byteLength;
-      }
-    }
-
-    /* output the text */
-    s = NW_XML_XmlpWbxmlEncoder_CoreTextHandler(pT->encoding,
-                                                charCount,
-                                                byteLength,
-                                                pQuotedText,
-                                                pE);
-    if (pQuotedText != pText) {
-      NW_Mem_Free(pQuotedText);
-    }
-    return s;
-}
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_EndDocument_CB(NW_XML_Reader_t* pT, void* pV)
-{
-    /* When debugging, this func provides a place to capture the final WBXML. */
-    NW_REQUIRED_PARAM(pT);
-    NW_REQUIRED_PARAM(pV);
-    return NW_STAT_SUCCESS;
-}
-
-
-/* Function to check the string table of encoder process. If the string table is
- * found and supported then keep a copy of this so that WBXML parser can populate 
- * its string table from this.
- */
-static 
-void NW_XML_StrTbl(struct NW_XML_Parser_EventCallbacks_s* eventCBs,
-                                                           void** WBXMLEncStrTbl)
-{
-  //Keep the copy of the WBXML string table, so that it can be added to the
-  //DOM later. 
-   if( (NW_Bool) (CXML_Additional_Feature_Supprted() & CXML_DTD_SUPPORT_ON) ) 
-   {
-     NW_Uint32 stringTableByteCount = 0;
-     NW_Encoder_StringTable_t* strTable = (NW_Encoder_StringTable_t*)
-           ((NW_XML_XmlpWbxmlEncoder_t*)eventCBs->pClientPointer)->pE->pStringTableObject;
-     if(strTable)
-     {
-       stringTableByteCount = NW_Encoder_StringTable_getTotalBytes(strTable);
-       if( (stringTableByteCount == 0) || (WBXMLEncStrTbl == NULL) )
-       {
-        //Empty Table
-        NW_Encoder_StringTable_delete(strTable);
-        if(WBXMLEncStrTbl)
-        {
-         *WBXMLEncStrTbl = NULL;
-        }
-       }
-       else
-       {
-        if(WBXMLEncStrTbl)
-        {
-        *WBXMLEncStrTbl = (void*) strTable;
-        }
-       }//end else
-    }//end if(strTable)
-     else
-     {
-      if(WBXMLEncStrTbl)
-        {
-         *WBXMLEncStrTbl = NULL;
-        }
-     }
-   }//end if((NW_Bool) CXML_Additional_Feature_Supprted() ) 
-   else
-   {
-    if(WBXMLEncStrTbl)
-    {
-     *WBXMLEncStrTbl = NULL;
-    }
-   }
- return;
-}/*NW_XML_StrTbl()*/
-
-
-//Write the entity content now. There are two possibilities for
-//entities.
-//
-// 1) If it is character or decimal or predefined entities. 
-//    In this case, intEntityValStr = NULL.
-//
-// 2) If it is "Internal Entity" then intEntityValStr != NULL.
-//     So, this is directly written to WBXML encoder as inline string.
-//    In this case, entityVal = 0;
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Entity_CB(NW_XML_Reader_t* pT,NW_Uint32 numEntity,
-                                   void* pV, CXML_Uint8* intEntityValStr)
-{
-    NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pW = pTE->pE;
-    NW_Status_t s = NW_STAT_FAILURE;
-
-    NW_REQUIRED_PARAM(pT);
-    NW_REQUIRED_PARAM(pV);
-
-    if(intEntityValStr == NULL)
-    {
-	 s = NW_WBXML_Writer_Entity(pW,numEntity);
-    }
-    else if( (intEntityValStr != NULL) && (numEntity == 0) )
-    {
-     NW_Uint32 valBufByteCnt = 0;
-     NW_Int32 valBufLen = NW_String_charBuffGetLength( (void*)intEntityValStr,
-                                                 pT->encoding,
-                                                 &valBufByteCnt);
-
-      /* Write internal entity as Inline string */
-
-      s = NW_WBXML_Writer_Text( pW, pT->encoding, valBufByteCnt, intEntityValStr);
-     
-    }/*end else if*/
-
-    return s;
-}/*end NW_XML_XmlpWbxmlEncoder_Entity_CB() */
-
-/* This is used for if Entity is there in the Attribute value */
-
-static
-NW_Status_t
-NW_XML_XmlpWbxmlEncoder_Entity_Attr_VarVal_CB(NW_XML_Reader_t* pT,
-                                        const NW_XML_Reader_Interval_t* pI_name,
-                                        NW_Uint8* pValue,
-										NW_Uint32 valueByteLength,
-                                        void* pV)
-{
-NW_XML_XmlpWbxmlEncoder_t* pTE = (NW_XML_XmlpWbxmlEncoder_t*)pV;
-    NW_WBXML_Writer_t* pE = pTE->pE;
-    NW_Uint32 length;
-    NW_Uint32 nameLength;
-	NW_Uint32 valueCharCount;
-    NW_Uint8* pName;
-    NW_Status_t s;
-
-    if (!NW_XML_Reader_Interval_IsWellFormed(pI_name)) {
-        return NW_STAT_FAILURE;
-    }
-
-    /* var name setup */
-    length = pI_name->stop - pI_name->start;
-    nameLength = length; /* byte length */
-    s = NW_XML_Reader_DataAddressFromBuffer(pT, pI_name->start,
-                                         &nameLength, &pName);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (nameLength != length) {
-        return NW_STAT_FAILURE;
-    }
-    nameLength = pI_name->charStop - pI_name->charStart; /* char count */
-
-    /* value setup */
-    valueCharCount = valueByteLength;
-    
-
-    if (pT->encoding == HTTP_iso_10646_ucs_2) {
-      NW_XML_XmlpWbxmlEncoder_Ucs2NativeToNetworkByteOrder(valueByteLength,
-                                                           pValue);
-    }
-    s = NW_WBXML_Writer_AttributeAndValue(pE, pTE->encoding, nameLength,
-                                          pName, valueCharCount,
-                                          valueByteLength, pValue);
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-    if (pT->encoding == HTTP_iso_10646_ucs_2) {
-      NW_XML_XmlpWbxmlEncoder_Ucs2NetworkToNativeByteOrder(valueByteLength,
-                                                           pValue);
-    }
-    return NW_STAT_SUCCESS;
-}/*end NW_XML_XmlpWbxmlEncoder_Entity_Attr_VarVal_CB(..)*/
-
-
-
-
-
-NW_Status_t
-NW_XML_XmlToWbxml(NW_Buffer_t* pInBuf, NW_Uint32 encoding, 
-                  NW_Buffer_t** ppOutBuf, NW_Uint32* line, 
-                  NW_Uint32 publicID, void** WBXMLEncStrTbl)
-{
-    NW_Status_t s;
-    NW_XML_Reader_t t;
-    NW_Uint8* pWbxmlBuf;
-    NW_Uint8* docStartAddress;
-    NW_Uint32 docByteLength;
-    NW_Uint32 wbxmlBufLength;
-    struct NW_XML_Parser_EventCallbacks_s wbxmlEncodeCallbacks;
-    NW_XML_XmlpWbxmlEncoder_t* ppTE = NULL;
-    NW_WBXML_Writer_t* pW = NULL;
-
-    NW_ASSERT( pInBuf != NULL );
-    NW_ASSERT( ppOutBuf != NULL );
-    NW_ASSERT( line != NULL );
-
-    *line = 0;
-    if (pInBuf->length == 0 || pInBuf->data == NULL) {
-      return NW_STAT_FAILURE;
-    }
-    /* For UTF-8 and UCS-2 handle BOM (byte order mark).  Also, for
-       UCS-2 handle network (big) to native byte order conversion. */
-    docByteLength = pInBuf->length;
-    docStartAddress = pInBuf->data;
-    if (encoding == HTTP_utf_8) {
-      /* look for BOM and remove if found */
-      if (docByteLength >= 3) {
-        if ((docStartAddress[0] == 0xef)
-            && (docStartAddress[1] == 0xbb)
-            && (docStartAddress[2] == 0xbf)) {
-          docByteLength -= 3;
-          docStartAddress += 3;
-        }
-      }
-    }
-    if (encoding == HTTP_iso_10646_ucs_2) {
-      /* WARNING: we are assuming network byte order (i.e., big) for
-         the input document */
-      /* verify the doc has an even number of bytes, check LSB != 1 */
-      if ((docByteLength & 1) == 1) {
-        return NW_STAT_FAILURE;
-      }
-
-      /* make a pass over the doc, forcing byte order to native byte order */
-      NW_XML_XmlpWbxmlEncoder_Ucs2NetworkToNativeByteOrder(docByteLength,
-                                                           docStartAddress);
-      /* now look for BOM and remove if found */
-      if (docByteLength >= 2) {
-        if (((docStartAddress[0] == 0xfe) && (docStartAddress[1] == 0xff))
-            || ((docStartAddress[0] == 0xff) && (docStartAddress[1] == 0xfe))) {
-          docByteLength -= 2;
-          docStartAddress += 2;
-        }
-      }
-    }
-    /* verify there is some doc remaining after BOM processing */
-    if (docByteLength == 0) {
-      return NW_STAT_FAILURE;
-    }
-
-    /* malloc the output buffer */
-    *ppOutBuf = (NW_Buffer_t*) NW_Mem_Malloc(sizeof(NW_Buffer_t));
-    if (!*ppOutBuf) {
-        return NW_STAT_OUT_OF_MEMORY;
-    }
-    (*ppOutBuf)->length = 0;
-    (*ppOutBuf)->allocatedLength = 0;
-    (*ppOutBuf)->data = NULL;
-
-    /* Null out all WBXML generation callback addresses. */
-    NW_Mem_memset(&wbxmlEncodeCallbacks, 0,
-                  sizeof(struct NW_XML_Parser_EventCallbacks_s));
-    /* Add in-use WBXML generation callbacks. */
-    wbxmlEncodeCallbacks.StartDocument_CB = NW_XML_XmlpWbxmlEncoder_StartDocument_CB;
-    wbxmlEncodeCallbacks.Tag_Start_CB = NW_XML_XmlpWbxmlEncoder_Tag_Start_CB;
-    wbxmlEncodeCallbacks.Attr_Start_CB = NW_XML_XmlpWbxmlEncoder_Attr_Start_CB;
-    wbxmlEncodeCallbacks.Attr_VarVal_CB = NW_XML_XmlpWbxmlEncoder_Attr_VarVal_CB;
-    wbxmlEncodeCallbacks.Attributes_End_CB = NW_XML_XmlpWbxmlEncoder_Attributes_End_CB;
-    wbxmlEncodeCallbacks.Tag_End_CB = NW_XML_XmlpWbxmlEncoder_Tag_End_CB;
-    wbxmlEncodeCallbacks.Content_CB = NW_XML_XmlpWbxmlEncoder_Content_CB;
-    wbxmlEncodeCallbacks.Cdata_CB = NW_XML_XmlpWbxmlEncoder_Cdata_CB;
-    wbxmlEncodeCallbacks.EndDocument_CB = NW_XML_XmlpWbxmlEncoder_EndDocument_CB;
-
-    wbxmlEncodeCallbacks.Entity_CB = NW_XML_XmlpWbxmlEncoder_Entity_CB;
-    wbxmlEncodeCallbacks.Attr_Entity_VarVal_CB = NW_XML_XmlpWbxmlEncoder_Entity_Attr_VarVal_CB;
-
-
-    /* The encoder contains a WBXML_Writer that defaults to a sizing pass. */
-    s = NW_XML_XmlpWbxmlEncoder_New(publicID, encoding,
-                                    &(wbxmlEncodeCallbacks.pClientPointer));
-    if (NW_STAT_IS_FAILURE(s)) {
-        return s;
-    }
-
-    ppTE = (NW_XML_XmlpWbxmlEncoder_t*)wbxmlEncodeCallbacks.pClientPointer;
-    pW   = (NW_WBXML_Writer_t*) ppTE->pE;
-
-    /* Hand the document text to the Reader in preparation for parsing. */
-    s = NW_XML_Reader_InitFromBuffer(&t, docByteLength, docStartAddress);
-    if (NW_STAT_IS_FAILURE(s)) {
-        NW_XML_XmlpWbxmlEncoder_Delete(wbxmlEncodeCallbacks.pClientPointer);
-        if(pW->pStringTableObject)
-        {
-         NW_Encoder_StringTable_delete(pW->pStringTableObject);
-        }
-        return s;
-    }
-    NW_XML_Reader_SetEncoding(&t, encoding);
-
-    /* Parse and do a sizing pass for the WBXML. */
-    s = NW_XML_Parse(&t, &wbxmlEncodeCallbacks);
-    if (NW_STAT_IS_FAILURE(s)) {
-        NW_Uint32 column;
-        NW_XML_Reader_GetLineColumn(&t, line, &column);
-        if(pW->pStringTableObject)
-        {
-         NW_Encoder_StringTable_delete(pW->pStringTableObject);
-        }
-        NW_XML_XmlpWbxmlEncoder_Delete(wbxmlEncodeCallbacks.pClientPointer);
-        return s;
-    }
-
-    /* If there is any string table data then free it after PASS-1 as
-     * PASS-2 will again store the data in this. The PASS-1 only calulate
-     * size of the WBXML buffer.
-     */
-
-    NW_Encoder_StringTable_delete((NW_Encoder_StringTable_t*)
-           ((NW_XML_XmlpWbxmlEncoder_t*)wbxmlEncodeCallbacks.pClientPointer)->pE->pStringTableObject);
-
-
-    /* Allocate buffer and reinitialize writer to write to buf. */
-    wbxmlBufLength = (((NW_XML_XmlpWbxmlEncoder_t*)
-                       wbxmlEncodeCallbacks.pClientPointer)->pE->index);
-    pWbxmlBuf = (NW_Uint8*) NW_Mem_Malloc(wbxmlBufLength);
-    if (!pWbxmlBuf) {
-        if(pW->pStringTableObject)
-        {
-         NW_Encoder_StringTable_delete(pW->pStringTableObject);
-        }
-        NW_XML_XmlpWbxmlEncoder_Delete(wbxmlEncodeCallbacks.pClientPointer);
-        return NW_STAT_OUT_OF_MEMORY;
-    }
-    NW_XML_XmlpWbxmlEncoder_SetToWrite((NW_XML_XmlpWbxmlEncoder_t*)
-                                       wbxmlEncodeCallbacks.pClientPointer,
-                                       wbxmlBufLength, pWbxmlBuf,
-                                       NULL /* no growth callback */);
-    /* Reregister the document text with the Reader in preparation for parsing. */
-    s = NW_XML_Reader_InitFromBuffer(&t, docByteLength, docStartAddress);
-    if (NW_STAT_IS_FAILURE(s)) {
-        if(pW->pStringTableObject)
-        {
-         NW_Encoder_StringTable_delete(pW->pStringTableObject);
-        }
-        NW_XML_XmlpWbxmlEncoder_Delete(wbxmlEncodeCallbacks.pClientPointer);
-        return s;
-    }
-    NW_XML_Reader_SetEncoding(&t, encoding);
-
-    /* Parse and generate WBXML. */
-    s = NW_XML_Parse(&t, &wbxmlEncodeCallbacks);
-    if (NW_STAT_IS_FAILURE(s)) {
-        NW_Uint32 column;
-        NW_XML_Reader_GetLineColumn(&t, line, &column);
-        if(pW->pStringTableObject)
-        {
-         NW_Encoder_StringTable_delete(pW->pStringTableObject);
-        }
-        NW_XML_XmlpWbxmlEncoder_Delete(wbxmlEncodeCallbacks.pClientPointer);
-        return s;
-    }
-
-    /* The string table  support check and initialize parameter accordingly. */
-     
-
-    NW_XML_StrTbl(&wbxmlEncodeCallbacks,WBXMLEncStrTbl);
-
-    NW_XML_XmlpWbxmlEncoder_Delete(wbxmlEncodeCallbacks.pClientPointer);
-    (*ppOutBuf)->length = wbxmlBufLength;
-    (*ppOutBuf)->allocatedLength = wbxmlBufLength;
-    (*ppOutBuf)->data = pWbxmlBuf;
-    return NW_STAT_SUCCESS;
-}
-
-