xml/libxml2libs/src/xmlengineutils/xmlengutils.cpp
changeset 0 e35f40988205
--- /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;
+    }