--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/gdi/sgdi/BidiCompact.h Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,93 @@
+// Copyright (c) 2002-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:
+//
+
+#ifndef BIDICOMPACT_H_
+#define BIDICOMPACT_H_
+
+#include <e32std.h>
+#include <bidi.h>
+
+class TRunInfoCompact
+/**
+Stores information about a run and how to re-order it.
+@internalTechnology
+*/
+ {
+public:
+ /** Describes text to be re-ordered.
+ @internalTechnology */
+ class TReorderingContext
+ {
+ public:
+ /** Where the logical-order text starts. */
+ const TText* iSource;
+ /** The start of the line. */
+ TInt iStart;
+ /** One past the end of the line. */
+ TInt iEnd;
+ /**
+ * Truncation character, if there is to be one on this line. Otherwise,
+ * 0xFFFF.
+ */
+ TChar iTruncation;
+ /** ETrue if the line must join at its beginning. */
+ TBool iJoinsAtStart;
+ /** ETrue if the line must join at its end. */
+ TBool iJoinsAtEnd;
+ };
+
+ /** How to re-order the run.
+ @internalTechnology */
+ enum TTypeFlags
+ {
+ /** Reverse the run, but not surrogate pairs or combining characters. */
+ EFRightToLeft = 0x80000000,
+ /** Simply reverse the run, do not check for surrogates or combiners. */
+ EFNoPairsNoCombiners = 0x40000000,
+ /** No mirrored characters are present. */
+ EFNoMirroredCharacters = 0x20000000
+ };
+
+ /** Sets up an empty run.
+ @internalTechnology */
+ TRunInfoCompact() : iStart(0), iLengthAndType(0) {}
+ TRunInfoCompact(TInt aStart, TInt aLength, TBool aReverse,
+ const TText* aText);
+ TRunInfoCompact(TInt aStart, TInt aLength, TBool aReverse);
+ TBool AddRun(const TRunInfoCompact& aToBeAdded);
+ TText* Reorder(TText* aDestination, const TReorderingContext& aContext) const;
+
+ /** @return The start of this run.
+ @internalTechnology */
+ TInt Start() const { return iStart; }
+
+ /**@return The length of this run.
+ @internalTechnology */
+ TInt Length() const { return static_cast<TInt>(iLengthAndType & 0x0FFFFFFF); }
+
+ /** @return The flags associated with this run.
+ @internalTechnology */
+ TInt TypeFlags() const { return iLengthAndType & 0xF0000000; }
+
+ static TInt Convert(TRunInfoCompact* aBuffer, const TDesC& aText,
+ const TBidirectionalState::TRunInfo* aRunArray, TInt aArraySize);
+ static TBool JoinBefore(const TText* aText, TInt aIndex);
+private:
+ TInt iStart;
+ TUint iLengthAndType;
+ };
+
+#endif
+