[3.0] Fix for multi-language support. 44/85344/3
authorVictor Cebollada <v.cebollada@samsung.com>
Fri, 5 Aug 2016 06:40:00 +0000 (07:40 +0100)
committerAgnelo Vaz <agnelo.vaz@samsung.com>
Wed, 24 Aug 2016 18:09:54 +0000 (11:09 -0700)
* Pass the preferred font's description to the
  MultiLanguageSupport::ValidateFonts() method instead of
  a vector of font runs with default font's identifiers.

Change-Id: I88ded17f10be3f78fd7dfbca404f78eaf779aaa9
Signed-off-by: Victor Cebollada <v.cebollada@samsung.com>
13 files changed:
automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/toolkit-text-model.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-text-abstraction.cpp
dali-toolkit/internal/text/multi-language-helper-functions.cpp
dali-toolkit/internal/text/multi-language-helper-functions.h
dali-toolkit/internal/text/multi-language-support-impl.cpp
dali-toolkit/internal/text/multi-language-support-impl.h
dali-toolkit/internal/text/multi-language-support.cpp
dali-toolkit/internal/text/multi-language-support.h
dali-toolkit/internal/text/text-controller-impl.cpp
dali-toolkit/internal/text/text-controller.cpp
dali-toolkit/internal/text/text-font-style.cpp

