X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmulti-language-support-impl.cpp;h=8e894735b0c0500922f861656e8684b9a5e6f32a;hp=4143b03f692e704e902e679348d089cba52ac754;hb=2dd044328238768ae8b27a223cb7d0f5cda53513;hpb=306d2f61a1b64179e801fa8a0bb2bd7b4e9dd682 diff --git a/dali-toolkit/internal/text/multi-language-support-impl.cpp b/dali-toolkit/internal/text/multi-language-support-impl.cpp index 4143b03..8e89473 100644 --- a/dali-toolkit/internal/text/multi-language-support-impl.cpp +++ b/dali-toolkit/internal/text/multi-language-support-impl.cpp @@ -20,12 +20,16 @@ // INTERNAL INCLUDES #include +#include #include #include #include #include #include +// EXTERNAL INCLUDES +#include + namespace Dali { @@ -179,10 +183,10 @@ Text::MultilanguageSupport MultilanguageSupport::Get() return multilanguageSupportHandle; } -void MultilanguageSupport::SetScripts( LogicalModel& model ) +void MultilanguageSupport::SetScripts( const Vector& text, + Vector& scripts ) { - // 1) Retrieve the text from the model. - const Length numberOfCharacters = model.GetNumberOfCharacters(); + const Length numberOfCharacters = text.Count(); if( 0u == numberOfCharacters ) { @@ -190,14 +194,7 @@ void MultilanguageSupport::SetScripts( LogicalModel& model ) return; } - Vector text; - text.Resize( numberOfCharacters ); - - model.GetText( 0u, - text.Begin(), - numberOfCharacters ); - - // 2) Traverse all characters and set the scripts. + // Traverse all characters and set the scripts. // Stores the current script run. ScriptRun currentScriptRun; @@ -205,16 +202,12 @@ void MultilanguageSupport::SetScripts( LogicalModel& model ) currentScriptRun.characterRun.numberOfCharacters = 0u; currentScriptRun.script = TextAbstraction::UNKNOWN; - // Temporary stores the script runs. - std::vector scriptRuns; - scriptRuns.reserve( numberOfCharacters << 2u ); // To reduce the number of reallocations. + // Reserve some space to reduce the number of reallocations. + scripts.Reserve( numberOfCharacters << 2u ); - for( Vector::ConstIterator it = text.Begin(), - endIt = text.End(); - it != endIt; - ++it ) + for( Length index = 0u; index < numberOfCharacters; ++index ) { - const Character character = *it; + const Character character = *( text.Begin() + index ); Script script = GetCharacterScript( character ); @@ -231,7 +224,7 @@ void MultilanguageSupport::SetScripts( LogicalModel& model ) if( 0u != currentScriptRun.characterRun.numberOfCharacters ) { // Store the script run. - scriptRuns.push_back( currentScriptRun ); + scripts.PushBack( currentScriptRun ); } // Initialize the new one. @@ -247,19 +240,15 @@ void MultilanguageSupport::SetScripts( LogicalModel& model ) if( 0u != currentScriptRun.characterRun.numberOfCharacters ) { // Store the last run. - scriptRuns.push_back( currentScriptRun ); + scripts.PushBack( currentScriptRun ); } - - // 3) Set the script runs into the model. - - model.SetScripts( &scriptRuns[0u], - scriptRuns.size() ); } -void MultilanguageSupport::ValidateFonts( LogicalModel& model ) +void MultilanguageSupport::ValidateFonts( const Vector& text, + const Vector& scripts, + Vector& fonts ) { - // 1) Retrieve the text from the model. - const Length numberOfCharacters = model.GetNumberOfCharacters(); + const Length numberOfCharacters = text.Count(); if( 0u == numberOfCharacters ) { @@ -267,47 +256,19 @@ void MultilanguageSupport::ValidateFonts( LogicalModel& model ) return; } - Vector text; - text.Resize( numberOfCharacters ); - - Character* textBuffer = text.Begin(); - model.GetText( 0u, - textBuffer, - numberOfCharacters ); + // Copy the fonts set by application developers. + const Length numberOfFontRuns = fonts.Count(); + const Vector definedFonts = fonts; + fonts.Clear(); - // 2) Retrieve any font previously set. - - const Length numberOfFontRuns = model.GetNumberOfFontRuns( 0u, numberOfCharacters ); - - Vector fontRuns; - fontRuns.Reserve( numberOfFontRuns ); - - FontRun* fontRunsBuffer = fontRuns.Begin(); - model.GetFontRuns( fontRunsBuffer, - 0u, - numberOfCharacters ); - - // 3) Retrieve the scripts from the model. - - const Length numberOfScriptRuns = model.GetNumberOfScriptRuns( 0u, numberOfCharacters ); - - Vector scriptRuns; - scriptRuns.Reserve( numberOfScriptRuns ); - - ScriptRun* scriptRunsBuffer = scriptRuns.Begin(); - model.GetScriptRuns( scriptRunsBuffer, - 0u, - numberOfCharacters ); - - // 4) Traverse the characters and validate/set the fonts. + // Traverse the characters and validate/set the fonts. // Get the caches. FontId* defaultFontPerScriptCacheBuffer = mDefaultFontPerScriptCache.Begin(); ValidateFontsPerScript** validFontsPerScriptCacheBuffer = mValidFontsPerScriptCache.Begin(); // Stores the validated font runs. - Vector validatedFontRuns; - validatedFontRuns.Reserve( numberOfFontRuns ); + fonts.Reserve( numberOfFontRuns ); // Initializes a validated font run. FontRun currentFontRun; @@ -320,15 +281,15 @@ void MultilanguageSupport::ValidateFonts( LogicalModel& model ) TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); // Iterators of the font and script runs. - Vector::ConstIterator fontRunIt = fontRuns.Begin(); - Vector::ConstIterator fontRunEndIt = fontRuns.End(); - Vector::ConstIterator scriptRunIt = scriptRuns.Begin(); - Vector::ConstIterator scriptRunEndIt = scriptRuns.End(); + Vector::ConstIterator fontRunIt = definedFonts.Begin(); + Vector::ConstIterator fontRunEndIt = definedFonts.End(); + Vector::ConstIterator scriptRunIt = scripts.Begin(); + Vector::ConstIterator scriptRunEndIt = scripts.End(); for( Length index = 0u; index < numberOfCharacters; ++index ) { // Get the character. - const Character character = *( textBuffer + index ); + const Character character = *( text.Begin() + index ); // Get the font for the character. FontId fontId = GetFontId( index, @@ -437,7 +398,7 @@ void MultilanguageSupport::ValidateFonts( LogicalModel& model ) if( 0u != currentFontRun.characterRun.numberOfCharacters ) { // Store the font run. - validatedFontRuns.PushBack( currentFontRun ); + fonts.PushBack( currentFontRun ); } // Initialize the new one. @@ -454,12 +415,8 @@ void MultilanguageSupport::ValidateFonts( LogicalModel& model ) if( 0u != currentFontRun.characterRun.numberOfCharacters ) { // Store the last run. - validatedFontRuns.PushBack( currentFontRun ); + fonts.PushBack( currentFontRun ); } - - // 5) Sets the validated font runs to the model. - model.SetFonts( validatedFontRuns.Begin(), - validatedFontRuns.Count() ); } } // namespace Internal