--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/hed/src/TextReverse.cpp Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2003 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: Reverse ISO-8859-8 text
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <e32base.h>
+#include "textreverse.h"
+#include <BidiVisual.h>
+#include "nwx_settings.h"
+#include "nwx_statuscodeconvert.h"
+#include "BrsrStatusCodes.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+void ReverseTextL(NW_String_t* toString, NW_String_t* fromString)
+ {
+ const TInt additionalCharsLen = 4;
+ NW_ASSERT(toString != NULL);
+ NW_ASSERT(fromString != NULL);
+ // Get the storage we know it is UCS2 encoded
+ TUint16* stringToReverse = (TUint16*)NW_String_getStorage(fromString);
+ TUint stringLen = NW_String_getByteCount(fromString) / (sizeof (TUint16));
+ if (stringToReverse[stringLen - 1] == 0)
+ {
+ stringLen--;
+ }
+ if (stringLen > 0)
+ {
+ TPtrC fromStringPtr(stringToReverse, stringLen);
+ TUint16* reversedString = new(ELeave) TUint16 [stringLen + additionalCharsLen];
+ CleanupStack::PushL(reversedString);
+ TPtr reversedStringPtr(reversedString, stringLen + additionalCharsLen);
+
+ TBidirectionalState::TRunInfo aRunInfoArray;
+ TBidirectionalState::TRunInfo *mRunInfoArray = NULL;
+ TBidiLogicalToVisual *bdLtoV = new(ELeave) TBidiLogicalToVisual(fromStringPtr, &aRunInfoArray, 1);
+ TInt runArrayCount = bdLtoV->Reorder();
+ delete bdLtoV;
+
+ mRunInfoArray = new(ELeave) TBidirectionalState::TRunInfo [runArrayCount];
+ CleanupStack::PushL(mRunInfoArray);
+ bdLtoV = new TBidiLogicalToVisual(fromStringPtr, mRunInfoArray, runArrayCount);
+ CleanupStack::PushL(bdLtoV);
+ bdLtoV->Reorder();
+
+ bdLtoV->GetVisualLine(reversedStringPtr, 0, stringLen, 0xFFFF);
+ reversedStringPtr.ZeroTerminate();
+
+ if (StatusCodeConvert(NW_String_ucs2CharToString (toString, reversedString, HTTP_iso_10646_ucs_2)) != KBrsrSuccess)
+ {
+ User::Leave(KErrNoMemory);
+ }
+
+ CleanupStack::PopAndDestroy(3); // bdLtoV, mRunInfoArray, reversedString
+ }
+ else
+ {
+ // transfer ownership
+ NW_String_shallowCopy(toString, fromString);
+ NW_String_clearUserOwnsStorage(fromString);
+ }
+ }
+
+
+TBrowserStatusCode ReverseText(NW_String_t* string)
+ {
+ NW_ASSERT(string != NULL);
+ NW_String_t toString;
+ TBrowserStatusCode status = KBrsrSuccess;
+ // Try to reverse only iso-8859-8
+ if (NW_Settings_GetOriginalEncoding() == HTTP_iso_8859_8)
+ {
+ NW_String_initialize (&toString, NULL, 0);
+ TRAPD(ret, ReverseTextL(&toString, string));
+ if (ret != KErrNone)
+ {
+ status = KBrsrOutOfMemory;
+ }
+ else
+ {
+ //transfer ownership back to the original string
+ if (NW_String_getUserOwnsStorage(string))
+ {
+ NW_String_deleteStorage(string);
+ }
+
+ NW_String_shallowCopy(string, &toString);
+ NW_String_clearUserOwnsStorage(&toString);
+ }
+ }
+ return status;
+ }
+
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// End of File