diff -r 2bd88482bfe5 -r 6a1564a2f3e6 graphicsdeviceinterface/gdi/sgdi/BidiVisual.cpp --- a/graphicsdeviceinterface/gdi/sgdi/BidiVisual.cpp Thu Sep 02 21:50:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -// 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: -// - -#include "BidiVisual.h" -#include "BidiCopy.h" -#include "BidiTextImp.h" -#include "BidiCompact.h" - -extern void BidiPanic(TInt aError); - -/** Construct the class with a full paragraph of text and the run array to be used -to hold all the runs. - -@param aText The text to be analyzed. This must not be de-allocated until -all operations on it through this class have been completed. -@param aRightToLeft Paragraph directionality. -@param aRunInfoArray The array to be used to hold the run information. This -must not be de-allocated until all operations on it through this class have -been completed. Ownership is not passed. -@param aRunInfoLength The number of TRunInfo<\code> objects in aRunInfoArray. */ -EXPORT_C TBidiLogicalToVisual::TBidiLogicalToVisual( - const TDesC& aText, - TBool aRightToLeft, - TBidirectionalState::TRunInfo* aRunInfoArray, - TInt aRunInfoLength) - : iText(aText), iRightToLeft(aRightToLeft), - iRunInfoArray(aRunInfoArray), iRunInfoArrayLength(aRunInfoLength), iRuns(aRunInfoLength) - { - } - -/** Construct the class with a full paragraph of text and the run array to be used -to hold all the runs. Directionality is taken as the implicit directionality -of the text passed. - -@param aText The text to be analyzed. This must not be de-allocated until -all operations on it through this class have been completed. -@param aRunInfoArray The array to be used to hold the run information. This -must not be de-allocated until all operations on it through this class have -been completed. Ownership is not passed. -@param aRunInfoLength The number of TRunInfo objects in aRunInfoArray. */ -EXPORT_C TBidiLogicalToVisual::TBidiLogicalToVisual( - const TDesC& aText, - TBidirectionalState::TRunInfo* aRunInfoArray, - TInt aRunInfoLength) - : iText(aText), - iRunInfoArray(aRunInfoArray), iRunInfoArrayLength(aRunInfoLength), iRuns(aRunInfoLength) - { - iRightToLeft = BidiCopy::ImplicitDirectionalityIsRightToLeft( - aText.Ptr(), aText.Length(), 0); - } - -/** Process the text. This must be called before any call to GetVisualLine. - -@return The number of runs that were or would be required to reorder the complete -line. If this is less than the value passed into the constructor as aRunInfoLength, -the full text will not be able to be Reordered. */ -EXPORT_C TInt TBidiLogicalToVisual::Reorder() - { - TInt required = TBidirectionalState::GenerateBdRunArray( - iText.Ptr(), iText.Length(), iRunInfoArray, iRunInfoArrayLength); - iRuns = Min(required, iRunInfoArrayLength); - TBidirectionalState state; - state.ReorderLine(iRunInfoArray, iRuns, ETrue, ETrue, iRightToLeft, - TChar::EOtherNeutral, TChar::EOtherNeutral); - return required; - } - -/** Get a line of visually ordered text. - -@param aLine Line of text in visual order. There must be aEnd - aStart + 4 -characters available in the buffer. Only characters within the range aStart -to aEnd, plus perhaps a truncation character and up to two zero-width joiners -will be present in the string at the end. -@param aStart The first character in the text that is to be on the line. -@param aEnd One plus the last character in the test that is to be on the line. -@param aTruncationChar The character to mark the end of the text, if appropriate, -or 0xFFFF if no truncation character is to be used. */ -EXPORT_C void TBidiLogicalToVisual::GetVisualLine(TDes& aLine, - TInt aStart, TInt aEnd, TChar aTruncationChar) - { - __ASSERT_ALWAYS(aEnd - aStart + KMinCharAvailable <= aLine.MaxLength(), BidiPanic(KErrArgument)); - - if(iText.Length() == 0) - { - aLine.Zero(); - return;//We can't do anything with iText, if its length is 0. - } - - TRunInfoCompact::TReorderingContext context; - - const TText* input = &iText[0]; - context.iStart = aStart; - context.iEnd = aEnd; - context.iTruncation = aTruncationChar; - context.iSource = input; - context.iJoinsAtStart = TRunInfoCompact::JoinBefore(input, aStart); - context.iJoinsAtEnd = aEnd < iText.Length() ? TRunInfoCompact::JoinBefore(input, aEnd) : EFalse; - - aLine.FillZ(1); - TText* output = &aLine[0]; - TText* outputStart = output; - TBidirectionalState::TRunInfo* endInfo = iRunInfoArray + iRuns; - for (TBidirectionalState::TRunInfo* currentInfo = iRunInfoArray; - currentInfo != endInfo; ++currentInfo) - { - TRunInfoCompact info(currentInfo->iStart, - currentInfo->iLength, currentInfo->iDirection); - output = info.Reorder(output, context); - } - aLine.SetLength(output - outputStart); - }