X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fsegmentation.cpp;h=5e590b5bc7b5f5fe93509a8ea051ea639b58d46c;hb=5253e9e87aa853a60b624b1a342a19ebca26f7a4;hp=d89a93581626c7218c2a0bd200a444a3d639afe3;hpb=659d0ae8e8c828cb46fad7448b37ff9b7062819d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/segmentation.cpp b/dali-toolkit/internal/text/segmentation.cpp index d89a935..5e590b5 100644 --- a/dali-toolkit/internal/text/segmentation.cpp +++ b/dali-toolkit/internal/text/segmentation.cpp @@ -15,11 +15,11 @@ * */ -// CLASS HEADER +// FILE HEADER #include // EXTERNAL INCLUDES -#include +#include #ifdef DEBUG_ENABLED #include #include @@ -84,37 +84,60 @@ void SetLineBreakInfo( const Vector& text, #endif } -void ReplaceLineBreakInfo( LogicalModel& model, - CharacterIndex characterIndex, - Length numberOfCharactersToRemove, - Length numberOfCharactersToInsert ) -{ -} - void SetWordBreakInfo( const Vector& text, + CharacterIndex startIndex, + Length numberOfCharacters, Vector& wordBreakInfo ) { - const Length numberOfCharacters = text.Count(); + const Length totalNumberOfCharacters = text.Count(); - if( 0u == numberOfCharacters ) + if( 0u == totalNumberOfCharacters ) { // Nothing to do if there are no characters. return; } + // Resize the vector. + wordBreakInfo.Resize( totalNumberOfCharacters ); + + // Whether the current buffer is being updated or is set from scratch. + const bool updateCurrentBuffer = numberOfCharacters < totalNumberOfCharacters; + + WordBreakInfo* wordBreakInfoBuffer = NULL; + Vector newWordBreakInfo; + + if( updateCurrentBuffer ) + { + newWordBreakInfo.Resize( numberOfCharacters ); + wordBreakInfoBuffer = newWordBreakInfo.Begin(); + } + else + { + wordBreakInfoBuffer = wordBreakInfo.Begin(); + } + // Retrieve the word break info. - wordBreakInfo.Resize( numberOfCharacters ); - TextAbstraction::Segmentation::Get().GetWordBreakPositions( text.Begin(), + TextAbstraction::Segmentation::Get().GetWordBreakPositions( text.Begin() + startIndex, numberOfCharacters, - wordBreakInfo.Begin() ); + wordBreakInfoBuffer ); + + // If the word break info is updated, it needs to be inserted in the model. + if( updateCurrentBuffer ) + { + wordBreakInfo.Insert( wordBreakInfo.Begin() + startIndex, + newWordBreakInfo.Begin(), + newWordBreakInfo.End() ); + wordBreakInfo.Resize( totalNumberOfCharacters ); + } + #ifdef DEBUG_ENABLED if( gLogFilter->IsEnabledFor(Debug::Verbose) ) { std::string utf8; - Utf32ToUtf8( text.Begin(), numberOfCharacters, utf8 ); + Utf32ToUtf8( text.Begin(), totalNumberOfCharacters, utf8 ); std::string info; - info.reserve( numberOfCharacters ); + info.reserve( totalNumberOfCharacters ); for( unsigned int i=0; i('0' + wordBreakInfo[i]) ); @@ -126,13 +149,6 @@ void SetWordBreakInfo( const Vector& text, #endif } -void ReplaceWordBreakInfo( LogicalModel& model, - CharacterIndex characterIndex, - Length numberOfCharactersToRemove, - Length numberOfCharactersToInsert ) -{ -} - } // namespace Text } // namespace Toolkit