--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/libxml2libs/src/xmlengineutils/xmlengutils.cpp Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,76 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+// This file contains methods allow to change XmlChar to TDesC
+// and TDesC to XmlChar
+//
+
+#include <stdapis/libxml2/libxml2_globals.h>
+#include <stdapis/libxml2/libxml2_entities.h>
+
+#include <xml/utils/xmlengmem.h>
+
+#include <utf.h>
+#include <escapeutils.h>
+
+EXPORT_C char* XmlEngEscapeForXmlValueL(
+ const char* aUnescapedString )
+ {
+ xmlChar* res = xmlEncodeSpecialChars(NULL, (const xmlChar*)aUnescapedString);
+ if(aUnescapedString && !res)
+ {
+ OOM_HAPPENED;
+ }
+ return (char*)res;
+ }
+
+EXPORT_C char* XmlEngXmlCharFromDesL(
+ const TDesC& aDes ) // UTF-16 descriptor to convert into UTF-8 zero-terminated string
+ {
+ TUint len = ((aDes.Length() + 4) | 0x1F);
+ char* str = new(ELeave) char[len + 1];
+ TPtr8 utf8buf((TUint8*)str, 0, len);
+ TInt res = CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8buf, aDes);
+ if (res == 0)
+ {
+ str[utf8buf.Size()] = 0;
+ return str;
+ }
+ //the buffer size was not large enough:
+ //reallocate the larger buffer
+ const TInt maxSizeOfSymbol = 4;
+ len = len + res*maxSizeOfSymbol; // res contains number of non-converted UTF-16 characters
+ delete str;
+ str = new(ELeave) char[len + 1];
+ TPtr8 utf8buf2((TUint8*)str, 0, len);
+ res = CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8buf2, aDes);
+ if (res == 0)
+ {
+ str[utf8buf2.Size()] = 0;
+ return str;
+ }
+ delete str;
+ str = NULL;
+ User::Leave(KErrGeneral); // this should never happen;
+ return NULL;
+ }
+
+EXPORT_C char* XmlEngXmlCharFromDes8L(
+ const TDesC8& aDes )
+ {
+ TUint len = aDes.Length();
+ char* str = new(ELeave) char[len + 1];
+ memcpy(str, aDes.Ptr(), len);
+ str[len] = 0;
+ return str;
+ }