Updates for const->constexpr
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Text-Layout.cpp
old mode 100644 (file)
new mode 100755 (executable)
index b521976..05226d4
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -62,7 +62,7 @@ void Print( const LineRun& line )
 {
   std::cout << "        glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
   std::cout << "    character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
 {
   std::cout << "        glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
   std::cout << "    character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
-  std::cout << "                   width : " << line.width << std::endl;
+  std::cout << "                   width : " << floor(line.width) << std::endl;
   std::cout << "                ascender : " << line.ascender << std::endl;
   std::cout << "               descender : " << line.descender << std::endl;
   std::cout << "             extraLength : " << line.extraLength << std::endl;
   std::cout << "                ascender : " << line.ascender << std::endl;
   std::cout << "               descender : " << line.descender << std::endl;
   std::cout << "             extraLength : " << line.extraLength << std::endl;
@@ -84,10 +84,10 @@ bool LayoutTextTest( const LayoutTextData& data )
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHindiRegular.ttf" );
 
   // 1) Create the model.
 
   // 1) Create the model.
-  LogicalModelPtr logicalModel;
-  VisualModelPtr visualModel;
+  ModelPtr textModel;
   MetricsPtr metrics;
   Size layoutSize;
 
   MetricsPtr metrics;
   Size layoutSize;
 
@@ -100,16 +100,18 @@ bool LayoutTextTest( const LayoutTextData& data )
   }
 
   LayoutOptions options;
   }
 
   LayoutOptions options;
-  options.reorder = false;
   options.align = false;
   CreateTextModel( data.text,
                    data.textArea,
                    fontDescriptionRuns,
                    options,
                    layoutSize,
   options.align = false;
   CreateTextModel( data.text,
                    data.textArea,
                    fontDescriptionRuns,
                    options,
                    layoutSize,
-                   logicalModel,
-                   visualModel,
-                   metrics );
+                   textModel,
+                   metrics,
+                   false );
+
+  LogicalModelPtr logicalModel = textModel->mLogicalModel;
+  VisualModelPtr visualModel = textModel->mVisualModel;
 
   // 2) Clear the layout.
   Vector<LineRun>& lines = visualModel->mLines;
 
   // 2) Clear the layout.
   Vector<LineRun>& lines = visualModel->mLines;
@@ -156,23 +158,12 @@ bool LayoutTextTest( const LayoutTextData& data )
   engine.SetMetrics( metrics );
   engine.SetLayout( data.layout );
 
   engine.SetMetrics( metrics );
   engine.SetLayout( data.layout );
 
-  const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
-  float outlineWidth = visualModel->GetOutlineWidth();
-
+  textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
+  textModel->mLineWrapMode = LineWrap::WORD;
+  textModel->mIgnoreSpacesAfterText = true;
+  textModel->mMatchSystemLanguageDirection = false;
   Layout::Parameters layoutParameters( data.textArea,
   Layout::Parameters layoutParameters( data.textArea,
-                                       logicalModel->mText.Begin(),
-                                       logicalModel->mLineBreakInfo.Begin(),
-                                       logicalModel->mWordBreakInfo.Begin(),
-                                       ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
-                                       visualModel->mGlyphs.Begin(),
-                                       visualModel->mGlyphsToCharacters.Begin(),
-                                       visualModel->mCharactersPerGlyph.Begin(),
-                                       visualModel->mCharactersToGlyph.Begin(),
-                                       visualModel->mGlyphsPerCharacter.Begin(),
-                                       totalNumberOfGlyphs,
-                                       Text::HorizontalAlignment::BEGIN,
-                                       Text::LineWrap::WORD,
-                                       outlineWidth );
+                                       textModel );
 
   layoutParameters.isLastNewParagraph = isLastNewParagraph;
 
 
   layoutParameters.isLastNewParagraph = isLastNewParagraph;
 
@@ -184,11 +175,11 @@ bool LayoutTextTest( const LayoutTextData& data )
 
   layoutSize = Vector2::ZERO;
 
 
   layoutSize = Vector2::ZERO;
 
+  bool isAutoScroll = false;
   const bool updated = engine.LayoutText( layoutParameters,
   const bool updated = engine.LayoutText( layoutParameters,
-                                          glyphPositions,
-                                          lines,
                                           layoutSize,
                                           layoutSize,
-                                          data.ellipsis );
+                                          data.ellipsis,
+                                          isAutoScroll );
 
   // 4) Compare the results.
 
 
   // 4) Compare the results.
 
@@ -208,7 +199,7 @@ bool LayoutTextTest( const LayoutTextData& data )
   {
     const Vector2& position = *( glyphPositions.Begin() + index );
 
   {
     const Vector2& position = *( glyphPositions.Begin() + index );
 
-    if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
+    if( fabsf( std::round( position.x ) - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
     {
       std::cout << "  Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
       return false;
     {
       std::cout << "  Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
       return false;
@@ -265,7 +256,7 @@ bool LayoutTextTest( const LayoutTextData& data )
       return false;
     }
 
       return false;
     }
 
-    if( fabsf( line.width - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
+    if( fabsf( floor( line.width ) - expectedLine.width ) > Math::MACHINE_EPSILON_1 )
     {
       std::cout << "  Different line info for line : " << index << std::endl;
       Print( line );
     {
       std::cout << "  Different line info for line : " << index << std::endl;
       Print( line );
@@ -319,117 +310,6 @@ bool LayoutTextTest( const LayoutTextData& data )
 
 //////////////////////////////////////////////////////////
 
 
 //////////////////////////////////////////////////////////
 
-struct ReLayoutRightToLeftLinesData
-{
-  std::string         description;
-  std::string         text;
-  Size                textArea;
-  unsigned int        numberOfFonts;
-  FontDescriptionRun* fontDescriptions;
-  unsigned int        totalNumberOfGlyphs;
-  float*              positions;
-  unsigned int        startIndex;
-  unsigned int        numberOfCharacters;
-};
-
-bool ReLayoutRightToLeftLinesTest( const ReLayoutRightToLeftLinesData& data )
-{
-  // Load some fonts.
-  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
-  fontClient.SetDpi( 96u, 96u );
-
-  char* pathNamePtr = get_current_dir_name();
-  const std::string pathName( pathNamePtr );
-  free( pathNamePtr );
-
-  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
-  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansHebrewRegular.ttf" );
-  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
-
-  // 1) Create the model.
-  LogicalModelPtr logicalModel;
-  VisualModelPtr visualModel;
-  MetricsPtr metrics;
-  Size layoutSize;
-
-  Vector<FontDescriptionRun> fontDescriptionRuns;
-  if( 0u != data.numberOfFonts )
-  {
-    fontDescriptionRuns.Insert( fontDescriptionRuns.End(),
-                                data.fontDescriptions,
-                                data.fontDescriptions + data.numberOfFonts );
-  }
-
-  LayoutOptions options;
-  options.reorder = false;
-  options.align = false;
-  CreateTextModel( data.text,
-                   data.textArea,
-                   fontDescriptionRuns,
-                   options,
-                   layoutSize,
-                   logicalModel,
-                   visualModel,
-                   metrics );
-
-  // 2) Call the ReLayoutRightToLeftLines() method.
-  Layout::Engine engine;
-  engine.SetMetrics( metrics );
-
-  float outlineWidth = visualModel->GetOutlineWidth();
-  Layout::Parameters layoutParameters( data.textArea,
-                                       logicalModel->mText.Begin(),
-                                       logicalModel->mLineBreakInfo.Begin(),
-                                       logicalModel->mWordBreakInfo.Begin(),
-                                       ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
-                                       visualModel->mGlyphs.Begin(),
-                                       visualModel->mGlyphsToCharacters.Begin(),
-                                       visualModel->mCharactersPerGlyph.Begin(),
-                                       visualModel->mCharactersToGlyph.Begin(),
-                                       visualModel->mGlyphsPerCharacter.Begin(),
-                                       visualModel->mGlyphs.Count(),
-                                       Text::HorizontalAlignment::BEGIN,
-                                       Text::LineWrap::WORD,
-                                       outlineWidth );
-
-  layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
-  layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
-
-  engine.ReLayoutRightToLeftLines( layoutParameters,
-                                   data.startIndex,
-                                   data.numberOfCharacters,
-                                   visualModel->mGlyphPositions );
-
-  // 3) Compare the results.
-  Vector<Vector2>& glyphPositions = visualModel->mGlyphPositions;
-
-  if( data.totalNumberOfGlyphs != visualModel->mGlyphs.Count() )
-  {
-    std::cout << "  Different number of glyphs : " << visualModel->mGlyphs.Count() << ", expected : " << data.totalNumberOfGlyphs << std::endl;
-    return false;
-  }
-
-  for( unsigned int index = 0u; index < data.totalNumberOfGlyphs; ++index )
-  {
-    const Vector2& position = *( glyphPositions.Begin() + index );
-
-    if( fabsf( position.x - *( data.positions + 2u * index ) ) > Math::MACHINE_EPSILON_1000 )
-    {
-      std::cout << "  Different position for glyph " << index << " x : " << position.x << ", expected : " << *( data.positions + 2u * index ) << std::endl;
-      return false;
-    }
-    if( fabsf( position.y - *( data.positions + 2u * index + 1u ) ) > Math::MACHINE_EPSILON_1000 )
-    {
-      std::cout << "  Different position for glyph " << index << " y : " << position.y << ", expected : " << *( data.positions + 2u * index + 1u ) << std::endl;
-      return false;
-    }
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////
-
 struct AlignData
 {
   std::string                       description;
 struct AlignData
 {
   std::string                       description;
@@ -443,6 +323,8 @@ struct AlignData
   unsigned int                      numberOfCharacters;
   unsigned int                      numberOfLines;
   float*                            lineOffsets;
   unsigned int                      numberOfCharacters;
   unsigned int                      numberOfLines;
   float*                            lineOffsets;
+  Dali::LayoutDirection::Type       layoutDirection;
+  bool                              matchSystemLanguageDirection;
 };
 
 bool AlignTest( const AlignData& data )
 };
 
 bool AlignTest( const AlignData& data )
@@ -460,8 +342,7 @@ bool AlignTest( const AlignData& data )
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
 
   // 1) Create the model.
   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansArabicRegular.ttf" );
 
   // 1) Create the model.
-  LogicalModelPtr logicalModel;
-  VisualModelPtr visualModel;
+  ModelPtr textModel;
   MetricsPtr metrics;
   Size layoutSize;
 
   MetricsPtr metrics;
   Size layoutSize;
 
@@ -480,9 +361,12 @@ bool AlignTest( const AlignData& data )
                    fontDescriptionRuns,
                    options,
                    layoutSize,
                    fontDescriptionRuns,
                    options,
                    layoutSize,
-                   logicalModel,
-                   visualModel,
-                   metrics );
+                   textModel,
+                   metrics,
+                   false );
+
+  LogicalModelPtr logicalModel = textModel->mLogicalModel;
+  VisualModelPtr visualModel = textModel->mVisualModel;
 
   // Call the Align method.
   Layout::Engine engine;
 
   // Call the Align method.
   Layout::Engine engine;
@@ -494,7 +378,9 @@ bool AlignTest( const AlignData& data )
                 data.numberOfCharacters,
                 data.horizontalAlignment,
                 visualModel->mLines,
                 data.numberOfCharacters,
                 data.horizontalAlignment,
                 visualModel->mLines,
-                alignmentOffset );
+                alignmentOffset,
+                data.layoutDirection,
+                data.matchSystemLanguageDirection );
 
   // Compare results.
   if( data.numberOfLines != visualModel->mLines.Count() )
 
   // Compare results.
   if( data.numberOfLines != visualModel->mLines.Count() )
@@ -514,7 +400,6 @@ bool AlignTest( const AlignData& data )
       return false;
     }
   }
       return false;
     }
   }
-
   return true;
 }
 
   return true;
 }
 
