fontservices/textbase/sgdi/BidiCompact.h
changeset 45 662fa7de7023
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fontservices/textbase/sgdi/BidiCompact.h	Mon Jul 12 14:38:26 2010 +0800
@@ -0,0 +1,93 @@
+// Copyright (c) 2002-2010 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
+