index 21d9f42..104b3c8 100644 (file)
@@ -150,24 +150,19 @@ void CreateTextModel( const std::string& text,
   fontDescriptionRuns = fontDescriptions;
   Vector<FontRun>& validFonts = logicalModel->mFontRuns;
 
-  // The default font id.
-  FontDefaults fontDefaults;
-  fontDefaults.mFontDescription.family = "";
-  fontDefaults.familyDefined = true;
-  fontDefaults.mDefaultPointSize = 12.f;
-  fontDefaults.sizeDefined = true;
+  // The default font description.
+  TextAbstraction::FontDescription fontDescription;
 
   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
   fontClient.SetDpi( 96u, 96u );
 
-  const FontId defaultFontId = fontDefaults.GetFontId( fontClient );
-
   // Validates the fonts. If there is a character with no assigned font it sets a default one.
   // After this call, fonts are validated.
   multilanguageSupport.ValidateFonts( utf32Characters,
                                       scripts,
                                       fontDescriptionRuns,
-                                      defaultFontId,
+                                      fontDescription,
+                                      TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
                                       0u,
                                       numberOfCharacters,
                                       validFonts );
index 08a0a97..36ab916 100644 (file)
@@ -961,7 +961,7 @@ int UtcDaliTextLayoutMultilineText02(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun2;
   fontDescriptionRun2.characterRun.characterIndex = 17u;
-  fontDescriptionRun2.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun2.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun2.familyLength = fontFamily2.size();
   fontDescriptionRun2.familyName = new char[fontDescriptionRun2.familyLength];
   memcpy( fontDescriptionRun2.familyName, fontFamily2.c_str(), fontDescriptionRun2.familyLength );
@@ -971,12 +971,12 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRun2.slantDefined = false;
   fontDescriptionRun2.sizeDefined = false;
 
-  const std::string fontFamily3( "TizenSansHebrew" );
+  const std::string fontFamily3( "TizenSans" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun3;
-  fontDescriptionRun3.characterRun.characterIndex = 28u;
-  fontDescriptionRun3.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun3.characterRun.characterIndex = 26u;
+  fontDescriptionRun3.characterRun.numberOfCharacters = 2u;
   fontDescriptionRun3.familyLength = fontFamily3.size();
   fontDescriptionRun3.familyName = new char[fontDescriptionRun3.familyLength];
   memcpy( fontDescriptionRun3.familyName, fontFamily3.c_str(), fontDescriptionRun3.familyLength );
@@ -986,12 +986,12 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRun3.slantDefined = false;
   fontDescriptionRun3.sizeDefined = false;
 
-  const std::string fontFamily4( "TizenSans" );
+  const std::string fontFamily4( "TizenSansHebrew" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun4;
-  fontDescriptionRun4.characterRun.characterIndex = 38u;
-  fontDescriptionRun4.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun4.characterRun.characterIndex = 28u;
+  fontDescriptionRun4.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun4.familyLength = fontFamily4.size();
   fontDescriptionRun4.familyName = new char[fontDescriptionRun4.familyLength];
   memcpy( fontDescriptionRun4.familyName, fontFamily4.c_str(), fontDescriptionRun4.familyLength );
@@ -1001,18 +1001,34 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRun4.slantDefined = false;
   fontDescriptionRun4.sizeDefined = false;
 
+  const std::string fontFamily5( "TizenSans" );
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun5;
+  fontDescriptionRun5.characterRun.characterIndex = 38u;
+  fontDescriptionRun5.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun5.familyLength = fontFamily5.size();
+  fontDescriptionRun5.familyName = new char[fontDescriptionRun5.familyLength];
+  memcpy( fontDescriptionRun5.familyName, fontFamily5.c_str(), fontDescriptionRun5.familyLength );
+  fontDescriptionRun5.familyDefined = true;
+  fontDescriptionRun5.weightDefined = false;
+  fontDescriptionRun5.widthDefined = false;
+  fontDescriptionRun5.slantDefined = false;
+  fontDescriptionRun5.sizeDefined = false;
+
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun1 );
   fontDescriptionRuns.PushBack( fontDescriptionRun2 );
   fontDescriptionRuns.PushBack( fontDescriptionRun3 );
   fontDescriptionRuns.PushBack( fontDescriptionRun4 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun5 );
   Size textArea(100.f, 300.f);
   Size layoutSize(81.f, 120.f);
   float positions[] =
   {
     1.f, -12.f, 12.f,  -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f,  -0.f, 40.f,  -9.f, 51.f,  -9.f, 61.f,  -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f,  -9.f, 18.f,  -9.f, 30.f,  -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f,  -0.f,
-    1.f, -10.f,  9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f,  9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f,  -0.f,
     1.f, -13.f, 10.f,  -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f,  -0.f, 38.f,  -9.f, 49.f,  -9.f, 59.f,  -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -13.f, 10.f,  -9.f, 18.f,  -9.f, 30.f,  -9.f, 39.f, -3.f,
@@ -1045,7 +1061,7 @@ int UtcDaliTextLayoutMultilineText02(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -1103,7 +1119,7 @@ int UtcDaliTextLayoutMultilineText02(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world demo.",
     textArea,
-    4u,
+    5u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     55u,
@@ -1454,7 +1470,7 @@ int UtcDaliTextUpdateLayout01(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun02.characterRun.characterIndex = 17u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
@@ -1466,11 +1482,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 28u;
-  fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun03.familyLength = fontArabic.size();
+  fontDescriptionRun03.characterRun.characterIndex = 26u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun03.familyLength = fontLatin.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
-  memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+  memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
   fontDescriptionRun03.familyDefined = true;
   fontDescriptionRun03.weightDefined = false;
   fontDescriptionRun03.widthDefined = false;
@@ -1479,11 +1495,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 42u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun04.familyLength = fontLatin.size();
+  fontDescriptionRun04.characterRun.characterIndex = 28u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun04.familyLength = fontArabic.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -1492,11 +1508,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun05;
-  fontDescriptionRun05.characterRun.characterIndex = 54u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun05.familyLength = fontHebrew.size();
+  fontDescriptionRun05.characterRun.characterIndex = 42u;
+  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun05.familyLength = fontLatin.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
-  memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
+  memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -1505,7 +1521,7 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 64u;
+  fontDescriptionRun06.characterRun.characterIndex = 54u;
   fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun06.familyLength = fontHebrew.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
@@ -1518,11 +1534,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun07;
-  fontDescriptionRun07.characterRun.characterIndex = 74u;
-  fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
-  fontDescriptionRun07.familyLength = fontLatin.size();
+  fontDescriptionRun07.characterRun.characterIndex = 64u;
+  fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun07.familyLength = fontHebrew.size();
   fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
-  memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
+  memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
   fontDescriptionRun07.familyDefined = true;
   fontDescriptionRun07.weightDefined = false;
   fontDescriptionRun07.widthDefined = false;
@@ -1531,8 +1547,8 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun08;
-  fontDescriptionRun08.characterRun.characterIndex = 92u;
-  fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun08.characterRun.characterIndex = 74u;
+  fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
   fontDescriptionRun08.familyLength = fontLatin.size();
   fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
   memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
@@ -1544,11 +1560,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun09;
-  fontDescriptionRun09.characterRun.characterIndex = 104u;
-  fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun09.familyLength = fontArabic.size();
+  fontDescriptionRun09.characterRun.characterIndex = 92u;
+  fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun09.familyLength = fontLatin.size();
   fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
-  memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
+  memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
   fontDescriptionRun09.familyDefined = true;
   fontDescriptionRun09.weightDefined = false;
   fontDescriptionRun09.widthDefined = false;
@@ -1557,11 +1573,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun10;
-  fontDescriptionRun10.characterRun.characterIndex = 118u;
-  fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun10.familyLength = fontHebrew.size();
+  fontDescriptionRun10.characterRun.characterIndex = 104u;
+  fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun10.familyLength = fontArabic.size();
   fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
-  memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
+  memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
   fontDescriptionRun10.familyDefined = true;
   fontDescriptionRun10.weightDefined = false;
   fontDescriptionRun10.widthDefined = false;
@@ -1570,11 +1586,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun11;
-  fontDescriptionRun11.characterRun.characterIndex = 128u;
-  fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun11.familyLength = fontLatin.size();
+  fontDescriptionRun11.characterRun.characterIndex = 118u;
+  fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun11.familyLength = fontHebrew.size();
   fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
-  memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
+  memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
   fontDescriptionRun11.familyDefined = true;
   fontDescriptionRun11.weightDefined = false;
   fontDescriptionRun11.widthDefined = false;
@@ -1583,11 +1599,11 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun12;
-  fontDescriptionRun12.characterRun.characterIndex = 145u;
-  fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
-  fontDescriptionRun12.familyLength = fontHebrew.size();
+  fontDescriptionRun12.characterRun.characterIndex = 128u;
+  fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun12.familyLength = fontLatin.size();
   fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
-  memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
+  memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
   fontDescriptionRun12.familyDefined = true;
   fontDescriptionRun12.weightDefined = false;
   fontDescriptionRun12.widthDefined = false;
@@ -1596,8 +1612,8 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun13;
-  fontDescriptionRun13.characterRun.characterIndex = 156u;
-  fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun13.characterRun.characterIndex = 145u;
+  fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun13.familyLength = fontHebrew.size();
   fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
   memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
@@ -1609,8 +1625,8 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun14;
-  fontDescriptionRun14.characterRun.characterIndex = 166u;
-  fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun14.characterRun.characterIndex = 154u;
+  fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
   fontDescriptionRun14.familyLength = fontLatin.size();
   fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
   memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
@@ -1622,17 +1638,43 @@ int UtcDaliTextUpdateLayout01(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun15;
-  fontDescriptionRun15.characterRun.characterIndex = 178u;
-  fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun15.familyLength = fontArabic.size();
+  fontDescriptionRun15.characterRun.characterIndex = 156u;
+  fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun15.familyLength = fontHebrew.size();
   fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
-  memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
+  memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
   fontDescriptionRun15.familyDefined = true;
   fontDescriptionRun15.weightDefined = false;
   fontDescriptionRun15.widthDefined = false;
   fontDescriptionRun15.slantDefined = false;
   fontDescriptionRun15.sizeDefined = false;
 
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun16;
+  fontDescriptionRun16.characterRun.characterIndex = 166u;
+  fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun16.familyLength = fontLatin.size();
+  fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
+  memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
+  fontDescriptionRun16.familyDefined = true;
+  fontDescriptionRun16.weightDefined = false;
+  fontDescriptionRun16.widthDefined = false;
+  fontDescriptionRun16.slantDefined = false;
+  fontDescriptionRun16.sizeDefined = false;
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun17;
+  fontDescriptionRun17.characterRun.characterIndex = 178u;
+  fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun17.familyLength = fontArabic.size();
+  fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
+  memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
+  fontDescriptionRun17.familyDefined = true;
+  fontDescriptionRun17.weightDefined = false;
+  fontDescriptionRun17.widthDefined = false;
+  fontDescriptionRun17.slantDefined = false;
+  fontDescriptionRun17.sizeDefined = false;
+
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun01 );
   fontDescriptionRuns.PushBack( fontDescriptionRun02 );
@@ -1649,25 +1691,27 @@ int UtcDaliTextUpdateLayout01(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun13 );
   fontDescriptionRuns.PushBack( fontDescriptionRun14 );
   fontDescriptionRuns.PushBack( fontDescriptionRun15 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun16 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   Size layoutSize(92.f, 380.f);
   float positions[] =
   {
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
     0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
+    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
@@ -1701,7 +1745,7 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -1845,7 +1889,7 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 150u, 6u },
     { 150u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -1932,7 +1976,7 @@ int UtcDaliTextUpdateLayout01(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world مرحبا بالعالم\n",
     textArea,
-    15u,
+    17u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     192u,
@@ -1982,7 +2026,7 @@ int UtcDaliTextUpdateLayout02(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun02.characterRun.characterIndex = 17u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
@@ -1994,11 +2038,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 28u;
-  fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun03.familyLength = fontArabic.size();
+  fontDescriptionRun03.characterRun.characterIndex = 26u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun03.familyLength = fontLatin.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
-  memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+  memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
   fontDescriptionRun03.familyDefined = true;
   fontDescriptionRun03.weightDefined = false;
   fontDescriptionRun03.widthDefined = false;
@@ -2007,11 +2051,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 42u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun04.familyLength = fontLatin.size();
+  fontDescriptionRun04.characterRun.characterIndex = 28u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun04.familyLength = fontArabic.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -2020,11 +2064,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun05;
-  fontDescriptionRun05.characterRun.characterIndex = 54u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun05.familyLength = fontHebrew.size();
+  fontDescriptionRun05.characterRun.characterIndex = 42u;
+  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun05.familyLength = fontLatin.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
-  memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
+  memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -2033,7 +2077,7 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 64u;
+  fontDescriptionRun06.characterRun.characterIndex = 54u;
   fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun06.familyLength = fontHebrew.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
@@ -2046,11 +2090,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun07;
-  fontDescriptionRun07.characterRun.characterIndex = 74u;
-  fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
-  fontDescriptionRun07.familyLength = fontLatin.size();
+  fontDescriptionRun07.characterRun.characterIndex = 64u;
+  fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun07.familyLength = fontHebrew.size();
   fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
-  memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
+  memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
   fontDescriptionRun07.familyDefined = true;
   fontDescriptionRun07.weightDefined = false;
   fontDescriptionRun07.widthDefined = false;
@@ -2059,8 +2103,8 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun08;
-  fontDescriptionRun08.characterRun.characterIndex = 92u;
-  fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun08.characterRun.characterIndex = 74u;
+  fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
   fontDescriptionRun08.familyLength = fontLatin.size();
   fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
   memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
@@ -2072,11 +2116,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun09;
-  fontDescriptionRun09.characterRun.characterIndex = 104u;
-  fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun09.familyLength = fontArabic.size();
+  fontDescriptionRun09.characterRun.characterIndex = 92u;
+  fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun09.familyLength = fontLatin.size();
   fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
-  memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
+  memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
   fontDescriptionRun09.familyDefined = true;
   fontDescriptionRun09.weightDefined = false;
   fontDescriptionRun09.widthDefined = false;
@@ -2085,11 +2129,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun10;
-  fontDescriptionRun10.characterRun.characterIndex = 118u;
-  fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun10.familyLength = fontHebrew.size();
+  fontDescriptionRun10.characterRun.characterIndex = 104u;
+  fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun10.familyLength = fontArabic.size();
   fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
-  memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
+  memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
   fontDescriptionRun10.familyDefined = true;
   fontDescriptionRun10.weightDefined = false;
   fontDescriptionRun10.widthDefined = false;
@@ -2098,11 +2142,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun11;
-  fontDescriptionRun11.characterRun.characterIndex = 128u;
-  fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun11.familyLength = fontLatin.size();
+  fontDescriptionRun11.characterRun.characterIndex = 118u;
+  fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun11.familyLength = fontHebrew.size();
   fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
-  memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
+  memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
   fontDescriptionRun11.familyDefined = true;
   fontDescriptionRun11.weightDefined = false;
   fontDescriptionRun11.widthDefined = false;
@@ -2111,11 +2155,11 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun12;
-  fontDescriptionRun12.characterRun.characterIndex = 145u;
-  fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
-  fontDescriptionRun12.familyLength = fontHebrew.size();
+  fontDescriptionRun12.characterRun.characterIndex = 128u;
+  fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun12.familyLength = fontLatin.size();
   fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
-  memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
+  memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
   fontDescriptionRun12.familyDefined = true;
   fontDescriptionRun12.weightDefined = false;
   fontDescriptionRun12.widthDefined = false;
@@ -2124,8 +2168,8 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun13;
-  fontDescriptionRun13.characterRun.characterIndex = 156u;
-  fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun13.characterRun.characterIndex = 145u;
+  fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun13.familyLength = fontHebrew.size();
   fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
   memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
@@ -2137,8 +2181,8 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun14;
-  fontDescriptionRun14.characterRun.characterIndex = 166u;
-  fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun14.characterRun.characterIndex = 154u;
+  fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
   fontDescriptionRun14.familyLength = fontLatin.size();
   fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
   memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
@@ -2150,17 +2194,43 @@ int UtcDaliTextUpdateLayout02(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun15;
-  fontDescriptionRun15.characterRun.characterIndex = 178u;
-  fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun15.familyLength = fontArabic.size();
+  fontDescriptionRun15.characterRun.characterIndex = 156u;
+  fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun15.familyLength = fontHebrew.size();
   fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
-  memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
+  memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
   fontDescriptionRun15.familyDefined = true;
   fontDescriptionRun15.weightDefined = false;
   fontDescriptionRun15.widthDefined = false;
   fontDescriptionRun15.slantDefined = false;
   fontDescriptionRun15.sizeDefined = false;
 
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun16;
+  fontDescriptionRun16.characterRun.characterIndex = 166u;
+  fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun16.familyLength = fontLatin.size();
+  fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
+  memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
+  fontDescriptionRun16.familyDefined = true;
+  fontDescriptionRun16.weightDefined = false;
+  fontDescriptionRun16.widthDefined = false;
+  fontDescriptionRun16.slantDefined = false;
+  fontDescriptionRun16.sizeDefined = false;
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun17;
+  fontDescriptionRun17.characterRun.characterIndex = 178u;
+  fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun17.familyLength = fontArabic.size();
+  fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
+  memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
+  fontDescriptionRun17.familyDefined = true;
+  fontDescriptionRun17.weightDefined = false;
+  fontDescriptionRun17.widthDefined = false;
+  fontDescriptionRun17.slantDefined = false;
+  fontDescriptionRun17.sizeDefined = false;
+
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun01 );
   fontDescriptionRuns.PushBack( fontDescriptionRun02 );
@@ -2177,25 +2247,27 @@ int UtcDaliTextUpdateLayout02(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun13 );
   fontDescriptionRuns.PushBack( fontDescriptionRun14 );
   fontDescriptionRuns.PushBack( fontDescriptionRun15 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun16 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   Size layoutSize(92.f, 380.f);
   float positions[] =
   {
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
     0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
+    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
@@ -2229,7 +2301,7 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -2373,7 +2445,7 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 150u, 6u },
     { 150u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -2460,7 +2532,7 @@ int UtcDaliTextUpdateLayout02(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world مرحبا بالعالم\n",
     textArea,
-    15u,
+    17u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     192u,
@@ -2510,7 +2582,7 @@ int UtcDaliTextUpdateLayout03(void)
   // Set a known font description
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun02.characterRun.characterIndex = 17u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 11u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
@@ -2522,11 +2594,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 28u;
-  fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun03.familyLength = fontArabic.size();
+  fontDescriptionRun03.characterRun.characterIndex = 26u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun03.familyLength = fontLatin.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
-  memcpy( fontDescriptionRun03.familyName, fontArabic.c_str(), fontDescriptionRun03.familyLength );
+  memcpy( fontDescriptionRun03.familyName, fontLatin.c_str(), fontDescriptionRun03.familyLength );
   fontDescriptionRun03.familyDefined = true;
   fontDescriptionRun03.weightDefined = false;
   fontDescriptionRun03.widthDefined = false;
@@ -2535,11 +2607,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 42u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
-  fontDescriptionRun04.familyLength = fontLatin.size();
+  fontDescriptionRun04.characterRun.characterIndex = 28u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun04.familyLength = fontArabic.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontArabic.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -2548,11 +2620,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun05;
-  fontDescriptionRun05.characterRun.characterIndex = 54u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun05.familyLength = fontHebrew.size();
+  fontDescriptionRun05.characterRun.characterIndex = 42u;
+  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun05.familyLength = fontLatin.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
-  memcpy( fontDescriptionRun05.familyName, fontHebrew.c_str(), fontDescriptionRun05.familyLength );
+  memcpy( fontDescriptionRun05.familyName, fontLatin.c_str(), fontDescriptionRun05.familyLength );
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -2561,7 +2633,7 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 64u;
+  fontDescriptionRun06.characterRun.characterIndex = 54u;
   fontDescriptionRun06.characterRun.numberOfCharacters = 10u;
   fontDescriptionRun06.familyLength = fontHebrew.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
@@ -2574,11 +2646,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun07;
-  fontDescriptionRun07.characterRun.characterIndex = 74u;
-  fontDescriptionRun07.characterRun.numberOfCharacters = 18u;
-  fontDescriptionRun07.familyLength = fontLatin.size();
+  fontDescriptionRun07.characterRun.characterIndex = 64u;
+  fontDescriptionRun07.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun07.familyLength = fontHebrew.size();
   fontDescriptionRun07.familyName = new char[fontDescriptionRun07.familyLength];
-  memcpy( fontDescriptionRun07.familyName, fontLatin.c_str(), fontDescriptionRun07.familyLength );
+  memcpy( fontDescriptionRun07.familyName, fontHebrew.c_str(), fontDescriptionRun07.familyLength );
   fontDescriptionRun07.familyDefined = true;
   fontDescriptionRun07.weightDefined = false;
   fontDescriptionRun07.widthDefined = false;
@@ -2587,8 +2659,8 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun08;
-  fontDescriptionRun08.characterRun.characterIndex = 92u;
-  fontDescriptionRun08.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun08.characterRun.characterIndex = 74u;
+  fontDescriptionRun08.characterRun.numberOfCharacters = 18u;
   fontDescriptionRun08.familyLength = fontLatin.size();
   fontDescriptionRun08.familyName = new char[fontDescriptionRun08.familyLength];
   memcpy( fontDescriptionRun08.familyName, fontLatin.c_str(), fontDescriptionRun08.familyLength );
@@ -2600,11 +2672,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun09;
-  fontDescriptionRun09.characterRun.characterIndex = 104u;
-  fontDescriptionRun09.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun09.familyLength = fontArabic.size();
+  fontDescriptionRun09.characterRun.characterIndex = 92u;
+  fontDescriptionRun09.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun09.familyLength = fontLatin.size();
   fontDescriptionRun09.familyName = new char[fontDescriptionRun09.familyLength];
-  memcpy( fontDescriptionRun09.familyName, fontArabic.c_str(), fontDescriptionRun09.familyLength );
+  memcpy( fontDescriptionRun09.familyName, fontLatin.c_str(), fontDescriptionRun09.familyLength );
   fontDescriptionRun09.familyDefined = true;
   fontDescriptionRun09.weightDefined = false;
   fontDescriptionRun09.widthDefined = false;
@@ -2613,11 +2685,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun10;
-  fontDescriptionRun10.characterRun.characterIndex = 118u;
-  fontDescriptionRun10.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun10.familyLength = fontHebrew.size();
+  fontDescriptionRun10.characterRun.characterIndex = 104u;
+  fontDescriptionRun10.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun10.familyLength = fontArabic.size();
   fontDescriptionRun10.familyName = new char[fontDescriptionRun10.familyLength];
-  memcpy( fontDescriptionRun10.familyName, fontHebrew.c_str(), fontDescriptionRun10.familyLength );
+  memcpy( fontDescriptionRun10.familyName, fontArabic.c_str(), fontDescriptionRun10.familyLength );
   fontDescriptionRun10.familyDefined = true;
   fontDescriptionRun10.weightDefined = false;
   fontDescriptionRun10.widthDefined = false;
@@ -2626,11 +2698,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun11;
-  fontDescriptionRun11.characterRun.characterIndex = 128u;
-  fontDescriptionRun11.characterRun.numberOfCharacters = 17u;
-  fontDescriptionRun11.familyLength = fontLatin.size();
+  fontDescriptionRun11.characterRun.characterIndex = 118u;
+  fontDescriptionRun11.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun11.familyLength = fontHebrew.size();
   fontDescriptionRun11.familyName = new char[fontDescriptionRun11.familyLength];
-  memcpy( fontDescriptionRun11.familyName, fontLatin.c_str(), fontDescriptionRun11.familyLength );
+  memcpy( fontDescriptionRun11.familyName, fontHebrew.c_str(), fontDescriptionRun11.familyLength );
   fontDescriptionRun11.familyDefined = true;
   fontDescriptionRun11.weightDefined = false;
   fontDescriptionRun11.widthDefined = false;
@@ -2639,11 +2711,11 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun12;
-  fontDescriptionRun12.characterRun.characterIndex = 145u;
-  fontDescriptionRun12.characterRun.numberOfCharacters = 11u;
-  fontDescriptionRun12.familyLength = fontHebrew.size();
+  fontDescriptionRun12.characterRun.characterIndex = 128u;
+  fontDescriptionRun12.characterRun.numberOfCharacters = 17u;
+  fontDescriptionRun12.familyLength = fontLatin.size();
   fontDescriptionRun12.familyName = new char[fontDescriptionRun12.familyLength];
-  memcpy( fontDescriptionRun12.familyName, fontHebrew.c_str(), fontDescriptionRun12.familyLength );
+  memcpy( fontDescriptionRun12.familyName, fontLatin.c_str(), fontDescriptionRun12.familyLength );
   fontDescriptionRun12.familyDefined = true;
   fontDescriptionRun12.weightDefined = false;
   fontDescriptionRun12.widthDefined = false;
@@ -2652,8 +2724,8 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun13;
-  fontDescriptionRun13.characterRun.characterIndex = 156u;
-  fontDescriptionRun13.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun13.characterRun.characterIndex = 145u;
+  fontDescriptionRun13.characterRun.numberOfCharacters = 9u;
   fontDescriptionRun13.familyLength = fontHebrew.size();
   fontDescriptionRun13.familyName = new char[fontDescriptionRun13.familyLength];
   memcpy( fontDescriptionRun13.familyName, fontHebrew.c_str(), fontDescriptionRun13.familyLength );
@@ -2665,8 +2737,8 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun14;
-  fontDescriptionRun14.characterRun.characterIndex = 166u;
-  fontDescriptionRun14.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun14.characterRun.characterIndex = 154u;
+  fontDescriptionRun14.characterRun.numberOfCharacters = 2u;
   fontDescriptionRun14.familyLength = fontLatin.size();
   fontDescriptionRun14.familyName = new char[fontDescriptionRun14.familyLength];
   memcpy( fontDescriptionRun14.familyName, fontLatin.c_str(), fontDescriptionRun14.familyLength );
@@ -2678,17 +2750,43 @@ int UtcDaliTextUpdateLayout03(void)
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun15;
-  fontDescriptionRun15.characterRun.characterIndex = 178u;
-  fontDescriptionRun15.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun15.familyLength = fontArabic.size();
+  fontDescriptionRun15.characterRun.characterIndex = 156u;
+  fontDescriptionRun15.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun15.familyLength = fontHebrew.size();
   fontDescriptionRun15.familyName = new char[fontDescriptionRun15.familyLength];
-  memcpy( fontDescriptionRun15.familyName, fontArabic.c_str(), fontDescriptionRun15.familyLength );
+  memcpy( fontDescriptionRun15.familyName, fontHebrew.c_str(), fontDescriptionRun15.familyLength );
   fontDescriptionRun15.familyDefined = true;
   fontDescriptionRun15.weightDefined = false;
   fontDescriptionRun15.widthDefined = false;
   fontDescriptionRun15.slantDefined = false;
   fontDescriptionRun15.sizeDefined = false;
 
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun16;
+  fontDescriptionRun16.characterRun.characterIndex = 166u;
+  fontDescriptionRun16.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun16.familyLength = fontLatin.size();
+  fontDescriptionRun16.familyName = new char[fontDescriptionRun16.familyLength];
+  memcpy( fontDescriptionRun16.familyName, fontLatin.c_str(), fontDescriptionRun16.familyLength );
+  fontDescriptionRun16.familyDefined = true;
+  fontDescriptionRun16.weightDefined = false;
+  fontDescriptionRun16.widthDefined = false;
+  fontDescriptionRun16.slantDefined = false;
+  fontDescriptionRun16.sizeDefined = false;
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun17;
+  fontDescriptionRun17.characterRun.characterIndex = 178u;
+  fontDescriptionRun17.characterRun.numberOfCharacters = 14u;
+  fontDescriptionRun17.familyLength = fontArabic.size();
+  fontDescriptionRun17.familyName = new char[fontDescriptionRun17.familyLength];
+  memcpy( fontDescriptionRun17.familyName, fontArabic.c_str(), fontDescriptionRun17.familyLength );
+  fontDescriptionRun17.familyDefined = true;
+  fontDescriptionRun17.weightDefined = false;
+  fontDescriptionRun17.widthDefined = false;
+  fontDescriptionRun17.slantDefined = false;
+  fontDescriptionRun17.sizeDefined = false;
+
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun01 );
   fontDescriptionRuns.PushBack( fontDescriptionRun02 );
@@ -2705,25 +2803,27 @@ int UtcDaliTextUpdateLayout03(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun13 );
   fontDescriptionRuns.PushBack( fontDescriptionRun14 );
   fontDescriptionRuns.PushBack( fontDescriptionRun15 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun16 );
+  fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   Size layoutSize(92.f, 380.f);
   float positions[] =
   {
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -13.f, 68.f, -9.f, 76.f, -13.f, 80.f, -13.f, 83.f, -9.f, 92.f, -0.f,
     0.f, -9.f, 11.f, -9.f, 21.f, -9.f, 27.f, -13.f, 30.f, -13.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -11.f,
+    0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -3.f, 42.f, -12.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f, 59.f, -10.f, 70.f, -13.f, 77.f, -10.f, 82.f, -10.f, 90.f, -0.f,
     1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -0.f,
     1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 51.f, -9.f, 61.f, -9.f, 67.f, -13.f, 70.f, -13.f, 79.f, -0.f,
     0.f, -13.f, 10.f, -9.f, 18.f, -9.f, 30.f, -9.f, 39.f, -0.f, 44.f, -10.f, 55.f, -13.f, 62.f, -10.f, 67.f, -10.f, 75.f, -0.f,
-    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 32.f, -2.f, 35.f, -11.f,
+    1.f, -10.f, 9.f, -10.f, 14.f, -13.f, 22.f, -10.f, 30.f, -3.f, 33.f, -12.f,
     1.f, -10.f, 12.f, -13.f, 19.f, -10.f, 24.f, -10.f, 32.f, -0.f, 37.f, -10.f, 45.f, -10.f, 50.f, -13.f, 58.f, -10.f, 66.f, -0.f,
     1.f, -13.f, 10.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 49.f, -9.f, 59.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -0.f,
     0.f, -8.f, 7.f, -6.f, 12.f, -7.f, 18.f, -7.f, 23.f, -11.f, 25.f, -0.f, 27.f, -7.f, 32.f, -11.f, 33.f, -11.f, 37.f, -8.f, 44.f, -11.f, 45.f, -11.f, 49.f, -8.f, 55.f, -0.f,
@@ -2757,7 +2857,7 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 22u, 6u },
     { 22u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -2901,7 +3001,7 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 150u, 6u },
     { 150u, 6u },
-    36.f,
+    34.f,
     15.f,
     -5.f,
     0.f,
@@ -2957,7 +3057,6 @@ int UtcDaliTextUpdateLayout03(void)
     false,
     false
   };
-
   Vector<LineRun> lines;
   lines.PushBack( line01 );
   lines.PushBack( line02 );
@@ -2989,7 +3088,7 @@ int UtcDaliTextUpdateLayout03(void)
     "Hello world demo שלום עולם.\n"
     "שלום עולם hello world مرحبا بالعالم\n",
     textArea,
-    15u,
+    17u,
     fontDescriptionRuns.Begin(),
     layoutSize,
     192u,
index 8dd64f9..3be899f 100644 (file)
@@ -36,12 +36,12 @@ using namespace Text;
 // Tests the following functions with different scripts.
 //
 // void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
-//                             Vector<FontId>& fontIds,
-//                             Vector<bool>& isDefaultFont,
 //                             const TextAbstraction::FontDescription& defaultFontDescription,
 //                             TextAbstraction::PointSize26Dot6 defaultPointSize,
-//                             CharacterIndex startIndex,
-//                             Length numberOfCharacters );
+//                             CharacterIndex characterIndex,
+//                             TextAbstraction::FontDescription& fontDescription,
+//                             TextAbstraction::PointSize26Dot6& fontPointSize,
+//                             bool& isDefaultFont );
 //
 // Script GetScript( Length index,
 //                   Vector<ScriptRun>::ConstIterator& scriptRunIt,
@@ -57,7 +57,8 @@ using namespace Text;
 // void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
 //                                           const Vector<ScriptRun>& scripts,
 //                                           const Vector<FontDescriptionRun>& fontDescriptions,
-//                                           FontId defaultFontId,
+//                                           const TextAbstraction::FontDescription& defaultFontDescription,
+//                                           TextAbstraction::PointSize26Dot6 defaultFontPointSize,
 //                                           CharacterIndex startIndex,
 //                                           Length numberOfCharacters,
 //                                           Vector<FontRun>& fonts );
@@ -105,21 +106,50 @@ struct ValidateFontsData
 };
 
 //////////////////////////////////////////////////////////
+void PrintFontDescription( FontId id )
+{
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+
+  TextAbstraction::FontDescription description;
+  fontClient.GetDescription( id, description );
+
+  const TextAbstraction::PointSize26Dot6 pointSize = fontClient.GetPointSize( id );
+
+  std::cout << std::endl << "  font description for font id : " << id << std::endl;
+  std::cout << "  font family : [" << description.family << "]" << std::endl;
+  std::cout << "   font width : [" << TextAbstraction::FontWidth::Name[description.width] << "]" << std::endl;
+  std::cout << "  font weight : [" << TextAbstraction::FontWeight::Name[description.weight] << "]" << std::endl;
+  std::cout << "   font slant : [" << TextAbstraction::FontSlant::Name[description.slant] << "]" << std::endl;
+  std::cout << "    font size : " << pointSize << std::endl;
+}
 
 bool MergeFontDescriptionsTest( const MergeFontDescriptionsData& data )
 {
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+
   Vector<FontId> fontIds;
   fontIds.Resize( data.startIndex + data.numberOfCharacters, 0u );
   Vector<bool> isDefaultFont;
   isDefaultFont.Resize( data.startIndex + data.numberOfCharacters, true );
 
-  MergeFontDescriptions( data.fontDescriptionRuns,
-                         fontIds,
-                         isDefaultFont,
-                         data.defaultFontDescription,
-                         data.defaultPointSize,
-                         data.startIndex,
-                         data.numberOfCharacters );
+  for( unsigned int index = data.startIndex; index < data.startIndex + data.numberOfCharacters; ++index )
+  {
+    TextAbstraction::FontDescription fontDescription;
+    TextAbstraction::PointSize26Dot6 fontPointSize = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
+
+    MergeFontDescriptions( data.fontDescriptionRuns,
+                           data.defaultFontDescription,
+                           data.defaultPointSize,
+                           index,
+                           fontDescription,
+                           fontPointSize,
+                           isDefaultFont[index] );
+
+    if( !isDefaultFont[index] )
+    {
+      fontIds[index] = fontClient.GetFontId( fontDescription, fontPointSize );
+    }
+  }
 
   if( fontIds.Count() != data.expectedFontIds.Count() )
   {
@@ -261,6 +291,10 @@ bool ValidateFontTest( const ValidateFontsData& data )
   // Get the default font id.
   const FontId defaultFontId = fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + data.defaultFont,
                                                      data.defaultFontSize );
+  TextAbstraction::FontDescription defaultFontDescription;
+  fontClient.GetDescription( defaultFontId, defaultFontDescription );
+
+  const TextAbstraction::PointSize26Dot6 defaultPointSize = fontClient.GetPointSize( defaultFontId );
 
   Vector<FontRun> fontRuns;
 
@@ -268,7 +302,8 @@ bool ValidateFontTest( const ValidateFontsData& data )
   multilanguageSupport.ValidateFonts( utf32,
                                       scripts,
                                       data.fontDescriptionRuns,
-                                      defaultFontId,
+                                      defaultFontDescription,
+                                      defaultPointSize,
                                       0u,
                                       numberOfCharacters,
                                       fontRuns );
@@ -284,7 +319,8 @@ bool ValidateFontTest( const ValidateFontsData& data )
     multilanguageSupport.ValidateFonts( utf32,
                                         scripts,
                                         data.fontDescriptionRuns,
-                                        defaultFontId,
+                                        defaultFontDescription,
+                                        defaultPointSize,
                                         data.index,
                                         data.numberOfCharacters,
                                         fontRuns );
@@ -453,9 +489,9 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     const_cast<char*>( "DejaVu Sans" ),
     11u,
-    TextAbstraction::FontWeight::NORMAL,
-    TextAbstraction::FontWidth::NORMAL,
-    TextAbstraction::FontSlant::NORMAL,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     true,
     false,
@@ -471,8 +507,8 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     NULL,
     0u,
-    TextAbstraction::FontWeight::NORMAL,
-    TextAbstraction::FontWidth::NORMAL,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     false,
@@ -490,8 +526,8 @@ int UtcDaliTextMergeFontDescriptions(void)
     NULL,
     0u,
     TextAbstraction::FontWeight::BOLD,
-    TextAbstraction::FontWidth::NORMAL,
-    TextAbstraction::FontSlant::NORMAL,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     false,
     true,
@@ -507,9 +543,9 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     NULL,
     0u,
-    TextAbstraction::FontWeight::NORMAL,
-    TextAbstraction::FontWidth::NORMAL,
-    TextAbstraction::FontSlant::NORMAL,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
     NON_DEFAULT_FONT_SIZE,
     false,
     false,
@@ -525,9 +561,9 @@ int UtcDaliTextMergeFontDescriptions(void)
     },
     NULL,
     0u,
-    TextAbstraction::FontWeight::NORMAL,
+    TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::EXPANDED,
-    TextAbstraction::FontSlant::NORMAL,
+    TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     false,
     false,
index 33a8744..d06ba71 100644 (file)
@@ -142,7 +142,7 @@ public:
   void GetDescription( FontId id, FontDescription& fontDescription ){}
   PointSize26Dot6 GetPointSize( FontId id ){return 9;}
   FontId FindDefaultFont( Character charcode, PointSize26Dot6 pointSize, bool preferColor ){return 0;}
-  FontId FindFallbackFont( FontId preferredFont, Character charcode, PointSize26Dot6 pointSize, bool preferColor ){return 0;}
+  FontId FindFallbackFont( Character charcode, const FontDescription& fontDescription, PointSize26Dot6 pointSize, bool preferColor ){return 0;}
   FontId GetFontId( const FontPath& path, PointSize26Dot6 pointSize, FaceIndex faceIndex ){return 0;}
   FontId GetFontId( const FontDescription& fontDescription,PointSize26Dot6 pointSize, FaceIndex faceIndex ){return 0;}
   bool IsScalable( const FontPath& path ){return true;}
@@ -407,9 +407,9 @@ FontId FontClient::FindDefaultFont( Character charcode, PointSize26Dot6 pointSiz
   return GetImplementation(*this).FindDefaultFont( charcode, pointSize, preferColor );
 }
 
-FontId FontClient::FindFallbackFont( FontId preferredFont, Character charcode, PointSize26Dot6 pointSize, bool preferColor )
+FontId FontClient::FindFallbackFont( Character charcode, const FontDescription& fontDescription, PointSize26Dot6 pointSize, bool preferColor )
 {
-  return GetImplementation(*this).FindFallbackFont( preferredFont, charcode, pointSize, preferColor );
+  return GetImplementation(*this).FindFallbackFont( charcode, fontDescription, pointSize, preferColor );
 }
 
 FontId FontClient::GetFontId( const FontPath& path, PointSize26Dot6 pointSize, FaceIndex faceIndex )
index 731b89d..3fad598 100644 (file)
@@ -31,25 +31,23 @@ namespace Text
 {
 
 void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
-                            Vector<FontId>& fontIds,
-                            Vector<bool>& isDefaultFont,
                             const TextAbstraction::FontDescription& defaultFontDescription,
                             TextAbstraction::PointSize26Dot6 defaultPointSize,
-                            CharacterIndex startIndex,
-                            Length numberOfCharacters )
+                            CharacterIndex characterIndex,
+                            TextAbstraction::FontDescription& fontDescription,
+                            TextAbstraction::PointSize26Dot6& fontPointSize,
+                            bool& isDefaultFont )
 {
-  // Get the handle to the font client.
-  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  // Initialize with the default font's point size.
+  fontPointSize = defaultPointSize;
 
-  // Pointer to the font id buffer.
-  FontId* fontIdsBuffer = fontIds.Begin();
+  // Initialize with the style parameters of the default font's style.
+  fontDescription = defaultFontDescription;
 
-  // Pointer to the 'is default' font buffer.
-  bool* isDefaultFontBuffer = isDefaultFont.Begin();
+  // Initialize as a default font.
+  isDefaultFont = true;
 
-  // Used to temporarily store the style per character.
-  TextAbstraction::FontDescription fontDescription;
-  TextAbstraction::PointSize26Dot6 fontSize;
+  Length runIndex = 0u;
 
   Length familyIndex = 0u;
   Length weightIndex = 0u;
@@ -57,119 +55,88 @@ void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
   Length slantIndex = 0u;
   Length sizeIndex = 0u;
 
-  // Traverse all the characters.
-  const CharacterIndex lastCharacterPlusOne = startIndex + numberOfCharacters;
-  for( CharacterIndex index = startIndex; index < lastCharacterPlusOne; ++index )
+  bool familyOverriden = false;
+  bool weightOverriden = false;
+  bool widthOverriden = false;
+  bool slantOverriden = false;
+  bool sizeOverriden = false;
+
+  // Traverse all the font descriptions.
+  const FontDescriptionRun* const fontDescriptionsBuffer = fontDescriptions.Begin();
+  for( Vector<FontDescriptionRun>::ConstIterator it = fontDescriptionsBuffer,
+         endIt = fontDescriptions.End();
+       it != endIt;
+       ++it, ++runIndex )
   {
-    bool& defaultFont = *(isDefaultFontBuffer + index - startIndex );
-
-    Length runIndex = 0u;
-
-    bool familyOverriden = false;
-    bool weightOverriden = false;
-    bool widthOverriden = false;
-    bool slantOverriden = false;
-    bool sizeOverriden = false;
-
-    // Traverse all the font descriptions.
-    const FontDescriptionRun* const fontDescriptionsBuffer = fontDescriptions.Begin();
-    for( Vector<FontDescriptionRun>::ConstIterator it = fontDescriptionsBuffer,
-           endIt = fontDescriptions.End();
-         it != endIt;
-         ++it, ++runIndex )
+    // Check whether the character's font is modified by the current font description.
+    const FontDescriptionRun& fontRun = *it;
+    if( ( characterIndex >= fontRun.characterRun.characterIndex ) &&
+        ( characterIndex < fontRun.characterRun.characterIndex + fontRun.characterRun.numberOfCharacters ) )
     {
-      // Check whether the character's font is modified by the current font description.
-      const FontDescriptionRun& fontRun = *it;
-      if( ( index >= fontRun.characterRun.characterIndex ) &&
-          ( index < fontRun.characterRun.characterIndex + fontRun.characterRun.numberOfCharacters ) )
+      if( fontRun.familyDefined )
       {
-        if( fontRun.familyDefined )
-        {
-          defaultFont = false;
-          familyOverriden = true;
-          familyIndex = runIndex;
-        }
-        if( fontRun.weightDefined )
-        {
-          defaultFont = false;
-          weightOverriden = true;
-          weightIndex = runIndex;
-        }
-        if( fontRun.widthDefined )
-        {
-          defaultFont = false;
-          widthOverriden = true;
-          widthIndex = runIndex;
-        }
-        if( fontRun.slantDefined )
-        {
-          defaultFont = false;
-          slantOverriden = true;
-          slantIndex = runIndex;
-        }
-        if( fontRun.sizeDefined )
-        {
-          defaultFont = false;
-          sizeOverriden = true;
-          sizeIndex = runIndex;
-        }
+        isDefaultFont = false;
+        familyOverriden = true;
+        familyIndex = runIndex;
       }
-    }
-
-    // Get the font id if is not the default font.
-    if( !defaultFont )
-    {
-      if( familyOverriden )
+      if( fontRun.weightDefined )
       {
-        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + familyIndex );
-        fontDescription.family = std::string( fontRun.familyName, fontRun.familyLength ); // TODO Could use move constructor when switch to c++11.
+        isDefaultFont = false;
+        weightOverriden = true;
+        weightIndex = runIndex;
       }
-      else
+      if( fontRun.widthDefined )
       {
-        fontDescription.family = defaultFontDescription.family;
+        isDefaultFont = false;
+        widthOverriden = true;
+        widthIndex = runIndex;
       }
-
-      if( weightOverriden )
+      if( fontRun.slantDefined )
       {
-        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + weightIndex );
-        fontDescription.weight = fontRun.weight;
+        isDefaultFont = false;
+        slantOverriden = true;
+        slantIndex = runIndex;
       }
-      else
+      if( fontRun.sizeDefined )
       {
-        fontDescription.weight = defaultFontDescription.weight;
+        isDefaultFont = false;
+        sizeOverriden = true;
+        sizeIndex = runIndex;
       }
+    }
+  }
 
-      if( widthOverriden )
-      {
-        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + widthIndex );
-        fontDescription.width = fontRun.width;
-      }
-      else
-      {
-        fontDescription.width = defaultFontDescription.width;
-      }
+  // Get the font's description if is not the default font.
+  if( !isDefaultFont )
+  {
+    if( familyOverriden )
+    {
+      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + familyIndex );
+      fontDescription.family = std::string( fontRun.familyName, fontRun.familyLength );
+    }
 
-      if( slantOverriden )
-      {
-        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + slantIndex );
-        fontDescription.slant = fontRun.slant;
-      }
-      else
-      {
-        fontDescription.slant = defaultFontDescription.slant;
-      }
+    if( weightOverriden )
+    {
+      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + weightIndex );
+      fontDescription.weight = fontRun.weight;
+    }
 
-      if( sizeOverriden )
-      {
-        const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + sizeIndex );
-        fontSize = fontRun.size;
-      }
-      else
-      {
-        fontSize = defaultPointSize;
-      }
+    if( widthOverriden )
+    {
+      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + widthIndex );
+      fontDescription.width = fontRun.width;
+    }
 
-      *( fontIdsBuffer + index - startIndex ) = fontClient.GetFontId( fontDescription, fontSize );
+    if( slantOverriden )
+    {
+      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + slantIndex );
+      fontDescription.slant = fontRun.slant;
+    }
+
+    if( sizeOverriden )
+    {
+      const FontDescriptionRun& fontRun = *( fontDescriptionsBuffer + sizeIndex );
+      fontPointSize = fontRun.size;
     }
   }
 }
index 8052638..14dee1b 100644 (file)
@@ -35,23 +35,23 @@ namespace Text
 {
 
 /**
- * @brief Merges the font descriptions to retrieve the font Id for each character.
+ * @brief Merges font's descriptions to retrieve the combined font's description for a given character.
  *
- * @param[in] fontDescriptions The font descriptions.
- * @param[out] fontIds The font id for each character.
+ * @param[in] fontDescriptions The font's descriptions for the whole text.
+ * @param[in] defaultFontDescription The default font's description.
+ * @param[in] defaultPointSize The default font's point size.
+ * @param[in] characterIndex Index to the character to retrieve its font's description.
+ * @param[out] fontDescription The font's description for the character.
+ * @param[out] fontPointSize The font's point size for the character.
  * @param[out] isDefaultFont Whether the font is a default one.
- * @param[in] defaultFontDescription The default font description.
- * @param[in] defaultPointSize The default font size.
- * @param[in] startIndex The character from where the fonts are merged.
- * @param[in] numberOfCharacters The number of characters to set the font.
  */
 void MergeFontDescriptions( const Vector<FontDescriptionRun>& fontDescriptions,
-                            Vector<FontId>& fontIds,
-                            Vector<bool>& isDefaultFont,
                             const TextAbstraction::FontDescription& defaultFontDescription,
                             TextAbstraction::PointSize26Dot6 defaultPointSize,
-                            CharacterIndex startIndex,
-                            Length numberOfCharacters );
+                            CharacterIndex characterIndex,
+                            TextAbstraction::FontDescription& fontDescription,
+                            TextAbstraction::PointSize26Dot6& fontPointSize,
+                            bool& isDefaultFont );
 
 /**
  * @brief Retrieves the script Id from the script run for a given character's @p index.
index 8b491b0..750fab7 100644 (file)
@@ -63,7 +63,9 @@ bool ValidateFontsPerScript::IsValidFont( FontId fontId ) const
   return false;
 }
 
-FontId DefaultFonts::FindFont( TextAbstraction::FontClient& fontClient, PointSize26Dot6 size ) const
+FontId DefaultFonts::FindFont( TextAbstraction::FontClient& fontClient,
+                               const TextAbstraction::FontDescription& description,
+                               PointSize26Dot6 size ) const
 {
   for( Vector<FontId>::ConstIterator it = mFonts.Begin(),
          endIt = mFonts.End();
@@ -71,7 +73,13 @@ FontId DefaultFonts::FindFont( TextAbstraction::FontClient& fontClient, PointSiz
        ++it )
   {
     const FontId fontId = *it;
-    if( size == fontClient.GetPointSize( fontId ) )
+    TextAbstraction::FontDescription fontDescription;
+    fontClient.GetDescription( fontId, fontDescription );
+
+    if( ( size == fontClient.GetPointSize( fontId ) ) &&
+        ( description.weight == fontDescription.weight ) &&
+        ( description.width == fontDescription.width ) &&
+        ( description.slant == fontDescription.slant ) )
     {
       return fontId;
     }
@@ -374,7 +382,8 @@ void MultilanguageSupport::SetScripts( const Vector<Character>& text,
 void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
                                           const Vector<ScriptRun>& scripts,
                                           const Vector<FontDescriptionRun>& fontDescriptions,
-                                          FontId defaultFontId,
+                                          const TextAbstraction::FontDescription& defaultFontDescription,
+                                          TextAbstraction::PointSize26Dot6 defaultFontPointSize,
                                           CharacterIndex startIndex,
                                           Length numberOfCharacters,
                                           Vector<FontRun>& fonts )
@@ -424,36 +433,13 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
   // Get the font client.
   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
 
-  // Get the default font description and default size.
-  TextAbstraction::FontDescription defaultFontDescription;
-  TextAbstraction::PointSize26Dot6 defaultPointSize = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
-  if( defaultFontId > 0u )
-  {
-    fontClient.GetDescription( defaultFontId, defaultFontDescription );
-    defaultPointSize = fontClient.GetPointSize( defaultFontId );
-  }
-
-  // Merge font descriptions
-  Vector<FontId> fontIds;
-  fontIds.Resize( numberOfCharacters, defaultFontId );
-  Vector<bool> isDefaultFont;
-  isDefaultFont.Resize( numberOfCharacters, true );
-  MergeFontDescriptions( fontDescriptions,
-                         fontIds,
-                         isDefaultFont,
-                         defaultFontDescription,
-                         defaultPointSize,
-                         startIndex,
-                         numberOfCharacters );
-
   const Character* const textBuffer = text.Begin();
-  const FontId* const fontIdsBuffer = fontIds.Begin();
-  const bool* const isDefaultFontBuffer = isDefaultFont.Begin();
+
+  // Iterators of the script runs.
   Vector<ScriptRun>::ConstIterator scriptRunIt = scripts.Begin();
   Vector<ScriptRun>::ConstIterator scriptRunEndIt = scripts.End();
   bool isNewParagraphCharacter = false;
 
-  PointSize26Dot6 currentPointSize = defaultPointSize;
   FontId currentFontId = 0u;
   FontId previousFontId = 0u;
   bool isPreviousEmojiScript = false;
@@ -468,24 +454,26 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
     // Get the current character.
     const Character character = *( textBuffer + index );
 
-    // Get the font for the current character.
-    FontId fontId = *( fontIdsBuffer + index - startIndex );
+    TextAbstraction::FontDescription currentFontDescription;
+    TextAbstraction::PointSize26Dot6 currentFontPointSize = defaultFontPointSize;
+    bool isDefaultFont = true;
+    MergeFontDescriptions( fontDescriptions,
+                           defaultFontDescription,
+                           defaultFontPointSize,
+                           index,
+                           currentFontDescription,
+                           currentFontPointSize,
+                           isDefaultFont );
 
-    // Whether the font being validated for the current character is a default one not set by the user.
-    const bool isDefault = *( isDefaultFontBuffer + index - startIndex );
+    // Get the font for the current character.
+    FontId fontId = fontClient.GetFontId( currentFontDescription, currentFontPointSize );
+    currentFontId = fontId;
 
     // Get the script for the current character.
     const Script script = GetScript( index,
                                      scriptRunIt,
                                      scriptRunEndIt );
 
-    // Get the current point size.
-    if( currentFontId != fontId )
-    {
-      currentPointSize = fontClient.GetPointSize( fontId );
-      currentFontId = fontId;
-    }
-
 #ifdef DEBUG_ENABLED
     {
       Dali::TextAbstraction::FontDescription description;
@@ -509,7 +497,9 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
     FontId cachedDefaultFontId = 0u;
     if( NULL != defaultFonts )
     {
-      cachedDefaultFontId = defaultFonts->FindFont( fontClient, currentPointSize );
+      cachedDefaultFontId = defaultFonts->FindFont( fontClient,
+                                                    currentFontDescription,
+                                                    currentFontPointSize );
     }
 
     // Whether the cached default font is valid.
@@ -562,7 +552,7 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
       if( isCommonScript )
       {
         if( isValidCachedDefaultFont &&
-            ( isDefault || ( currentFontId == previousFontId ) ) &&
+            ( isDefaultFont || ( currentFontId == previousFontId ) ) &&
             !isEmojiScript )
         {
           // At this point the character common for all scripts has no font assigned.
@@ -631,7 +621,10 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
               const bool preferColor = ( TextAbstraction::EMOJI == script );
 
               // Find a fallback-font.
-              fontId = fontClient.FindFallbackFont( currentFontId, character, currentPointSize, preferColor );
+              fontId = fontClient.FindFallbackFont( character,
+                                                    currentFontDescription,
+                                                    currentFontPointSize,
+                                                    preferColor );
 
               if( 0u == fontId )
               {
@@ -639,13 +632,15 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
                 defaultFontsPerScript = *( defaultFontPerScriptCacheBuffer + TextAbstraction::LATIN );
                 if( NULL != defaultFontsPerScript )
                 {
-                  fontId = defaultFontsPerScript->FindFont( fontClient, currentPointSize );
+                  fontId = defaultFontsPerScript->FindFont( fontClient,
+                                                            currentFontDescription,
+                                                            currentFontPointSize );
                 }
               }
 
               if( 0u == fontId )
               {
-                fontId = fontClient.FindDefaultFont( UTF32_A, currentPointSize );
+                fontId = fontClient.FindDefaultFont( UTF32_A, currentFontPointSize );
               }
 
               // Cache the font.
index ff5e94d..3f568a2 100644 (file)
@@ -94,11 +94,14 @@ struct DefaultFonts
    * @brief Finds a default font for the given @p size.
    *
    * @param[in] fontClient The font client.
+   * @param[in] description The font's description.
    * @param[in] size The given size.
    *
    * @return The font id of a default font for the given @p size. If there isn't any font cached it returns 0.
    */
-  FontId FindFont( TextAbstraction::FontClient& fontClient, PointSize26Dot6 size ) const;
+  FontId FindFont( TextAbstraction::FontClient& fontClient,
+                   const TextAbstraction::FontDescription& description,
+                   PointSize26Dot6 size ) const;
 
   Vector<FontId> mFonts;
 };
