Moved SingletonService into dali-core
[platform/core/uifw/dali-adaptor.git] / dali / internal / text / text-abstraction / bidirectional-support-impl.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 5d096c3..7142ada
 // CLASS  HEADER
 #include <dali/internal/text/text-abstraction/bidirectional-support-impl.h>
 
-// INTERNAL INCLUDES
-#include <dali/internal/system/common/singleton-service-impl.h>
-
 // EXTERNAL INCLUDES
 #include <memory.h>
 #include <fribidi/fribidi.h>
 #include <dali/integration-api/debug.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 namespace Dali
 {
@@ -74,21 +72,23 @@ namespace
     switch( characterDirection )
     {
       case FRIBIDI_TYPE_LTR: // Left-To-Right letter.
-      case FRIBIDI_TYPE_EN:  // European Numeral.
-      case FRIBIDI_TYPE_AN:  // Arabic Numeral.
-      case FRIBIDI_TYPE_ES:  // European number Separator.
-      case FRIBIDI_TYPE_ET:  // European number Terminator.
       {
         return LEFT_TO_RIGHT;
       }
-      case FRIBIDI_TYPE_RTL: // Right-To-Left letter.
       case FRIBIDI_TYPE_AL:  // Arabic Letter.
+      case FRIBIDI_TYPE_RTL: // Right-To-Left letter.
       {
         return RIGHT_TO_LEFT;
       }
+      case FRIBIDI_TYPE_AN:  // Arabic Numeral.
+      case FRIBIDI_TYPE_ES:  // European number Separator.
+      case FRIBIDI_TYPE_ET:  // European number Terminator.
+      case FRIBIDI_TYPE_EN:  // European Numeral.
+      default :
+      {
+        return NEUTRAL;
+      }
     }
-
-    return NEUTRAL;
   }
 }
 
@@ -126,7 +126,9 @@ struct BidirectionalSupport::Plugin
   }
 
   BidiInfoIndex CreateInfo( const Character* const paragraph,
-                            Length numberOfCharacters )
+                            Length numberOfCharacters,
+                            bool matchSystemLanguageDirection,
+                            LayoutDirection::Type layoutDirection )
   {
     // Reserve memory for the paragraph's bidirectional info.
     BidirectionalInfo* bidirectionalInfo = new BidirectionalInfo();
@@ -150,7 +152,9 @@ struct BidirectionalSupport::Plugin
     fribidi_get_bidi_types( paragraph, numberOfCharacters, bidirectionalInfo->characterTypes );
 
     // Retrieve the paragraph's direction.
-    bidirectionalInfo->paragraphDirection = fribidi_get_par_direction( bidirectionalInfo->characterTypes, numberOfCharacters );
+    bidirectionalInfo->paragraphDirection = matchSystemLanguageDirection == true ?
+                                           ( layoutDirection == LayoutDirection::RIGHT_TO_LEFT ? FRIBIDI_PAR_RTL : FRIBIDI_PAR_LTR ) :
+                                           ( fribidi_get_par_direction( bidirectionalInfo->characterTypes, numberOfCharacters ) );
 
     // Retrieve the embedding levels.
     if (fribidi_get_par_embedding_levels( bidirectionalInfo->characterTypes, numberOfCharacters, &bidirectionalInfo->paragraphDirection, bidirectionalInfo->embeddedLevels ) == 0)
@@ -390,12 +394,16 @@ TextAbstraction::BidirectionalSupport BidirectionalSupport::Get()
 }
 
 BidiInfoIndex BidirectionalSupport::CreateInfo( const Character* const paragraph,
-                                                Length numberOfCharacters )
+                                                Length numberOfCharacters,
+                                                bool matchSystemLanguageDirection,
+                                                Dali::LayoutDirection::Type layoutDirection )
 {
   CreatePlugin();
 
   return mPlugin->CreateInfo( paragraph,
-                              numberOfCharacters );
+                              numberOfCharacters,
+                              matchSystemLanguageDirection,
+                              layoutDirection );
 }
 
 void BidirectionalSupport::DestroyInfo( BidiInfoIndex bidiInfoIndex )