--- a/graphicsdeviceinterface/gdi/tgdi/TBiDi.h Wed Aug 25 08:17:25 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,280 +0,0 @@
-// Copyright (c) 2003-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 __TBIDI_H__
-#define __TBIDI_H__
-
-#include "TGraphicsHarness.h"
-
-
-inline TBool IsSupplementary(TUint aChar)
-/**
-@param aChar The 32-bit code point value of a Unicode character.
-
-@return True, if aChar is supplementary character; false, otherwise.
-*/
- {
- return (aChar > 0xFFFF);
- }
-
-inline TBool IsHighSurrogate(TText16 aInt16)
-/**
-@return True, if aText16 is high surrogate; false, otherwise.
-*/
- {
- return (aInt16 & 0xFC00) == 0xD800;
- }
-
-inline TBool IsLowSurrogate(TText16 aInt16)
-/**
-@return True, if aText16 is low surrogate; false, otherwise.
-*/
- {
- return (aInt16 & 0xFC00) == 0xDC00;
- }
-
-inline TUint JoinSurrogate(TText16 aHighSurrogate, TText16 aLowSurrogate)
-/**
-Combine a high surrogate and a low surrogate into a supplementary character.
-
-@return The 32-bit code point value of the generated Unicode supplementary
- character.
-*/
- {
- return ((aHighSurrogate - 0xD7F7) << 10) + aLowSurrogate;
- }
-
-inline TText16 GetHighSurrogate(TUint aChar)
-/**
-Retrieve the high surrogate of a supplementary character.
-
-@param aChar The 32-bit code point value of a Unicode character.
-
-@return High surrogate of aChar, if aChar is a supplementary character;
- aChar itself, if aChar is not a supplementary character.
-*/
- {
- return STATIC_CAST(TText16, 0xD7C0 + (aChar >> 10));
- }
-
-inline TText16 GetLowSurrogate(TUint aChar)
-/**
-Retrieve the low surrogate of a supplementary character.
-
-@param aChar The 32-bit code point value of a Unicode character.
-
-@return Low surrogate of aChar, if aChar is a supplementary character;
- zero, if aChar is not a supplementary character.
-*/
- {
- return STATIC_CAST(TText16, 0xDC00 | (aChar & 0x3FF));
- }
-
-void AppendCharacter(HBufC *aDes, TUint aChar);
-void AppendCharacter(TBuf<24> *aDes, TUint aChar);
-
-
-// Class to implement a wrapping iterator meant for extracting 16 bit characters
-// from a block of text
-// This class can handle surrogate pairs correctly.
-class TextIterator
- {
-public:
- TextIterator(const TText16* aData, const TInt aLength) :
- iData(aData), iLength(aLength), iIndex(0), iWrapped(EFalse), iCombineSurrogatePairs(ETrue)
- {
- }
- TextIterator(const TText16* aData, const TInt aLength, const TInt aIndex) :
- iData(aData), iLength(aLength), iIndex(aIndex), iWrapped(EFalse), iCombineSurrogatePairs(ETrue)
- {
- }
- TextIterator(const TText16* aData, const TInt aLength, const TInt aIndex, TBool aCombineSurrogatePairs) :
- iData(aData), iLength(aLength), iIndex(aIndex), iWrapped(EFalse), iCombineSurrogatePairs(aCombineSurrogatePairs)
- {
- }
- // Next character from data - wrap pointer to keep within data.
- // Get current char, then move the internal pointer forward to next char.
- TUint NextChar()
- {
- TUint ch = Char();
- if (iCombineSurrogatePairs && IsSupplementary(ch))
- iIndex += 2;
- else
- iIndex += 1;
- // wrap
- if (iIndex >= iLength)
- {
- iIndex = 0;
- iWrapped = ETrue;
- }
- return ch;
- }
- // Move the internal pointer backward, then return the char pointed by internal char.
- // Panic if iIndex already = 0.
- TUint PreviousChar()
- {
- ASSERT(iIndex > 0);
- iIndex--;
- if (iCombineSurrogatePairs && IsLowSurrogate(iData[iIndex]))
- {
- ASSERT(iIndex > 0);
- iIndex--;
- ASSERT(IsHighSurrogate(iData[iIndex]));
- }
- else if (iCombineSurrogatePairs && IsHighSurrogate(iData[iIndex]))
- {
- ASSERT(EFalse);
- }
- else
- {
- // do nothing
- }
- return Char();
- }
- //Reset the iterator to the original values
- void Reset()
- {
- iIndex = 0;
- iWrapped = EFalse;
- }
- void SetIndex(const TInt aIndex)
- {
- iIndex = aIndex;
- iWrapped = EFalse;
- }
- //Has the iterator wrapped back to the start of the buffer at least once?
- TBool Wrapped() const
- {
- return iWrapped;
- }
- //Where is the current buffer index?
- TInt Index() const
- {
- return iIndex;
- }
- //Return pointer to data
- const TText16* Ptr() const
- {
- return iData;
- }
- //Get length of data
- TInt Length() const
- {
- return iLength;
- }
- //Get character at current index
- TUint Char() const
- {
- TUint ch = 0xFFFF;
- TText16 i16 = iData[iIndex];
- if (iCombineSurrogatePairs && IsHighSurrogate(i16))
- {
- ASSERT(iIndex+1 < iLength);
- TText16 low = iData[iIndex+1];
- ch = JoinSurrogate(i16, low);
- }
- else if (iCombineSurrogatePairs && IsLowSurrogate(i16))
- {
- ASSERT(EFalse);
- }
- else
- {
- ch = i16;
- }
- return ch;
- }
- // Fill aBuffer with a char, fill at aIndex, guarded by aMaxIndex (excluded).
- // After return, aIndex points to the next position, if aUpdate_aIndex=ETrue.
- // aUpdate_aIndex: do you want to update the parameter aIndex?
- // aUpdate_iIndex: do you want to update the member variable iIndex?
- // aChar: [out] current char
- TBool NextCharInto(TDes &aBuffer, TInt &aIndex, TInt aMaxIndex=-1, TBool aUpdate_aIndex=ETrue, TBool aUpdate_iIndex=ETrue, TUint *aChar=NULL)
- {
- if (aMaxIndex < 0)
- aMaxIndex = aBuffer.Length();
- if (aIndex >= aMaxIndex)
- return EFalse;
-
- TUint ch = Char();
- if (iCombineSurrogatePairs && IsSupplementary(ch))
- {
- if (aIndex+1 >= aMaxIndex)
- return EFalse;
- aBuffer[aIndex] = GetHighSurrogate(ch);
- aBuffer[aIndex+1] = GetLowSurrogate(ch);
- if (aUpdate_aIndex)
- aIndex += 2;
- }
- else
- {
- aBuffer[aIndex] = (TText16)ch;
- if (aUpdate_aIndex)
- aIndex++;
- }
- if (aChar)
- *aChar = ch;
- if (aUpdate_iIndex)
- {
- if (iCombineSurrogatePairs && IsSupplementary(ch))
- iIndex += 2;
- else
- iIndex += 1;
- if (iIndex >= iLength)
- {
- iIndex = 0;
- iWrapped = ETrue;
- }
- }
- return ETrue;
- }
- // Fill aBuffer from aIndex to aMaxIndex (excluded).
- // aMaxIndex=-1 means fill to index=aBuffer.Length.
- // After return, aIndex points to the next position, if aUpdate_aIndex=ETrue.
- TBool FillInto(TDes &aBuffer, TInt &aIndex, TInt aMaxIndex=-1)
- {
- if (aMaxIndex == -1)
- aMaxIndex = aBuffer.Length();
- while (aIndex < aMaxIndex)
- {
- TBool b = NextCharInto(aBuffer, aIndex, aMaxIndex);
- if (!b)
- {
- return ETrue;
- }
- }
- return ETrue;
- }
-
-private:
- const TText16* iData;
- TInt iLength;
- TInt iIndex;
- TBool iWrapped;
- TBool iCombineSurrogatePairs; // ETrue = combine surrogates; EFalse = take single surrogate as character
- };
-
-class CTBiDiStep : public CTGraphicsStep
- {
-public:
- CTBiDiStep();
-protected:
- //from CTGraphicsStep
- virtual CTGraphicsBase* CreateTestL();
- };
-
-_LIT(KTBiDiStep,"TBiDi");
-
-
-#endif