@@ -141,7 +144,8 @@ public:
   void ValidateFonts( const Vector<Character>& text,
                       const Vector<ScriptRun>& scripts,
                       const Vector<FontDescriptionRun>& fontDescriptions,
-                      FontId defaultFontId,
+                      const TextAbstraction::FontDescription& defaultFontDescription,
+                      TextAbstraction::PointSize26Dot6 defaultFontPointSize,
                       CharacterIndex startIndex,
                       Length numberOfCharacters,
                       Vector<FontRun>& fonts );
index e612054..795e7ae 100644 (file)
@@ -62,7 +62,8 @@ void MultilanguageSupport::SetScripts( const Vector<Character>& text,
 void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
                                           const Vector<ScriptRun>& scripts,
                                           const Vector<FontDescriptionRun>& fontDescriptions,
-                                          FontId defaultFontId,
+                                          const TextAbstraction::FontDescription& defaultFontDescription,
+                                          TextAbstraction::PointSize26Dot6 defaultFontPointSize,
                                           CharacterIndex startIndex,
                                           Length numberOfCharacters,
                                           Vector<FontRun>& fonts )
@@ -70,7 +71,8 @@ void MultilanguageSupport::ValidateFonts( const Vector<Character>& text,
   GetImplementation( *this ).ValidateFonts( text,
                                             scripts,
                                             fontDescriptions,
-                                            defaultFontId,
+                                            defaultFontDescription,
+                                            defaultFontPointSize,
                                             startIndex,
                                             numberOfCharacters,
                                             fonts );
index d4fd1c7..718ecdb 100644 (file)
@@ -112,8 +112,9 @@ public:
    *
    * @param[in] text Vector of UTF-32 characters.
    * @param[in] scripts Vector containing the script runs for the whole text.
-   * @param[in] fontDescriptions The fonts set by the application developers.
-   * @param[in] defaultFontId The default font's id.
+   * @param[in] fontDescriptions The fonts set through the mark-up string or the input style set through the property system.
+   * @param[in] defaultFontDescription The default font's description set through the property system.
+   * @param[in] defaultFontPointSize The default font's point size set through the property system.
    * @param[in] startIndex The character from where the font info is set.
    * @param[in] numberOfCharacters The number of characters to set the font.
    * @param[out] fonts The validated fonts.
@@ -121,7 +122,8 @@ public:
   void ValidateFonts( const Vector<Character>& text,
                       const Vector<ScriptRun>& scripts,
                       const Vector<FontDescriptionRun>& fontDescriptions,
-                      FontId defaultFontId,
+                      const TextAbstraction::FontDescription& defaultFontDescription,
+                      TextAbstraction::PointSize26Dot6 defaultFontPointSize,
                       CharacterIndex startIndex,
                       Length numberOfCharacters,
                       Vector<FontRun>& fonts );
index 95115da..14670ae 100644 (file)
@@ -824,15 +824,22 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
       // Validate the fonts set through the mark-up string.
       Vector<FontDescriptionRun>& fontDescriptionRuns = mLogicalModel->mFontDescriptionRuns;
 
-      // Get the default font id.
-      const FontId defaultFontId = ( NULL == mFontDefaults ) ? 0u : mFontDefaults->GetFontId( mFontClient );
+      // Get the default font's description.
+      TextAbstraction::FontDescription defaultFontDescription;
+      TextAbstraction::PointSize26Dot6 defaultPointSize = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
+      if( NULL != mFontDefaults )
+      {
+        defaultFontDescription = mFontDefaults->mFontDescription;
+        defaultPointSize = mFontDefaults->mDefaultPointSize * 64u;
+      }
 
       // Validates the fonts. If there is a character with no assigned font it sets a default one.
       // After this call, fonts are validated.
       multilanguageSupport.ValidateFonts( utf32Characters,
                                           scripts,
                                           fontDescriptionRuns,
-                                          defaultFontId,
+                                          defaultFontDescription,
+                                          defaultPointSize,
                                           startIndex,
                                           requestedNumberOfCharacters,
                                           validFonts );
index 4c0316f..f6544cb 100644 (file)
@@ -428,7 +428,7 @@ void Controller::SetDefaultFontFamily( const std::string& defaultFontFamily )
 
   mImpl->mFontDefaults->mFontDescription.family = defaultFontFamily;
   DALI_LOG_INFO( gLogFilter, Debug::General, "Controller::SetDefaultFontFamily %s\n", defaultFontFamily.c_str());
-  mImpl->mFontDefaults->familyDefined = true;
+  mImpl->mFontDefaults->familyDefined = !defaultFontFamily.empty();
 
   // Clear the font-specific data
   ClearFontData();
index b31decb..190a3f3 100644 (file)
@@ -78,7 +78,7 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
       /// Weight key
       Property::Value* weightValue = map.Find( WEIGHT_KEY );
 
-      FontWeight weight = TextAbstraction::FontWeight::NORMAL;
+      FontWeight weight = TextAbstraction::FontWeight::NONE;
       const bool weightDefined = weightValue != NULL;
       if( weightDefined )
       {
@@ -93,7 +93,7 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
       /// Width key
       Property::Value* widthValue = map.Find( WIDTH_KEY );
 
-      FontWidth width = TextAbstraction::FontWidth::NORMAL;
+      FontWidth width = TextAbstraction::FontWidth::NONE;
       const bool widthDefined = widthValue != NULL;
       if( widthDefined )
       {
@@ -108,7 +108,7 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
       /// Slant key
       Property::Value* slantValue = map.Find( SLANT_KEY );
 
-      FontSlant slant = TextAbstraction::FontSlant::NORMAL;
+      FontSlant slant = TextAbstraction::FontSlant::NONE;
       const bool slantDefined = slantValue != NULL;
       if( slantDefined )
       {
@@ -125,17 +125,20 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
         case FontStyle::DEFAULT:
         {
           // Sets the default font's style values.
-          if( weightDefined && ( controller->GetDefaultFontWeight() != weight ) )
+          if( !weightDefined ||
+              ( weightDefined && ( controller->GetDefaultFontWeight() != weight ) ) )
           {
             controller->SetDefaultFontWeight( weight );
           }
 
-          if( widthDefined && ( controller->GetDefaultFontWidth() != width ) )
+          if( !widthDefined ||
+              ( widthDefined && ( controller->GetDefaultFontWidth() != width ) ) )
           {
             controller->SetDefaultFontWidth( width );
           }
 
-          if( slantDefined && ( controller->GetDefaultFontSlant() != slant ) )
+          if( !slantDefined ||
+              ( slantDefined && ( controller->GetDefaultFontSlant() != slant ) ) )
           {
             controller->SetDefaultFontSlant( slant );
           }
@@ -144,23 +147,46 @@ void SetFontStyleProperty( ControllerPtr controller, const Property::Value& valu
         case FontStyle::INPUT:
         {
           // Sets the input font's style values.
-          if( weightDefined && ( controller->GetInputFontWeight() != weight ) )
+          if( !weightDefined ||
+              ( weightDefined && ( controller->GetInputFontWeight() != weight ) ) )
           {
             controller->SetInputFontWeight( weight );
           }
 
-          if( widthDefined && ( controller->GetInputFontWidth() != width ) )
+          if( !widthDefined ||
+              ( widthDefined && ( controller->GetInputFontWidth() != width ) ) )
           {
             controller->SetInputFontWidth( width );
           }
 
-          if( slantDefined && ( controller->GetInputFontSlant() != slant ) )
+          if( !slantDefined ||
+              ( slantDefined && ( controller->GetInputFontSlant() != slant ) ) )
           {
             controller->SetInputFontSlant( slant );
           }
           break;
         }
       }
+    } // map not empty
+    else
+    {
+      switch( type )
+      {
+        case FontStyle::DEFAULT:
+        {
+          controller->SetDefaultFontWeight( TextAbstraction::FontWeight::NONE );
+          controller->SetDefaultFontWidth( TextAbstraction::FontWidth::NONE );
+          controller->SetDefaultFontSlant( TextAbstraction::FontSlant::NONE );
+          break;
+        }
+        case FontStyle::INPUT:
+        {
+          controller->SetInputFontWeight( TextAbstraction::FontWeight::NONE );
+          controller->SetInputFontWidth( TextAbstraction::FontWidth::NONE );
+          controller->SetInputFontSlant( TextAbstraction::FontSlant::NONE );
+          break;
+        }
+      }
     }
   }
 }