@@ -535,6 +420,7 @@ bool AlignTest( const AlignData& data )
 // UtcDaliTextLayoutMultilineText03
 // UtcDaliTextLayoutMultilineText04
 // UtcDaliTextLayoutMultilineText05
 // UtcDaliTextLayoutMultilineText03
 // UtcDaliTextLayoutMultilineText04
 // UtcDaliTextLayoutMultilineText05
+// UtcDaliTextLayoutMultilineText06
 // UtcDaliTextUpdateLayout01
 // UtcDaliTextUpdateLayout02
 // UtcDaliTextUpdateLayout03
 // UtcDaliTextUpdateLayout01
 // UtcDaliTextUpdateLayout02
 // UtcDaliTextUpdateLayout03
@@ -582,7 +468,7 @@ int UtcDaliTextLayoutSetGetCursorWidth(void)
 
   Layout::Engine engine;
 
 
   Layout::Engine engine;
 
-  DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 0, engine.GetCursorWidth(), TEST_LOCATION );
 
   engine.SetCursorWidth( 2 );
   DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
 
   engine.SetCursorWidth( 2 );
   DALI_TEST_EQUALS( 2, engine.GetCursorWidth(), TEST_LOCATION );
@@ -705,15 +591,16 @@ int UtcDaliTextLayoutSmallTextArea02(void)
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun );
   Size textArea(1.f, 1.f);
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun );
   Size textArea(1.f, 1.f);
