diff -r 6bcc0aa4be39 -r 889504eac4fb xml/cxmllibrary/src/encoder/src/tinydom2wbxml.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/cxmllibrary/src/encoder/src/tinydom2wbxml.c Tue Aug 31 17:02:56 2010 +0300 @@ -0,0 +1,280 @@ +/* +* 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: +* +*/ + + + + +/***************************************************************** +** File: tinydom2wbxml.c +** +** Description: maps TinyDom types onto WBXMLWriter functions +*****************************************************************/ + +#include "cxml_internal.h" +#include "nw_encoder_tinydom2wbxml.h" +#include + +/* +Writes an AttrVal +Return NW_STAT_BAD_INPUT_PARAM + NW_STAT_OUT_OF_MEMORY + NW_STAT_SUCCESS +*/ +NW_Status_t +NW_Encoder_writeAttrVal(NW_WBXML_Writer_t* pW, NW_DOM_AttrVal_t *val, NW_Uint32 encoding) +{ + if ((val == NULL) || (pW == NULL)) { + return NW_STAT_BAD_INPUT_PARAM; + } + + switch (NW_DOM_AttrVal_getType(val)) { + case NW_DOM_ATTR_VAL_STRING: + { + NW_String_t *string = &(val->component.string); + return NW_WBXML_Writer_Text(pW, encoding, + string->length, string->storage); + } + case NW_DOM_ATTR_VAL_EXTENSION: + { + NW_Uint8 t; /* 8-bit token */ + NW_String_t str; + NW_Status_t status; + + t = (NW_Uint8)(val->component.ext.token); + if ((t == NW_WBXML_EXT_0) + || (t == NW_WBXML_EXT_1) + || (t == NW_WBXML_EXT_2)) { + status + = NW_WBXML_Writer_Extension(pW, + (NW_Uint16)(val->component.ext.token), + 0, 0, NULL); + } else if ((t == NW_WBXML_EXT_T_0) + || (t == NW_WBXML_EXT_T_1) + || (t == NW_WBXML_EXT_T_2)) { + NW_ASSERT((val->component.ext.type + == NW_TINYDOM_EXTENSION_TYPE_NORMAL) + || (val->component.ext.type + == NW_TINYDOM_EXTENSION_TYPE_EXT_T_INTEGER)); + if (val->component.ext.type == NW_TINYDOM_EXTENSION_TYPE_NORMAL) { + NW_Uint16 token = NW_DOM_TextItem_getExtension(val, &str); + status + = NW_WBXML_Writer_ExtensionUseStringTable(pW, + token, + str.length, + str.storage); + } else { + status = NW_WBXML_Writer_Extension(pW, + (NW_Uint16)(val->component.ext.token), + val->component.ext.value.x, + 0, NULL); + } + } else if ((t == NW_WBXML_EXT_I_0) + || (t == NW_WBXML_EXT_I_1) + || (t == NW_WBXML_EXT_I_2)) { + NW_Uint16 token = NW_DOM_TextItem_getExtension(val, &str); + status = NW_WBXML_Writer_Extension(pW, token, + 0, str.length, str.storage); + } else { + status = NW_STAT_FAILURE; + } + return status; + } + case NW_DOM_ATTR_VAL_ENTITY: + { + NW_Uint32 entity = NW_DOM_TextItem_getEntity(val); + return NW_WBXML_Writer_Entity(pW, entity); + } + case NW_DOM_ATTR_VAL_OPAQUE: + { + NW_Uint32 length = 0; + NW_Byte* data = NW_DOM_AttrVal_getOpaque(val, &length); + return NW_WBXML_Writer_Opaque(pW, length, data); + } + case NW_DOM_ATTR_VAL_TOKEN: + { + NW_Uint16 fqToken = NW_DOM_AttrVal_getToken(val); + return NW_WBXML_Writer_AttributeToken(pW, fqToken); + } + default: + break; + } + + return NW_STAT_FAILURE; +} + +/* +Writes an attrFqToken with AttrVal +Return NW_STAT_BAD_INPUT_PARAM + NW_STAT_OUT_OF_MEMORY + NW_STAT_SUCCESS + NW_STAT_FAILURE +*/ +NW_Status_t +NW_Encoder_writeAttributeByToken(NW_WBXML_Writer_t* pW, + NW_Uint16 attrFqToken, + NW_TinyDom_AttrVal_t *val, + NW_Uint32 encoding) +{ + NW_Status_t s; + NW_Uint8 token = (NW_Uint8)(attrFqToken & NW_WBXML_MASK_TOKEN); + + if ((token == NW_WBXML_LITERAL) || (val == NULL) || (pW == NULL)) { + return NW_STAT_BAD_INPUT_PARAM; + } + + s = NW_WBXML_Writer_AttributeToken(pW, attrFqToken); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + + /* TODO: Talk to Shaun about it */ + if ((NW_DOM_AttrVal_getType(val) == NW_DOM_ATTR_VAL_TOKEN) && + (attrFqToken == val->component.value_token)) + {} + else{ + s = NW_Encoder_writeAttrVal(pW, val, encoding); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + } + + return NW_WBXML_Writer_End(pW); +} + +/* +Writes an Attribute by name plus AttrVal +Return NW_STAT_BAD_INPUT_PARAM + NW_STAT_OUT_OF_MEMORY + NW_STAT_SUCCESS + NW_STAT_FAILURE +*/ +NW_Status_t +NW_Encoder_writeAttributeByName(NW_WBXML_Writer_t* pW, + NW_String_t *attrName, + NW_TinyDom_AttrVal_t *val, + NW_Uint32 encoding) +{ + NW_Status_t s; + NW_Uint32 byteCount; + NW_Int32 charCount; + + if ((pW == NULL) || (attrName == NULL) || (val == NULL)) { + return NW_STAT_BAD_INPUT_PARAM; + } + + charCount = NW_String_charBuffGetLength(attrName->storage, + encoding, + &byteCount); + if (charCount < 0) { + return NW_STAT_BAD_INPUT_PARAM; + } + NW_ASSERT(byteCount == attrName->length); + s = NW_WBXML_Writer_AttributeNameString(pW, encoding, (NW_Uint32)charCount, + byteCount, attrName->storage); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + + s = NW_Encoder_writeAttrVal(pW, val, encoding); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + + return NW_WBXML_Writer_End(pW); +} + +/* +Writes an Element by token +Return NW_STAT_BAD_INPUT_PARAM + NW_STAT_OUT_OF_MEMORY + NW_STAT_SUCCESS +*/ +NW_Status_t +NW_Encoder_writeElementByToken(NW_WBXML_Writer_t* pW, + NW_Uint16 elementToken) +{ + NW_Status_t s; + NW_Uint32 ignoreIndex; + + if (pW == NULL) { + return NW_STAT_BAD_INPUT_PARAM; + } + s = NW_WBXML_Writer_TagToken(pW, elementToken, &ignoreIndex); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + + return NW_WBXML_Writer_End(pW); +} + +/* +Writes an Element +Return NW_STAT_BAD_INPUT_PARAM + NW_STAT_OUT_OF_MEMORY + NW_STAT_SUCCESS +*/ +NW_Status_t +NW_Encoder_writeElementByName(NW_WBXML_Writer_t* pW, + NW_String_t *elementName, + NW_Uint32 encoding) +{ + NW_Status_t s; + NW_Uint32 ignoreIndex; + NW_Uint32 byteCount; + NW_Int32 charCount; + + if ((elementName == NULL) || (pW == NULL)) { + return NW_STAT_BAD_INPUT_PARAM; + } + + charCount = NW_String_charBuffGetLength(elementName->storage, + encoding, + &byteCount); + if (charCount < 0) { + return NW_STAT_BAD_INPUT_PARAM; + } + NW_ASSERT(byteCount == elementName->length); + s = NW_WBXML_Writer_TagString(pW, encoding, (NW_Uint32)charCount, byteCount, + elementName->storage, &ignoreIndex); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + + return NW_WBXML_Writer_End(pW); +} + +/* +Writes a TextItem +Return NW_STAT_BAD_INPUT_PARAM + NW_STAT_OUT_OF_MEMORY + NW_STAT_SUCCESS +*/ +NW_Status_t +NW_Encoder_writeText(NW_WBXML_Writer_t* pW, + NW_TinyDom_Text_t *text, + NW_Uint32 encoding) +{ + NW_Status_t s; + s = NW_Encoder_writeAttrVal(pW, text, encoding); + if (NW_STAT_IS_FAILURE(s)) { + return s; + } + + return NW_WBXML_Writer_End(pW); +} + +