-  Size layoutSize(80.f, 20.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 };
+  Size layoutSize(81.f, 19.f);
+  float positions[] = { 0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f };
   struct LineRun line =
   {
     { 0u, 11u },
     { 0u, 11u },
   struct LineRun line =
   {
     { 0u, 11u },
     { 0u, 11u },
-    80.f,
+    81.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -788,14 +675,14 @@ int UtcDaliTextLayoutMultilineText01(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun1 );
   fontDescriptionRuns.PushBack( fontDescriptionRun2 );
   Size textArea(100.f, 300.f);
   fontDescriptionRuns.PushBack( fontDescriptionRun1 );
   fontDescriptionRuns.PushBack( fontDescriptionRun2 );
   Size textArea(100.f, 300.f);
-  Size layoutSize(95.f, 97.f);
+  Size layoutSize(97.f, 95.f);
   float positions[] =
   {
   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, -3.f, 42.f, -12.f,
-    1.f, -12.f,  9.f,  -9.f, 17.f,  -9.f, 27.f,  -9.f, 36.f, -9.f, 45.f, -11.f, 51.f, -0.f,
-    1.f, -12.f, 11.f, -12.f, 15.f, -12.f, 26.f,  -9.f, 35.f, -9.f, 41.f,  -9.f, 50.f, -9.f, 59.f, -11.f, 65.f, -0.f,
-    1.f, -12.f,  5.f, -12.f,  9.f,  -9.f, 19.f,  -9.f, 28.f, -9.f, 35.f,  -0.f, 41.f, -9.f, 50.f, -12.f, 54.f, -0.f, 59.f, -11.f, 66.f,  -9.f, 75.f, -9.f, 83.f, -11.f, 91.f, -2.f
+    0.f, -12.f, 10.f,  -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f,  -0.f, 40.f, -9.f, 52.f,  -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,
+    0.f, -13.f,  9.f,  -9.f, 19.f,  -9.f, 32.f,  -9.f, 41.f, -2.f, 45.f, -12.f,
+    0.f, -12.f,  9.f,  -9.f, 18.f,  -9.f, 28.f,  -9.f, 38.f, -9.f, 47.f, -11.f, 53.f, -0.f,
+    0.f, -12.f, 10.f, -12.f, 15.f, -12.f, 26.f,  -9.f, 35.f, -9.f, 42.f,  -9.f, 52.f, -9.f, 61.f, -11.f, 67.f, -0.f,
+    0.f, -12.f,  4.f, -12.f,  9.f,  -9.f, 19.f,  -9.f, 29.f, -9.f, 36.f,  -0.f, 42.f, -9.f, 52.f, -12.f, 57.f, -0.f, 62.f, -11.f, 69.f,  -9.f, 79.f, -9.f, 87.f, -11.f, 95.f, -2.f
   };
   struct LineRun line0 =
   {
   };
   struct LineRun line0 =
   {
@@ -803,8 +690,9 @@ int UtcDaliTextLayoutMultilineText01(void)
     { 0u, 12u },
     81.f,
     15.f,
     { 0u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -813,9 +701,10 @@ int UtcDaliTextLayoutMultilineText01(void)
   {
     { 12u, 6u },
     { 12u, 6u },
   {
     { 12u, 6u },
     { 12u, 6u },
-    43.f,
+    44.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -825,10 +714,11 @@ int UtcDaliTextLayoutMultilineText01(void)
   {
     { 18u, 7u },
     { 18u, 7u },
   {
     { 18u, 7u },
     { 18u, 7u },
-    52.f,
+    53.f,
     15.f,
     -4.f,
     15.f,
     -4.f,
-    5.f,
+    6.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -840,7 +730,8 @@ int UtcDaliTextLayoutMultilineText01(void)
     66.f,
     15.f,
     -4.f,
     66.f,
     15.f,
     -4.f,
-    5.f,
+    6.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -849,11 +740,12 @@ int UtcDaliTextLayoutMultilineText01(void)
   {
     { 34u, 14u },
     { 35u, 14u },
   {
     { 34u, 14u },
     { 35u, 14u },
-    95.f,
+    97.f,
     15.f,
     -4.f,
     0.f,
     0.f,
     15.f,
     -4.f,
     0.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -982,15 +874,15 @@ int UtcDaliTextLayoutMultilineText02(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun4 );
   fontDescriptionRuns.PushBack( fontDescriptionRun5 );
   Size textArea(100.f, 300.f);
   fontDescriptionRuns.PushBack( fontDescriptionRun4 );
   fontDescriptionRuns.PushBack( fontDescriptionRun5 );
   Size textArea(100.f, 300.f);
-  Size layoutSize(81.f, 120.f);
+  Size layoutSize(81.f, 114.f);
   float positions[] =
   {
   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, 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,
+    0.f, -12.f, 10.f,  -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f,  -0.f, 40.f,  -9.f, 52.f,  -9.f, 62.f,  -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,  //  0 .. 11
+    0.f, -13.f,  9.f,  -9.f, 19.f,  -9.f, 32.f,  -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f,  -0.f,                           // 12 .. 21
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                // 22 .. 27
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f,  -0.f,                            // 28 .. 37
+    4.f, -13.f,  12.f,  -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f,  -0.f, 42.f,  -9.f, 54.f,  -9.f, 64.f,  -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,  // 38 .. 49
+    4.f, -13.f,  13.f,  -9.f, 23.f,  -9.f, 36.f,  -9.f, 0.f, -2.f,                                                                                            // 50 .. 54
   };
   struct LineRun line0 =
   {
   };
   struct LineRun line0 =
   {
@@ -998,8 +890,9 @@ int UtcDaliTextLayoutMultilineText02(void)
     { 0u, 12u },
     81.f,
     15.f,
     { 0u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1008,10 +901,11 @@ int UtcDaliTextLayoutMultilineText02(void)
   {
     { 12u, 10u },
     { 12u, 10u },
   {
     { 12u, 10u },
     { 12u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1022,7 +916,8 @@ int UtcDaliTextLayoutMultilineText02(void)
     { 22u, 6u },
     34.f,
     15.f,
     { 22u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1032,10 +927,11 @@ int UtcDaliTextLayoutMultilineText02(void)
   {
     { 28u, 10u },
     { 28u, 10u },
   {
     { 28u, 10u },
     { 28u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1046,8 +942,9 @@ int UtcDaliTextLayoutMultilineText02(void)
     { 38u, 12u },
     79.f,
     15.f,
     { 38u, 12u },
     79.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1056,9 +953,10 @@ int UtcDaliTextLayoutMultilineText02(void)
   {
     { 50u, 5u },
     { 50u, 5u },
   {
     { 50u, 5u },
     { 50u, 5u },
-    43.f,
+    45.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1126,20 +1024,21 @@ int UtcDaliTextLayoutMultilineText03(void)
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun );
   Size textArea(100.f, 300.f);
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun );
   Size textArea(100.f, 300.f);
-  Size layoutSize(96.f, 60.f);
+  Size layoutSize(98.f, 57.f);
   float positions[] =
   {
   float positions[] =
   {
-    1.f, -12.f, 12.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f,  -9.f, 36.f,  -9.f, 47.f, -9.f, 57.f, -9.f, 63.f, -13.f, 66.f, -13.f, 75.f, -13.f, 85.f,  -9.f,
-    1.f,  -9.f, 13.f, -9.f, 23.f, -13.f, 32.f,  -9.f, 40.f, -13.f, 44.f, -13.f, 47.f, -9.f, 56.f, -9.f, 67.f,  -9.f, 77.f,  -9.f, 83.f, -13.f, 86.f, -13.f,
-    0.f, -13.f, 10.f, -9.f, 18.f,  -9.f, 30.f,  -9.f, 39.f,  -3.f,
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f,  -9.f, 36.f,  -9.f, 48.f, -9.f, 58.f, -9.f, 65.f, -13.f, 68.f, -13.f, 77.f, -13.f, 86.f,  -9.f,
+    0.f,  -9.f, 13.f, -9.f, 23.f, -13.f, 31.f,  -9.f, 41.f, -13.f, 45.f, -13.f, 48.f, -9.f, 57.f, -9.f, 69.f,  -9.f, 79.f,  -9.f, 85.f, -13.f, 88.f, -13.f,
+    0.f, -13.f,  9.f, -9.f, 19.f,  -9.f, 32.f,  -9.f, 41.f,  -2.f,
   };
   struct LineRun line0 =
   {
     { 0u, 12u },
     { 0u, 12u },
   };
   struct LineRun line0 =
   {
     { 0u, 12u },
     { 0u, 12u },
-    94.f,
+    95.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1149,9 +1048,10 @@ int UtcDaliTextLayoutMultilineText03(void)
   {
     { 12u, 12u },
     { 12u, 12u },
   {
     { 12u, 12u },
     { 12u, 12u },
-    96.f,
+    98.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1161,9 +1061,10 @@ int UtcDaliTextLayoutMultilineText03(void)
   {
     { 24u, 5u },
     { 24u, 5u },
   {
     { 24u, 5u },
     { 24u, 5u },
-    43.f,
+    44.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1227,18 +1128,18 @@ int UtcDaliTextLayoutMultilineText04(void)
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun );
   Size textArea(100.f, 300.f);
   Vector<FontDescriptionRun> fontDescriptionRuns;
   fontDescriptionRuns.PushBack( fontDescriptionRun );
   Size textArea(100.f, 300.f);
-  Size layoutSize(83.f, 40.f);
+  Size layoutSize(84.f, 38.f);
   float positions[] =
   {
   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, -3.f, 82.f, -12.f
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -2.f, 85.f, -12.f
   };
   struct LineRun line0 =
   {
     { 0u, 13u },
     { 0u, 13u },
   };
   struct LineRun line0 =
   {
     { 0u, 13u },
     { 0u, 13u },
-    83.f,
+    84.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1250,7 +1151,8 @@ int UtcDaliTextLayoutMultilineText04(void)
     { 13u, 0u },
     0.f,
     15.f,
     { 13u, 0u },
     0.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1340,21 +1242,22 @@ int UtcDaliTextLayoutMultilineText05(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun2 );
   fontDescriptionRuns.PushBack( fontDescriptionRun3 );
   Size textArea(100.f, 300.f);
   fontDescriptionRuns.PushBack( fontDescriptionRun2 );
   fontDescriptionRuns.PushBack( fontDescriptionRun3 );
   Size textArea(100.f, 300.f);
-  Size layoutSize(88.f, 53.f);
+  Size layoutSize(89.f, 51.f);
   float positions[] =
   {
   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, -14.f, 59.f, -9.f, 69.f, -9.f, 75.f, -13.f, 78.f, -13.f, 87.f, -0.f,
-    0.f, -13.f, 10.f, -9.f, 18.f,  -9.f, 30.f,  -9.f, 39.f, -3.f
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -14.f, 60.f, -9.f, 71.f, -9.f, 77.f, -13.f, 80.f, -13.f, 89.f, -0.f,
+    0.f, -13.f,  9.f, -9.f, 19.f,  -9.f, 32.f,  -9.f, 41.f, -2.f
   };
   struct LineRun line0 =
   {
     { 0u, 12u },
     { 0u, 12u },
   };
   struct LineRun line0 =
   {
     { 0u, 12u },
     { 0u, 12u },
-    88.f,
+    89.f,
     25.f,
     25.f,
-    -8.f,
+    -7.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -1362,9 +1265,10 @@ int UtcDaliTextLayoutMultilineText05(void)
   {
     { 12u, 5u },
     { 12u, 5u },
   {
     { 12u, 5u },
     { 12u, 5u },
-    43.f,
+    44.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1402,6 +1306,197 @@ int UtcDaliTextLayoutMultilineText05(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
+int UtcDaliTextLayoutMultilineText06(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliTextLayoutMultilineText06");
+
+  const std::string fontFamily( "TizenSansHebrew" );
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun;
+  fontDescriptionRun.characterRun.characterIndex = 0u;
+  fontDescriptionRun.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun.familyLength = fontFamily.size();
+  fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+  memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+  fontDescriptionRun.familyDefined = true;
+  fontDescriptionRun.weightDefined = false;
+  fontDescriptionRun.widthDefined = false;
+  fontDescriptionRun.slantDefined = false;
+  fontDescriptionRun.sizeDefined = false;
+
+  Vector<FontDescriptionRun> fontDescriptionRuns;
+  fontDescriptionRuns.PushBack( fontDescriptionRun );
+
+  Size textArea(64.f, 100.f);
+  Size layoutSize(33.f, 38.f);
+  float positions[] =
+  {
+    28.f, -13.f, 18.f, -10.f, 9.f, -10.f, 4.f, -10.f, 0.f, -0.f,
+    23.f, -10.f, 18.f, -10.f, 12.f, -10.f, 4.f, -10.f, 0.f, -10.f
+  };
+  struct LineRun line0 =
+  {
+    { 0u, 5u },
+    { 0u, 5u },
+    32.f,
+    15.f,
+    -4.f,
+    5.f,
+    0.f,
+    0.f,
+    true,
+    false
+  };
+  struct LineRun line1 =
+  {
+    { 5u, 5u },
+    { 5u, 5u },
+    33.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    true,
+    false
+  };
+  Vector<LineRun> lines;
+  lines.PushBack( line0 );
+  lines.PushBack( line1 );
+
+  LayoutTextData data =
+  {
+    "Layout right to left text that doesn't fit in the text area after reordering.",
+    "לכאן שנורו", // If this text is laid-out ltr the width is 64. When reordered, the length is 66. This might cause alignment issues.
+    textArea,
+    1u,
+    fontDescriptionRuns.Begin(),
+    layoutSize,
+    10u,
+    positions,
+    2u,
+    lines.Begin(),
+    Layout::Engine::MULTI_LINE_BOX,
+    0u,
+    10u,
+    false,
+    true
+  };
+
+  if( !LayoutTextTest( data ) )
+  {
+    tet_result(TET_FAIL);
+  }
+
+  tet_result(TET_PASS);
+  END_TEST;
+}
+
+int UtcDaliTextLayoutMultilineText07(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliTextLayoutMultilineText07");
+
+  const std::string fontFamily( "TizenSansHebrew" );
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun;
+  fontDescriptionRun.characterRun.characterIndex = 0u;
+  fontDescriptionRun.characterRun.numberOfCharacters = 9u;
+  fontDescriptionRun.familyLength = fontFamily.size();
+  fontDescriptionRun.familyName = new char[fontDescriptionRun.familyLength];
+  memcpy( fontDescriptionRun.familyName, fontFamily.c_str(), fontDescriptionRun.familyLength );
+  fontDescriptionRun.familyDefined = true;
+  fontDescriptionRun.weightDefined = false;
+  fontDescriptionRun.widthDefined = false;
+  fontDescriptionRun.slantDefined = false;
+  fontDescriptionRun.sizeDefined = false;
+
+  Vector<FontDescriptionRun> fontDescriptionRuns;
+  fontDescriptionRuns.PushBack( fontDescriptionRun );
+
+  Size textArea(26.f, 100.f);
+  Size layoutSize(23.f, 57.f);
+  float positions[] =
+  {
+    11.f, -10.f, 5.f, -10.f, 0.f, -10.f,
+    12.f, -10.f, 8.f, -10.f, 0.f, -13.f,
+    14.f, -10.f, 4.f, -10.f, 0.f, -10.f
+  };
+  struct LineRun line0 =
+  {
+    { 0u, 3u },
+    { 0u, 3u },
+    20.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    true,
+    false
+  };
+  struct LineRun line1 =
+  {
+    { 3u, 3u },
+    { 3u, 3u },
+    22.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    true,
+    false
+  };
+  struct LineRun line2 =
+  {
+    { 6u, 3u },
+    { 6u, 3u },
+    23.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    true,
+    false
+  };
+  Vector<LineRun> lines;
+  lines.PushBack( line0 );
+  lines.PushBack( line1 );
+  lines.PushBack( line2 );
+
+  LayoutTextData data =
+  {
+    "Layout a single word of right to left text that doesn't fit in one single line. When layouting ltr a piece of word fits in the line but it doesn't after reordering.",
+    "שנורולכאן", // If a piece of this text is laid-out ltr the width is 26. When reordered, the length is 27. This might cause alignment issues.
+    textArea,
+    1u,
+    fontDescriptionRuns.Begin(),
+    layoutSize,
+    9u,
+    positions,
+    3u,
+    lines.Begin(),
+    Layout::Engine::MULTI_LINE_BOX,
+    0u,
+    9u,
+    false,
+    true
+  };
+
+  if( !LayoutTextTest( data ) )
+  {
+    tet_result(TET_FAIL);
+  }
+
+  tet_result(TET_PASS);
+  END_TEST;
+}
+
 int UtcDaliTextUpdateLayout01(void)
 {
   ToolkitTestApplication application;
 int UtcDaliTextUpdateLayout01(void)
 {
   ToolkitTestApplication application;
@@ -1653,27 +1748,27 @@ int UtcDaliTextUpdateLayout01(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun16 );
   fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   fontDescriptionRuns.PushBack( fontDescriptionRun16 );
   fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
-  Size layoutSize(92.f, 380.f);
+  Size layoutSize(100.f, 361.f);
   float positions[] =
   {
   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, 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, -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, 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,
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,                                                                                                     //   0 ..  11
+    0.f, -13.f,  9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f,                                                                                                                             //  12 ..  21
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                                                                                                              //  22 ..  27
+    58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f,   //  28 ..  47
+    42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f,                                                                                                                 //  48 ..  58
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f,                                                                                                                                                                                            //  59 ..  63
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f,                                                                                                                           //  64 ..  73
+    4.f, -13.f,  12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,                                                                                                     //  74 ..  85
+    4.f, -13.f,  13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f,                                                                                                                                                                                 //  86 ..  91
+    0.f, -13.f,  8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f,                                                                                                     //  92 .. 103
+    91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f,              // 104 .. 122
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f,                                                                                                                                                                                           // 123 .. 127
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,                                                                                                     // 128 .. 139
+    0.f, -13.f,  9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f,                                                                                                                             // 140 .. 149
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                                                                                                              // 150 .. 155
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f,                                                                                                                           // 156 .. 165
+    4.f, -13.f,  12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,                                                                                                     // 166 .. 177
+    54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f,                                                                               // 178 .. 191
   };
 
   struct LineRun line01 =
   };
 
   struct LineRun line01 =
@@ -1682,8 +1777,9 @@ int UtcDaliTextUpdateLayout01(void)
     { 0u, 12u },
     81.f,
     15.f,
     { 0u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1692,10 +1788,11 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 12u, 10u },
     { 12u, 10u },
   {
     { 12u, 10u },
     { 12u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1706,7 +1803,8 @@ int UtcDaliTextUpdateLayout01(void)
     { 22u, 6u },
     34.f,
     15.f,
     { 22u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1714,35 +1812,38 @@ int UtcDaliTextUpdateLayout01(void)
   };
   struct LineRun line04 =
   {
   };
   struct LineRun line04 =
   {
-    { 28u, 20u },
-    { 28u, 20u },
-    92.f,
+    { 28u, 14u },
+    { 28u, 14u },
+    63.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
-    false,
+    0.f,
+    true,
     false
   };
   struct LineRun line05 =
   {
     false
   };
   struct LineRun line05 =
   {
-    { 48u, 11u },
-    { 48u, 11u },
-    76.f,
+    { 42, 12u },
+    { 42, 12u },
+    79.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
-    false,
+    0.f,
+    true,
     false
   };
   struct LineRun line06 =
   {
     false
   };
   struct LineRun line06 =
   {
-    { 59u, 5u },
-    { 59u, 5u },
-    31.f,
+    { 54u, 10u },
+    { 54u, 10u },
+    69.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1752,12 +1853,13 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 64u, 10u },
     { 64u, 10u },
   {
     { 64u, 10u },
     { 64u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
     0.f,
     0.f,
-    false,
+    0.f,
+    true,
     false
   };
   struct LineRun line08 =
     false
   };
   struct LineRun line08 =
@@ -1766,19 +1868,21 @@ int UtcDaliTextUpdateLayout01(void)
     { 74u, 12u },
     79.f,
     15.f,
     { 74u, 12u },
     79.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
     0.f,
     0.f,
-    false,
+    0.f,
+    true,
     false
   };
   struct LineRun line09 =
   {
     { 86u, 6u },
     { 86u, 6u },
     false
   };
   struct LineRun line09 =
   {
     { 86u, 6u },
     { 86u, 6u },
-    43.f,
+    45.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1788,11 +1892,12 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 92u, 12u },
     { 92u, 12u },
   {
     { 92u, 12u },
     { 92u, 12u },
-    78.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -1800,10 +1905,11 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 104u, 19u },
     { 104u, 19u },
   {
     { 104u, 19u },
     { 104u, 19u },
-    90.f,
+    100.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1814,7 +1920,8 @@ int UtcDaliTextUpdateLayout01(void)
     { 123u, 5u },
     31.f,
     15.f,
     { 123u, 5u },
     31.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1826,8 +1933,9 @@ int UtcDaliTextUpdateLayout01(void)
     { 128u, 12u },
     81.f,
     15.f,
     { 128u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1836,10 +1944,11 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 140u, 10u },
     { 140u, 10u },
   {
     { 140u, 10u },
     { 140u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -1850,7 +1959,8 @@ int UtcDaliTextUpdateLayout01(void)
     { 150u, 6u },
     34.f,
     15.f,
     { 150u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1860,12 +1970,13 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 156u, 10u },
     { 156u, 10u },
   {
     { 156u, 10u },
     { 156u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
     0.f,
     0.f,
-    false,
+    0.f,
+    true,
     false
   };
   struct LineRun line17 =
     false
   };
   struct LineRun line17 =
@@ -1874,9 +1985,10 @@ int UtcDaliTextUpdateLayout01(void)
     { 166u, 12u },
     79.f,
     15.f,
     { 166u, 12u },
     79.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -1884,9 +1996,10 @@ int UtcDaliTextUpdateLayout01(void)
   {
     { 178u, 14u },
     { 178u, 14u },
   {
     { 178u, 14u },
     { 178u, 14u },
-    55.f,
+    63.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -1898,7 +2011,8 @@ int UtcDaliTextUpdateLayout01(void)
     { 192u, 0u },
     0.f,
     15.f,
     { 192u, 0u },
     0.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2209,27 +2323,27 @@ int UtcDaliTextUpdateLayout02(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun16 );
   fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   fontDescriptionRuns.PushBack( fontDescriptionRun16 );
   fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
-  Size layoutSize(92.f, 380.f);
+  Size layoutSize(100.f, 361.f);
   float positions[] =
   {
   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, 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, -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, 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,
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,                                                                                                     //   0 ..  11
+    0.f, -13.f,  9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f,                                                                                                                             //  12 ..  21
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                                                                                                              //  22 ..  27
+    58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f,   //  28 ..  47
+    42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f,                                                                                                                 //  48 ..  58
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f,                                                                                                                                                                                            //  59 ..  63
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f,                                                                                                                           //  64 ..  73
+    4.f, -13.f,  12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,                                                                                                     //  74 ..  85
+    4.f, -13.f,  13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f,                                                                                                                                                                                 //  86 ..  91
+    0.f, -13.f,  8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f,                                                                                                     //  92 .. 103
+    91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f,             // 104 .. 122
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f,                                                                                                                                                                                           // 123 .. 127
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,                                                                                                     // 128 .. 139
+    0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f,                                                                                                                             // 140 .. 149
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                                                                                                              // 150 .. 155
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f,                                                                                                                           // 156 .. 165
+    4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,                                                                                                     // 166 .. 177
+    54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f,                                                                               // 178 .. 191
   };
 
   struct LineRun line01 =
   };
 
   struct LineRun line01 =
@@ -2238,8 +2352,9 @@ int UtcDaliTextUpdateLayout02(void)
     { 0u, 12u },
     81.f,
     15.f,
     { 0u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2248,10 +2363,11 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 12u, 10u },
     { 12u, 10u },
   {
     { 12u, 10u },
     { 12u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2262,7 +2378,8 @@ int UtcDaliTextUpdateLayout02(void)
     { 22u, 6u },
     34.f,
     15.f,
     { 22u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2270,35 +2387,38 @@ int UtcDaliTextUpdateLayout02(void)
   };
   struct LineRun line04 =
   {
   };
   struct LineRun line04 =
   {
-    { 28u, 20u },
-    { 28u, 20u },
-    92.f,
+    { 28u, 14u },
+    { 28u, 14u },
+    63.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
-    false,
+    0.f,
+    true,
     false
   };
   struct LineRun line05 =
   {
     false
   };
   struct LineRun line05 =
   {
-    { 48u, 11u },
-    { 48u, 11u },
-    76.f,
+    { 42u, 12u },
+    { 42u, 12u },
+    79.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
   struct LineRun line06 =
   {
     false,
     false
   };
   struct LineRun line06 =
   {
-    { 59u, 5u },
-    { 59u, 5u },
-    31.f,
+    { 54u, 10u },
+    { 54u, 10u },
+    69.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2308,10 +2428,11 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 64u, 10u },
     { 64u, 10u },
   {
     { 64u, 10u },
     { 64u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2322,8 +2443,9 @@ int UtcDaliTextUpdateLayout02(void)
     { 74u, 12u },
     79.f,
     15.f,
     { 74u, 12u },
     79.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    1.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2332,9 +2454,10 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 86u, 6u },
     { 86u, 6u },
   {
     { 86u, 6u },
     { 86u, 6u },
-    43.f,
+    45.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2344,11 +2467,12 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 92u, 12u },
     { 92u, 12u },
   {
     { 92u, 12u },
     { 92u, 12u },
-    78.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -2356,10 +2480,11 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 104u, 19u },
     { 104u, 19u },
   {
     { 104u, 19u },
     { 104u, 19u },
-    90.f,
+    100.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2370,7 +2495,8 @@ int UtcDaliTextUpdateLayout02(void)
     { 123u, 5u },
     31.f,
     15.f,
     { 123u, 5u },
     31.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2382,8 +2508,9 @@ int UtcDaliTextUpdateLayout02(void)
     { 128u, 12u },
     81.f,
     15.f,
     { 128u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2392,10 +2519,11 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 140u, 10u },
     { 140u, 10u },
   {
     { 140u, 10u },
     { 140u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2406,7 +2534,8 @@ int UtcDaliTextUpdateLayout02(void)
     { 150u, 6u },
     34.f,
     15.f,
     { 150u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2416,10 +2545,11 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 156u, 10u },
     { 156u, 10u },
   {
     { 156u, 10u },
     { 156u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2430,9 +2560,10 @@ int UtcDaliTextUpdateLayout02(void)
     { 166u, 12u },
     79.f,
     15.f,
     { 166u, 12u },
     79.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -2440,9 +2571,10 @@ int UtcDaliTextUpdateLayout02(void)
   {
     { 178u, 14u },
     { 178u, 14u },
   {
     { 178u, 14u },
     { 178u, 14u },
-    55.f,
+    63.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2454,7 +2586,8 @@ int UtcDaliTextUpdateLayout02(void)
     { 192u, 0u },
     0.f,
     15.f,
     { 192u, 0u },
     0.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2765,27 +2898,27 @@ int UtcDaliTextUpdateLayout03(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun16 );
   fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
   fontDescriptionRuns.PushBack( fontDescriptionRun16 );
   fontDescriptionRuns.PushBack( fontDescriptionRun17 );
   Size textArea(100.f, 300.f);
-  Size layoutSize(92.f, 380.f);
+  Size layoutSize(100.f, 361.f);
   float positions[] =
   {
   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, 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, -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, 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,
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,                                                                                                     //   0 ..  11
+    0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f,                                                                                                                              //  12 ..  21
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                                                                                                             //  22 ..  27
+    58.f, -8.f, 52.f, -6.f, 45.f, -8.f, 41.f, -7.f, 39.f, -11.f, 34.f, -0.f, 30.f, -7.f, 28.f, -11.f, 23.f, -11.f, 16.f, -8.f, 15.f, -11.f, 9.f, -11.f, 4.f, -8.f, 0.f, -0.f, 4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f,     //  28 ..  47
+    42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f, 59.f, -10.f, 50.f, -13.f, 45.f, -10.f, 36.f, -10.f, 31.f, -0.f,                                                                                                                //  48 ..  58
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 0.f, -0.f,                                                                                                                                                                                           //  59 ..  63
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f,                                                                                                                           //  64 ..  73
+    4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,                                                                                                      //  74 ..  85
+    4.f, -13.f, 13.f, -9.f, 23.f, -9.f, 36.f, -9.f, 0.f, -2.f, 0.f, -12.f,                                                                                                                                                                                  //  86 ..  91
+    0.f, -13.f, 8.f, -9.f, 18.f, -13.f, 22.f, -13.f, 25.f, -9.f, 34.f, -0.f, 38.f, -9.f, 50.f, -9.f, 60.f, -9.f, 66.f, -13.f, 69.f, -13.f, 79.f, -0.f,                                                                                                      //  92 .. 103
+    91.f, -8.f, 85.f, -6.f, 78.f, -8.f, 74.f, -7.f, 72.f, -11.f, 67.f, -0.f, 63.f, -7.f, 61.f, -11.f, 56.f, -11.f, 49.f, -8.f, 48.f, -11.f, 42.f, -11.f, 37.f, -8.f, 33.f, -0.f, 23.f, -10.f, 14.f, -13.f, 9.f, -10.f, 0.f, -10.f, 98.f, -0.f,              // 104 .. 122
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -0.f,                                                                                                                                                                                          // 123 .. 127
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,                                                                                                     // 128 .. 139
+    0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 69.f, -10.f, 60.f, -13.f, 54.f, -10.f, 46.f, -10.f, 79.f, -0.f,                                                                                                                              // 140 .. 149
+    23.f, -10.f, 18.f, -10.f, 10.f, -13.f, 0.f, -10.f, 31.f, -2.f, 35.f, -12.f,                                                                                                                                                                             // 150 .. 155
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f,                                                                                                                           // 156 .. 165
+    4.f, -13.f, 12.f, -9.f, 22.f, -13.f, 26.f, -13.f, 29.f, -9.f, 38.f, -0.f, 42.f, -9.f, 54.f, -9.f, 64.f, -9.f, 70.f, -13.f, 73.f, -13.f, 0.f, -0.f,                                                                                                      // 166 .. 177
+    54.f, -8.f, 49.f, -6.f, 41.f, -8.f, 37.f, -7.f, 35.f, -11.f, 31.f, -0.f, 26.f, -7.f, 24.f, -11.f, 19.f, -11.f, 12.f, -8.f, 11.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.f, -0.f,                                                                               // 178 .. 191
   };
 
   struct LineRun line01 =
   };
 
   struct LineRun line01 =
@@ -2794,8 +2927,9 @@ int UtcDaliTextUpdateLayout03(void)
     { 0u, 12u },
     81.f,
     15.f,
     { 0u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2804,10 +2938,11 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 12u, 10u },
     { 12u, 10u },
   {
     { 12u, 10u },
     { 12u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2818,7 +2953,8 @@ int UtcDaliTextUpdateLayout03(void)
     { 22u, 6u },
     34.f,
     15.f,
     { 22u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2826,35 +2962,38 @@ int UtcDaliTextUpdateLayout03(void)
   };
   struct LineRun line04 =
   {
   };
   struct LineRun line04 =
   {
-    { 28u, 20u },
-    { 28u, 20u },
-    92.f,
+    { 28u, 14u },
+    { 28u, 14u },
+    63.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
   struct LineRun line05 =
   {
     false,
     false
   };
   struct LineRun line05 =
   {
-    { 48u, 11u },
-    { 48u, 11u },
-    76.f,
+    { 42u, 12u },
+    { 42u, 12u },
+    79.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
   struct LineRun line06 =
   {
     false,
     false
   };
   struct LineRun line06 =
   {
-    { 59u, 5u },
-    { 59u, 5u },
-    31.f,
+    { 54u, 10u },
+    { 54u, 10u },
+    69.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2864,10 +3003,11 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 64u, 10u },
     { 64u, 10u },
   {
     { 64u, 10u },
     { 64u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2878,8 +3018,9 @@ int UtcDaliTextUpdateLayout03(void)
     { 74u, 12u },
     79.f,
     15.f,
     { 74u, 12u },
     79.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    1.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2888,9 +3029,10 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 86u, 6u },
     { 86u, 6u },
   {
     { 86u, 6u },
     { 86u, 6u },
-    43.f,
+    45.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2900,11 +3042,12 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 92u, 12u },
     { 92u, 12u },
   {
     { 92u, 12u },
     { 92u, 12u },
-    78.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -2912,10 +3055,11 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 104u, 19u },
     { 104u, 19u },
   {
     { 104u, 19u },
     { 104u, 19u },
-    90.f,
+    100.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2926,7 +3070,8 @@ int UtcDaliTextUpdateLayout03(void)
     { 123u, 5u },
     31.f,
     15.f,
     { 123u, 5u },
     31.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2938,8 +3083,9 @@ int UtcDaliTextUpdateLayout03(void)
     { 128u, 12u },
     81.f,
     15.f,
     { 128u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2948,10 +3094,11 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 140u, 10u },
     { 140u, 10u },
   {
     { 140u, 10u },
     { 140u, 10u },
-    76.f,
+    79.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2962,7 +3109,8 @@ int UtcDaliTextUpdateLayout03(void)
     { 150u, 6u },
     34.f,
     15.f,
     { 150u, 6u },
     34.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -2972,10 +3120,11 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 156u, 10u },
     { 156u, 10u },
   {
     { 156u, 10u },
     { 156u, 10u },
-    67.f,
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -2986,9 +3135,10 @@ int UtcDaliTextUpdateLayout03(void)
     { 166u, 12u },
     79.f,
     15.f,
     { 166u, 12u },
     79.f,
     15.f,
-    -5.f,
+    -4.f,
     4.f,
     0.f,
     4.f,
     0.f,
+    0.f,
     false,
     false
   };
     false,
     false
   };
@@ -2996,9 +3146,10 @@ int UtcDaliTextUpdateLayout03(void)
   {
     { 178u, 14u },
     { 178u, 14u },
   {
     { 178u, 14u },
     { 178u, 14u },
-    55.f,
+    63.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -3010,7 +3161,8 @@ int UtcDaliTextUpdateLayout03(void)
     { 192u, 0u },
     0.f,
     15.f,
     { 192u, 0u },
     0.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -3101,7 +3253,8 @@ int UtcDaliTextLayoutEllipsis01(void)
     { 0u, 13u },
     93.f,
     15.f,
     { 0u, 13u },
     93.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -3112,11 +3265,11 @@ int UtcDaliTextLayoutEllipsis01(void)
 
   float positions[] =
   {
 
   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, 83.f, -13.f,
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f, 85.f, -13.f,
   };
 
   Size textArea( 100.f, 50.f );
   };
 
   Size textArea( 100.f, 50.f );
-  Size layoutSize( 100.f, 20.f );
+  Size layoutSize( 100.f, 19.f );
 
   LayoutTextData data =
   {
 
   LayoutTextData data =
   {
@@ -3177,8 +3330,9 @@ int UtcDaliTextLayoutEllipsis02(void)
     { 0u, 12u },
     81.f,
     15.f,
     { 0u, 12u },
     81.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    4.f,
+    0.f,
     0.f,
     false,
     false
     0.f,
     false,
     false
@@ -3187,9 +3341,10 @@ int UtcDaliTextLayoutEllipsis02(void)
   {
     { 12u, 12u },
     { 12u, 12u },
   {
     { 12u, 12u },
     { 12u, 12u },
-    93.f,
+    95.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -3201,12 +3356,12 @@ int UtcDaliTextLayoutEllipsis02(void)
 
   float positions[] =
   {
 
   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, -13.f, 53.f, -9.f, 61.f, -13.f, 65.f, -13.f, 68.f, -9.f, 77.f, -0.f, 81.f, -9.f,
+    0.f, -12.f, 10.f, -9.f, 20.f, -13.f, 24.f, -13.f, 27.f, -9.f, 36.f, -0.f, 40.f, -9.f, 52.f, -9.f, 62.f, -9.f, 69.f, -13.f, 72.f, -13.f, 81.f, -0.f,
+    0.f, -13.f, 9.f, -9.f, 19.f, -9.f, 32.f, -9.f, 41.f, -0.f, 46.f, -13.f, 54.f, -9.f, 64.f, -13.f, 68.f, -13.f, 71.f, -9.f, 80.f, -0.f, 84.f, -9.f,
   };
 
   Size textArea( 100.f, 50.f );
   };
 
   Size textArea( 100.f, 50.f );
-  Size layoutSize( 100.f, 40.f );
+  Size layoutSize( 100.f, 38.f );
 
   LayoutTextData data =
   {
 
   LayoutTextData data =
   {
@@ -3329,11 +3484,12 @@ int UtcDaliTextLayoutEllipsis03(void)
 
   struct LineRun line01 =
   {
 
   struct LineRun line01 =
   {
-    { 0u, 16u },
-    { 0u, 16u },
-    95.f,
+    { 0u, 14u },
+    { 0u, 14u },
+    97.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
@@ -3344,11 +3500,11 @@ int UtcDaliTextLayoutEllipsis03(void)
 
   float positions[] =
   {
 
   float positions[] =
   {
-    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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
+    88.f, -10.f, 80.f, -13.f, 74.f, -10.f, 66.f, -10.f, 60.f, -0.f, 52.f, -10.f, 47.f, -10.f, 39.f, -13.f, 30.f, -10.f, 24.f, -0.f, 17.f, -8.f, 12.f, -6.f, 4.f, -8.f, 0.f, -7.f, 77.f, -11.f, 72.f, -0.f,
   };
 
   Size textArea( 100.f, 50.f );
   };
 
   Size textArea( 100.f, 50.f );
-  Size layoutSize( 100.f, 20.f );
+  Size layoutSize( 100.f, 19.f );
 
   LayoutTextData data =
   {
 
   LayoutTextData data =
   {
@@ -3471,24 +3627,26 @@ int UtcDaliTextLayoutEllipsis04(void)
 
   struct LineRun line01 =
   {
 
   struct LineRun line01 =
   {
-    { 0u, 16u },
-    { 0u, 16u },
-    96.f,
+    { 0u, 10u },
+    { 0u, 10u },
+    69.f,
     15.f,
     15.f,
-    -5.f,
-    3.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     false
   };
   struct LineRun line02 =
   {
     0.f,
     false,
     false
   };
   struct LineRun line02 =
   {
-    { 16u, 18u },
-    { 16u, 18u },
-    97.f,
+    { 10u, 19u },
+    { 10u, 19u },
+    99.f,
     15.f,
     15.f,
-    -5.f,
-    4.f,
+    -4.f,
+    5.f,
+    0.f,
     0.f,
     false,
     true
     0.f,
     false,
     true
@@ -3499,16 +3657,16 @@ int UtcDaliTextLayoutEllipsis04(void)
 
   float positions[] =
   {
 
   float positions[] =
   {
-    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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
-    0.f, -7.f, 5.f, -11.f, 6.f, -11.f, 10.f, -8.f, 17.f, -11.f, 18.f, -11.f, 22.f, -8.f, 28.f, -0.f, 32.f, -10.f, 43.f, -13.f, 50.f, -10.f, 55.f, -10.f, 63.f, -0.f, 68.f, -10.f, 76.f, -10.f, 81.f, -13.f, 89.f, -10.f, 97.f, -0.f,
+    63.f, -10.f, 54.f, -13.f, 49.f, -10.f, 41.f, -10.f, 35.f, -0.f, 27.f, -10.f, 22.f, -10.f, 14.f, -13.f, 4.f, -10.f, 0.f, -0.f, 95.f, -8.f, 90.f, -6.f, 82.f, -8.f, 78.f, -7.f, 77.f, -11.f, 72.f, -0.f,
+    67.f, -7.f, 66.f, -11.f, 60.f, -11.f, 54.f, -8.f, 52.f, -11.f, 46.f, -11.f, 41.f, -8.f, 37.f, -0.f, 27.f, -10.f, 18.f, -13.f, 13.f, -10.f, 4.f, -10.f, 0.f, -0.f, 93.f, -10.f, 88.f, -10.f, 80.f, -13.f, 71.f, -10.f, 65.f, -0.f,
   };
 
   Size textArea( 100.f, 50.f );
   };
 
   Size textArea( 100.f, 50.f );
-  Size layoutSize( 100.f, 40.f );
+  Size layoutSize( 100.f, 38.f );
 
   LayoutTextData data =
   {
 
   LayoutTextData data =
   {
-    "Layout single-line RTL text with ellipsis.",
+    "Layout multi-line RTL text with ellipsis.",
     "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
     textArea,
     6u,
     "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم.",
     textArea,
     6u,
@@ -3561,24 +3719,25 @@ int UtcDaliTextLayoutEllipsis05(void)
   {
     { 0u, 11u },
     { 0u, 11u },
   {
     { 0u, 11u },
     { 0u, 11u },
-    80.f,
+    81.f,
     15.f,
     15.f,
-    -5.f,
+    -4.f,
+    0.f,
     0.f,
     0.f,
     false,
     0.f,
     0.f,
     false,
-    true
+    false
   };
   Vector<LineRun> lines;
   lines.PushBack( line01 );
 
   float positions[] =
   {
   };
   Vector<LineRun> lines;
   lines.PushBack( line01 );
 
   float positions[] =
   {
-    1.f, -12.f
+    0.f, -12.f
   };
 
   Size textArea( 100.f, 19.f );
   };
 
   Size textArea( 100.f, 19.f );
-  Size layoutSize( 100.f, 20.f );
+  Size layoutSize( 81.f, 19.f );
 
   LayoutTextData data =
   {
 
   LayoutTextData data =
   {
@@ -3608,77 +3767,24 @@ int UtcDaliTextLayoutEllipsis05(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextReorderLayout01(void)
+int UtcDaliTextAlign01(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextReorderLayout01");
+  tet_infoline(" UtcDaliTextAlign01");
 
 
-  // Reorder lines. No right to left characters.
+  // Calculate text alignment.
 
   const std::string fontLatin( "TizenSans" );
 
   const std::string fontLatin( "TizenSans" );
-
-  // Set a known font description
-  FontDescriptionRun fontDescriptionRun01;
-  fontDescriptionRun01.characterRun.characterIndex = 0u;
-  fontDescriptionRun01.characterRun.numberOfCharacters = 11u;
-  fontDescriptionRun01.familyLength = fontLatin.size();
-  fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
-  memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
-  fontDescriptionRun01.familyDefined = true;
-  fontDescriptionRun01.weightDefined = false;
-  fontDescriptionRun01.widthDefined = false;
-  fontDescriptionRun01.slantDefined = false;
-  fontDescriptionRun01.sizeDefined = false;
-
-  Vector<FontDescriptionRun> fontDescriptionRuns;
-  fontDescriptionRuns.PushBack( fontDescriptionRun01 );
-
-  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,
-  };
-
-  Size textArea( 100.f, 300.f );
-
-  ReLayoutRightToLeftLinesData data =
-  {
-    "Text with no right to left text.",
-    "Hello world",
-    textArea,
-    1u,
-    fontDescriptionRuns.Begin(),
-    11u,
-    positions,
-    0u,
-    11u
-  };
-
-  if( !ReLayoutRightToLeftLinesTest( data ) )
-  {
-    tet_result(TET_FAIL);
-  }
-
-  tet_result(TET_PASS);
-  END_TEST;
-}
-
-int UtcDaliTextReorderLayout02(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextReorderLayout02");
-
-  // Reorder lines of the first paragraph.
-
   const std::string fontHebrew( "TizenSansHebrew" );
   const std::string fontArabic( "TizenSansArabic" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun01;
   fontDescriptionRun01.characterRun.characterIndex = 0u;
   const std::string fontHebrew( "TizenSansHebrew" );
   const std::string fontArabic( "TizenSansArabic" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun01;
   fontDescriptionRun01.characterRun.characterIndex = 0u;
-  fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun01.familyLength = fontHebrew.size();
+  fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun01.familyLength = fontLatin.size();
   fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
   fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
-  memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
+  memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
   fontDescriptionRun01.familyDefined = true;
   fontDescriptionRun01.weightDefined = false;
   fontDescriptionRun01.widthDefined = false;
   fontDescriptionRun01.familyDefined = true;
   fontDescriptionRun01.weightDefined = false;
   fontDescriptionRun01.widthDefined = false;
@@ -3686,11 +3792,11 @@ int UtcDaliTextReorderLayout02(void)
   fontDescriptionRun01.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun01.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun02;
-  fontDescriptionRun02.characterRun.characterIndex = 10u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun02.familyLength = fontArabic.size();
+  fontDescriptionRun02.characterRun.characterIndex = 12u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
-  memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
+  memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
   fontDescriptionRun02.familyDefined = true;
   fontDescriptionRun02.weightDefined = false;
   fontDescriptionRun02.widthDefined = false;
   fontDescriptionRun02.familyDefined = true;
   fontDescriptionRun02.weightDefined = false;
   fontDescriptionRun02.widthDefined = false;
@@ -3698,7 +3804,7 @@ int UtcDaliTextReorderLayout02(void)
   fontDescriptionRun02.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun03;
   fontDescriptionRun02.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 24u;
+  fontDescriptionRun03.characterRun.characterIndex = 22u;
   fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
   fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
@@ -3710,11 +3816,11 @@ int UtcDaliTextReorderLayout02(void)
   fontDescriptionRun03.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun04;
   fontDescriptionRun03.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 38u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun04.familyLength = fontHebrew.size();
+  fontDescriptionRun04.characterRun.characterIndex = 36u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun04.familyLength = fontLatin.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -3723,10 +3829,10 @@ int UtcDaliTextReorderLayout02(void)
 
   FontDescriptionRun fontDescriptionRun05;
   fontDescriptionRun05.characterRun.characterIndex = 48u;
 
   FontDescriptionRun fontDescriptionRun05;
   fontDescriptionRun05.characterRun.characterIndex = 48u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun05.familyLength = fontHebrew.size();
+  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun05.familyLength = fontLatin.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
   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;
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -3734,8 +3840,8 @@ int UtcDaliTextReorderLayout02(void)
   fontDescriptionRun05.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun06;
   fontDescriptionRun05.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 58u;
-  fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
+  fontDescriptionRun06.characterRun.characterIndex = 60u;
+  fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun06.familyLength = fontArabic.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
   memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
   fontDescriptionRun06.familyLength = fontArabic.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
   memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
@@ -3753,34 +3859,27 @@ int UtcDaliTextReorderLayout02(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] =
-  {
-    87.f, -10.f, 79.f, -13.f, 74.f, -10.f, 66.f, -10.f, 61.f, -0.f, 53.f, -10.f, 48.f, -10.f, 41.f, -13.f, 32.f, -10.f, 27.f, -0.f, 20.f, -8.f, 15.f, -6.f, 8.f, -7.f, 5.f, -7.f, 4.f, -11.f, 0.f, -0.f,
-    23.f, -7.f, 22.f, -11.f, 17.f, -11.f, 12.f, -8.f, 10.f, -11.f, 5.f, -11.f, 0.f, -8.f, 0.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, -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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
-    0.f, -7.f, 5.f, -11.f, 6.f, -11.f, 10.f, -8.f, 17.f, -11.f, 18.f, -11.f, 22.f, -8.f, 30.f, -2.f,
-  };
+  float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
 
   Size textArea( 100.f, 300.f );
-
-  ReLayoutRightToLeftLinesData data =
+  AlignData data =
   {
   {
-    "Paragraphs with right to left text.",
-    "שלום עולם مرحبا بالعالم\n"
-    "مرحبا بالعالم שלום עולם\n"
-    "שלום עולם مرحبا بالعالم.",
+    "Begin alignment for the first paragraph.",
+    "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    72u,
-    positions,
+    Text::HorizontalAlignment::BEGIN,
+    Text::VerticalAlignment::TOP,
     0u,
     0u,
-    24u
+    22u,
+    6u,
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   };
 
-  if( !ReLayoutRightToLeftLinesTest( data ) )
+  if( !AlignTest( data ) )
   {
     tet_result(TET_FAIL);
   }
   {
     tet_result(TET_FAIL);
   }
@@ -3789,23 +3888,24 @@ int UtcDaliTextReorderLayout02(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextReorderLayout03(void)
+int UtcDaliTextAlign02(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextReorderLayout03");
+  tet_infoline(" UtcDaliTextAlign02");
 
 
-  // Reorder lines of the mid paragraph.
+  // Calculate text alignment.
 
 
+  const std::string fontLatin( "TizenSans" );
   const std::string fontHebrew( "TizenSansHebrew" );
   const std::string fontArabic( "TizenSansArabic" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun01;
   fontDescriptionRun01.characterRun.characterIndex = 0u;
   const std::string fontHebrew( "TizenSansHebrew" );
   const std::string fontArabic( "TizenSansArabic" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun01;
   fontDescriptionRun01.characterRun.characterIndex = 0u;
-  fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun01.familyLength = fontHebrew.size();
+  fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun01.familyLength = fontLatin.size();
   fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
   fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
-  memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
+  memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
   fontDescriptionRun01.familyDefined = true;
   fontDescriptionRun01.weightDefined = false;
   fontDescriptionRun01.widthDefined = false;
   fontDescriptionRun01.familyDefined = true;
   fontDescriptionRun01.weightDefined = false;
   fontDescriptionRun01.widthDefined = false;
@@ -3813,11 +3913,11 @@ int UtcDaliTextReorderLayout03(void)
   fontDescriptionRun01.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun01.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun02;
-  fontDescriptionRun02.characterRun.characterIndex = 10u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun02.familyLength = fontArabic.size();
+  fontDescriptionRun02.characterRun.characterIndex = 12u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
-  memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
+  memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
   fontDescriptionRun02.familyDefined = true;
   fontDescriptionRun02.weightDefined = false;
   fontDescriptionRun02.widthDefined = false;
   fontDescriptionRun02.familyDefined = true;
   fontDescriptionRun02.weightDefined = false;
   fontDescriptionRun02.widthDefined = false;
@@ -3825,7 +3925,7 @@ int UtcDaliTextReorderLayout03(void)
   fontDescriptionRun02.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun03;
   fontDescriptionRun02.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 24u;
+  fontDescriptionRun03.characterRun.characterIndex = 22u;
   fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
   fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
@@ -3837,11 +3937,11 @@ int UtcDaliTextReorderLayout03(void)
   fontDescriptionRun03.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun04;
   fontDescriptionRun03.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 38u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun04.familyLength = fontHebrew.size();
+  fontDescriptionRun04.characterRun.characterIndex = 36u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun04.familyLength = fontLatin.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -3850,10 +3950,10 @@ int UtcDaliTextReorderLayout03(void)
 
   FontDescriptionRun fontDescriptionRun05;
   fontDescriptionRun05.characterRun.characterIndex = 48u;
 
   FontDescriptionRun fontDescriptionRun05;
   fontDescriptionRun05.characterRun.characterIndex = 48u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun05.familyLength = fontHebrew.size();
+  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun05.familyLength = fontLatin.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
   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;
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -3861,8 +3961,8 @@ int UtcDaliTextReorderLayout03(void)
   fontDescriptionRun05.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun06;
   fontDescriptionRun05.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 58u;
-  fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
+  fontDescriptionRun06.characterRun.characterIndex = 60u;
+  fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun06.familyLength = fontArabic.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
   memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
   fontDescriptionRun06.familyLength = fontArabic.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
   memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
@@ -3880,34 +3980,27 @@ int UtcDaliTextReorderLayout03(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] =
-  {
-    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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
-    0.f, -7.f,  5.f, -11.f, 6.f, -11.f, 10.f, -8.f, 17.f, -11.f, 18.f, -11.f, 22.f, -8.f, 28.f, -0.f,
-    86.f, -8.f, 81.f, -6.f, 74.f, -7.f, 71.f, -7.f, 70.f, -11.f, 66.f, -0.f, 62.f, -7.f, 61.f, -11.f, 56.f, -11.f, 51.f, -8.f, 49.f, -11.f, 44.f, -11.f, 39.f, -8.f, 36.f, -0.f, 26.f, -10.f, 18.f, -13.f, 13.f, -10.f, 5.f, -10.f, 0.f, -0.f,
-    22.f, -10.f, 17.f, -10.f, 10.f, -13.f, 1.f, -10.f, 0.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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
-    0.f, -7.f, 5.f, -11.f, 6.f, -11.f, 10.f, -8.f, 17.f, -11.f, 18.f, -11.f, 22.f, -8.f, 30.f, -2.f,
-  };
+  float positions[] = { 0.f, 0.f, 33.f, 19.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
 
   Size textArea( 100.f, 300.f );
-
-  ReLayoutRightToLeftLinesData data =
+  AlignData data =
   {
   {
-    "Paragraphs with right to left text.",
-    "שלום עולם مرحبا بالعالم\n"
-    "مرحبا بالعالم שלום עולם\n"
-    "שלום עולם مرحبا بالعالم.",
+    "Begin alignment for the mid paragraph.",
+    "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    72u,
+    Text::HorizontalAlignment::BEGIN,
+    Text::VerticalAlignment::TOP,
+    22u,
+    26u,
+    6u,
     positions,
     positions,
-    24u,
-    24u
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   };
 
-  if( !ReLayoutRightToLeftLinesTest( data ) )
+  if( !AlignTest( data ) )
   {
     tet_result(TET_FAIL);
   }
   {
     tet_result(TET_FAIL);
   }
@@ -3916,23 +4009,24 @@ int UtcDaliTextReorderLayout03(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextReorderLayout04(void)
+int UtcDaliTextAlign03(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextReorderLayout04");
+  tet_infoline(" UtcDaliTextAlign03");
 
 
-  // Reorder lines of the last paragraph.
+  // Calculate text alignment.
 
 
+  const std::string fontLatin( "TizenSans" );
   const std::string fontHebrew( "TizenSansHebrew" );
   const std::string fontArabic( "TizenSansArabic" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun01;
   fontDescriptionRun01.characterRun.characterIndex = 0u;
   const std::string fontHebrew( "TizenSansHebrew" );
   const std::string fontArabic( "TizenSansArabic" );
 
   // Set a known font description
   FontDescriptionRun fontDescriptionRun01;
   fontDescriptionRun01.characterRun.characterIndex = 0u;
-  fontDescriptionRun01.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun01.familyLength = fontHebrew.size();
+  fontDescriptionRun01.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun01.familyLength = fontLatin.size();
   fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
   fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
-  memcpy( fontDescriptionRun01.familyName, fontHebrew.c_str(), fontDescriptionRun01.familyLength );
+  memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
   fontDescriptionRun01.familyDefined = true;
   fontDescriptionRun01.weightDefined = false;
   fontDescriptionRun01.widthDefined = false;
   fontDescriptionRun01.familyDefined = true;
   fontDescriptionRun01.weightDefined = false;
   fontDescriptionRun01.widthDefined = false;
@@ -3940,11 +4034,11 @@ int UtcDaliTextReorderLayout04(void)
   fontDescriptionRun01.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun02;
   fontDescriptionRun01.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun02;
-  fontDescriptionRun02.characterRun.characterIndex = 10u;
-  fontDescriptionRun02.characterRun.numberOfCharacters = 14u;
-  fontDescriptionRun02.familyLength = fontArabic.size();
+  fontDescriptionRun02.characterRun.characterIndex = 12u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 10u;
+  fontDescriptionRun02.familyLength = fontHebrew.size();
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
   fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
-  memcpy( fontDescriptionRun02.familyName, fontArabic.c_str(), fontDescriptionRun02.familyLength );
+  memcpy( fontDescriptionRun02.familyName, fontHebrew.c_str(), fontDescriptionRun02.familyLength );
   fontDescriptionRun02.familyDefined = true;
   fontDescriptionRun02.weightDefined = false;
   fontDescriptionRun02.widthDefined = false;
   fontDescriptionRun02.familyDefined = true;
   fontDescriptionRun02.weightDefined = false;
   fontDescriptionRun02.widthDefined = false;
@@ -3952,7 +4046,7 @@ int UtcDaliTextReorderLayout04(void)
   fontDescriptionRun02.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun03;
   fontDescriptionRun02.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun03;
-  fontDescriptionRun03.characterRun.characterIndex = 24u;
+  fontDescriptionRun03.characterRun.characterIndex = 22u;
   fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
   fontDescriptionRun03.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun03.familyLength = fontArabic.size();
   fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
@@ -3964,11 +4058,11 @@ int UtcDaliTextReorderLayout04(void)
   fontDescriptionRun03.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun04;
   fontDescriptionRun03.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun04;
-  fontDescriptionRun04.characterRun.characterIndex = 38u;
-  fontDescriptionRun04.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun04.familyLength = fontHebrew.size();
+  fontDescriptionRun04.characterRun.characterIndex = 36u;
+  fontDescriptionRun04.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun04.familyLength = fontLatin.size();
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
   fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
-  memcpy( fontDescriptionRun04.familyName, fontHebrew.c_str(), fontDescriptionRun04.familyLength );
+  memcpy( fontDescriptionRun04.familyName, fontLatin.c_str(), fontDescriptionRun04.familyLength );
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
   fontDescriptionRun04.familyDefined = true;
   fontDescriptionRun04.weightDefined = false;
   fontDescriptionRun04.widthDefined = false;
@@ -3977,10 +4071,10 @@ int UtcDaliTextReorderLayout04(void)
 
   FontDescriptionRun fontDescriptionRun05;
   fontDescriptionRun05.characterRun.characterIndex = 48u;
 
   FontDescriptionRun fontDescriptionRun05;
   fontDescriptionRun05.characterRun.characterIndex = 48u;
-  fontDescriptionRun05.characterRun.numberOfCharacters = 10u;
-  fontDescriptionRun05.familyLength = fontHebrew.size();
+  fontDescriptionRun05.characterRun.numberOfCharacters = 12u;
+  fontDescriptionRun05.familyLength = fontLatin.size();
   fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
   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;
   fontDescriptionRun05.familyDefined = true;
   fontDescriptionRun05.weightDefined = false;
   fontDescriptionRun05.widthDefined = false;
@@ -3988,8 +4082,8 @@ int UtcDaliTextReorderLayout04(void)
   fontDescriptionRun05.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun06;
   fontDescriptionRun05.sizeDefined = false;
 
   FontDescriptionRun fontDescriptionRun06;
-  fontDescriptionRun06.characterRun.characterIndex = 58u;
-  fontDescriptionRun06.characterRun.numberOfCharacters = 15u;
+  fontDescriptionRun06.characterRun.characterIndex = 60u;
+  fontDescriptionRun06.characterRun.numberOfCharacters = 14u;
   fontDescriptionRun06.familyLength = fontArabic.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
   memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
   fontDescriptionRun06.familyLength = fontArabic.size();
   fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
   memcpy( fontDescriptionRun06.familyName, fontArabic.c_str(), fontDescriptionRun06.familyLength );
@@ -4007,34 +4101,27 @@ int UtcDaliTextReorderLayout04(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] =
-  {
-    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, 69.f, -8.f, 76.f, -6.f, 81.f, -7.f, 87.f, -7.f, 92.f, -11.f, 94.f, -0.f,
-    0.f, -7.f, 5.f, -11.f, 6.f, -11.f, 10.f, -8.f, 17.f, -11.f, 18.f, -11.f, 22.f, -8.f, 28.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,
-    87.f, -10.f, 79.f, -13.f, 74.f, -10.f, 66.f, -10.f, 61.f, -0.f, 53.f, -10.f, 48.f, -10.f, 41.f, -13.f, 32.f, -10.f, 27.f, -0.f, 20.f, -8.f, 15.f, -6.f, 8.f, -7.f, 5.f, -7.f, 4.f, -11.f, 0.f, -0.f,
-    28.f, -7.f, 27.f, -11.f, 22.f, -11.f, 17.f, -8.f, 15.f, -11.f, 10.f, -11.f, 5.f, -8.f, 2.f, -2.f,
-  };
+  float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
 
   Size textArea( 100.f, 300.f );
-
-  ReLayoutRightToLeftLinesData data =
+  AlignData data =
   {
   {
-    "Paragraphs with right to left text.",
-    "שלום עולם مرحبا بالعالم\n"
-    "مرحبا بالعالم שלום עולם\n"
-    "שלום עולם مرحبا بالعالم.",
+    "Begin alignment for the last paragraph.",
+    "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    72u,
-    positions,
+    Text::HorizontalAlignment::BEGIN,
+    Text::VerticalAlignment::TOP,
     48u,
     48u,
-    24u
+    26u,
+    6u,
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   };
 
-  if( !ReLayoutRightToLeftLinesTest( data ) )
+  if( !AlignTest( data ) )
   {
     tet_result(TET_FAIL);
   }
   {
     tet_result(TET_FAIL);
   }
@@ -4043,10 +4130,10 @@ int UtcDaliTextReorderLayout04(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign01(void)
+int UtcDaliTextAlign04(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign01");
+  tet_infoline(" UtcDaliTextAlign04");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4135,22 +4222,24 @@ int UtcDaliTextAlign01(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
+  float positions[] = { 9.f, 15.f, 0.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "Begin alignment for the first paragraph.",
+    "Center alignment for the first paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::BEGIN,
+    Text::HorizontalAlignment::CENTER,
     Text::VerticalAlignment::TOP,
     0u,
     22u,
     6u,
     Text::VerticalAlignment::TOP,
     0u,
     22u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4162,10 +4251,10 @@ int UtcDaliTextAlign01(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign02(void)
+int UtcDaliTextAlign05(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign02");
+  tet_infoline(" UtcDaliTextAlign05");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4254,22 +4343,24 @@ int UtcDaliTextAlign02(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, 2.f, 60.f, 0.f, 0.f };
+  float positions[] = { 0.f, 0.f, 14.f, 9.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "Begin alignment for the mid paragraph.",
+    "Center alignment for the mid paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::BEGIN,
+    Text::HorizontalAlignment::CENTER,
     Text::VerticalAlignment::TOP,
     22u,
     26u,
     6u,
     Text::VerticalAlignment::TOP,
     22u,
     26u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4281,10 +4372,10 @@ int UtcDaliTextAlign02(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign03(void)
+int UtcDaliTextAlign06(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign03");
+  tet_infoline(" UtcDaliTextAlign06");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4373,22 +4464,24 @@ int UtcDaliTextAlign03(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
+  float positions[] = { 0.f, 0.f, 0.f, 0.f, 9.f, 17.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "Begin alignment for the last paragraph.",
+    "Center alignment for the last paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::BEGIN,
+    Text::HorizontalAlignment::CENTER,
     Text::VerticalAlignment::TOP,
     48u,
     26u,
     6u,
     Text::VerticalAlignment::TOP,
     48u,
     26u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4400,10 +4493,10 @@ int UtcDaliTextAlign03(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign04(void)
+int UtcDaliTextAlign07(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign04");
+  tet_infoline(" UtcDaliTextAlign07");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4492,22 +4585,24 @@ int UtcDaliTextAlign04(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 10.f, 16.f, 0.f, 0.f, 0.f, 0.f };
+  float positions[] = { 19.f, 31.f, 0.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "Center alignment for the first paragraph.",
+    "End alignment for the first paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::CENTER,
+    Text::HorizontalAlignment::END,
     Text::VerticalAlignment::TOP,
     0u,
     22u,
     6u,
     Text::VerticalAlignment::TOP,
     0u,
     22u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4519,10 +4614,10 @@ int UtcDaliTextAlign04(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign05(void)
+int UtcDaliTextAlign08(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign05");
+  tet_infoline(" UtcDaliTextAlign08");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4611,22 +4706,24 @@ int UtcDaliTextAlign05(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, -1.f, 30.f, 0.f, 0.f };
+  float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "Center alignment for the mid paragraph.",
+    "End alignment for the mid paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::CENTER,
+    Text::HorizontalAlignment::END,
     Text::VerticalAlignment::TOP,
     22u,
     26u,
     6u,
     Text::VerticalAlignment::TOP,
     22u,
     26u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4638,10 +4735,10 @@ int UtcDaliTextAlign05(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign06(void)
+int UtcDaliTextAlign09(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign06");
+  tet_infoline(" UtcDaliTextAlign09");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4730,22 +4827,24 @@ int UtcDaliTextAlign06(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, 0.f, 0.f, 10.f, 20.f };
+  float positions[] = { 0.f, 0.f, 0.f, 0.f, 19.f, 34.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "Center alignment for the last paragraph.",
+    "End alignment for the last paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::CENTER,
+    Text::HorizontalAlignment::END,
     Text::VerticalAlignment::TOP,
     48u,
     26u,
     6u,
     Text::VerticalAlignment::TOP,
     48u,
     26u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    false
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4757,10 +4856,10 @@ int UtcDaliTextAlign06(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign07(void)
+int UtcDaliTextAlign10(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign07");
+  tet_infoline(" UtcDaliTextAlign10");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4849,12 +4948,12 @@ int UtcDaliTextAlign07(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 20.f, 33.f, 0.f, 0.f, 0.f, 0.f };
+  float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "End alignment for the first paragraph.",
+    "Begin alignment for the first paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
@@ -4864,7 +4963,9 @@ int UtcDaliTextAlign07(void)
     0u,
     22u,
     6u,
     0u,
     22u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::RIGHT_TO_LEFT,
+    true
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4876,10 +4977,10 @@ int UtcDaliTextAlign07(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign08(void)
+int UtcDaliTextAlign11(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign08");
+  tet_infoline(" UtcDaliTextAlign11");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -4968,22 +5069,24 @@ int UtcDaliTextAlign08(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, -4.f, 0.f, 0.f, 0.f };
+  float positions[] = { 19.f, 31.f, 33.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "End alignment for the mid paragraph.",
+    "End alignment for the last paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     Text::HorizontalAlignment::END,
     Text::VerticalAlignment::TOP,
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     Text::HorizontalAlignment::END,
     Text::VerticalAlignment::TOP,
-    22u,
+    0u,
     26u,
     6u,
     26u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    true
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -4995,10 +5098,10 @@ int UtcDaliTextAlign08(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliTextAlign09(void)
+int UtcDaliTextAlign12(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline(" UtcDaliTextAlign09");
+  tet_infoline(" UtcDaliTextAlign12");
 
   // Calculate text alignment.
 
 
   // Calculate text alignment.
 
@@ -5087,22 +5190,24 @@ int UtcDaliTextAlign09(void)
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
   fontDescriptionRuns.PushBack( fontDescriptionRun05 );
   fontDescriptionRuns.PushBack( fontDescriptionRun06 );
 
-  float positions[] = { 0.f, 0.f, 0.f, 0.f, 20.f, 40.f };
+  float positions[] = { 0.f, 0.f, 0.f, 0.f, 0.f, 0.f };
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
 
   Size textArea( 100.f, 300.f );
   AlignData data =
   {
-    "End alignment for the last paragraph.",
+    "Begin alignment for the first paragraph.",
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
     "Hello world שלום עולם\nمرحبا بالعالم Hello world\nHello world مرحبا بالعالم.",
     textArea,
     6u,
     fontDescriptionRuns.Begin(),
-    Text::HorizontalAlignment::END,
+    Text::HorizontalAlignment::BEGIN,
     Text::VerticalAlignment::TOP,
     48u,
     26u,
     6u,
     Text::VerticalAlignment::TOP,
     48u,
     26u,
     6u,
-    positions
+    positions,
+    Dali::LayoutDirection::LEFT_TO_RIGHT,
+    true
   };
 
   if( !AlignTest( data ) )
   };
 
   if( !AlignTest( data ) )
@@ -5128,3 +5233,197 @@ int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
   tet_result(TET_PASS);
   END_TEST;
 }
   tet_result(TET_PASS);
   END_TEST;
 }
+
+int UtcDaliTextLayoutGetGlyphMetrics(void)
+{
+  tet_infoline(" UtcDaliTextLayoutGetGlyphMetrics");
+
+  // Test retrieving metrics from group of characters
+
+  const std::string fontFamily( "TizenSansHindi" );
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun01;
+  fontDescriptionRun01.characterRun.characterIndex = 0u;
+  fontDescriptionRun01.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun01.familyLength = fontFamily.size();
+  fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+  memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
+  fontDescriptionRun01.familyDefined = true;
+  fontDescriptionRun01.weightDefined = false;
+  fontDescriptionRun01.widthDefined = false;
+  fontDescriptionRun01.slantDefined = false;
+  fontDescriptionRun01.sizeDefined = false;
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun02;
+  fontDescriptionRun02.characterRun.characterIndex = 0u;
+  fontDescriptionRun02.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun02.familyLength = fontFamily.size();
+  fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+  memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
+  fontDescriptionRun02.familyDefined = true;
+  fontDescriptionRun02.weightDefined = false;
+  fontDescriptionRun02.widthDefined = false;
+  fontDescriptionRun02.slantDefined = false;
+  fontDescriptionRun02.sizeDefined = false;
+
+  // Set a known font description
+  FontDescriptionRun fontDescriptionRun03;
+  fontDescriptionRun03.characterRun.characterIndex = 0u;
+  fontDescriptionRun03.characterRun.numberOfCharacters = 2u;
+  fontDescriptionRun03.familyLength = fontFamily.size();
+  fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+  memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
+  fontDescriptionRun03.familyDefined = true;
+  fontDescriptionRun03.weightDefined = false;
+  fontDescriptionRun03.widthDefined = false;
+  fontDescriptionRun03.slantDefined = false;
+  fontDescriptionRun03.sizeDefined = false;
+
+  Vector<FontDescriptionRun> fontDescriptionRuns01;
+  fontDescriptionRuns01.PushBack( fontDescriptionRun01 );
+
+  Vector<FontDescriptionRun> fontDescriptionRuns02;
+  fontDescriptionRuns02.PushBack( fontDescriptionRun02 );
+
+  Vector<FontDescriptionRun> fontDescriptionRuns03;
+  fontDescriptionRuns03.PushBack( fontDescriptionRun03 );
+
+  // Set a text area.
+  Size textArea(100.f, 100.f);
+
+
+  // Group: second glyph doesn't exceed the width of the first glyph
+  float positions01[] = { 0.f, -11.f };
+
+  struct LineRun line01 =
+  {
+    { 0u, 1u },
+    { 0u, 1u },
+    11.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    false,
+    false
+  };
+  Vector<LineRun> lines01;
+  lines01.PushBack( line01 );
+
+  Size layoutSize01 = Vector2(11.f, 19.f);
+
+  // Group: second glyph doesn't exceed the width of the first glyph
+  float positions02[] = { 0.f, -11.f, 7.f, -15.f, };
+
+  struct LineRun line02 =
+  {
+    { 0u, 2u },
+    { 0u, 2u },
+    16.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    false,
+    false
+  };
+  Vector<LineRun> lines02;
+  lines02.PushBack( line02 );
+
+  Size layoutSize02 = Vector2(16.f, 19.f);
+
+  // Group: second glyph doesn't exceed the width of the first glyph
+  float positions03[] = { 0.f, -11.f , 2.f, -15.f };
+
+  struct LineRun line03 =
+  {
+    { 0u, 2u },
+    { 0u, 2u },
+    11.f,
+    15.f,
+    -4.f,
+    0.f,
+    0.f,
+    0.f,
+    false,
+    false
+  };
+  Vector<LineRun> lines03;
+  lines03.PushBack( line03 );
+
+  Size layoutSize03 = Vector2(11.f, 19.f);
+
+ /////////////////////////////
+
+  struct LayoutTextData data[] =
+  {
+    {
+      "Single glyph",
+      "प",
+      textArea,
+      1u,
+      fontDescriptionRuns01.Begin(),
+      layoutSize01,
+      1u,
+      positions01,
+      1u,
+      lines01.Begin(),
+      Layout::Engine::SINGLE_LINE_BOX,
+      0u,
+      1u,
+      false,
+      true
+    },
+    {
+      "Group: second glyph exceeds the width of the first glyph",
+      "पो",
+      textArea,
+      1u,
+      fontDescriptionRuns02.Begin(),
+      layoutSize02,
+      2u,
+      positions02,
+      1u,
+      lines02.Begin(),
+      Layout::Engine::SINGLE_LINE_BOX,
+      0u,
+      2u,
+      false,
+      true
+    },
+   {
+      "Group: second glyph doesn't exceed the width of the first glyph",
+      "पे",
+      textArea,
+      1u,
+      fontDescriptionRuns03.Begin(),
+      layoutSize03,
+      2u,
+      positions03,
+      1u,
+      lines03.Begin(),
+      Layout::Engine::SINGLE_LINE_BOX,
+      0u,
+      2u,
+      false,
+      true
+    }
+  };
+  const unsigned int numberOfTests = sizeof(data)/sizeof(LayoutTextData);
+
+  for( unsigned int index = 0u; index < numberOfTests; ++index )
+  {
+    ToolkitTestApplication application;
+    if( !LayoutTextTest( data[index] ) )
+    {
+      tet_result(TET_FAIL);
+    }
+  }
+
+  tet_result(TET_PASS);
+  END_TEST;
+}