Added Property for the rendering back-end
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / text / logical-model.cpp
index db30d05..09a590c 100644 (file)
 #include <dali-toolkit/public-api/text/logical-model.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/public-api/text/bidirectional-line-info-run.h>
+#include <dali-toolkit/public-api/text/bidirectional-paragraph-info-run.h>
 #include <dali-toolkit/public-api/text/font-run.h>
 #include <dali-toolkit/public-api/text/script-run.h>
 
 // EXTERNAL INCLUDES
 #include <memory.h>
-#include <stdlib.h>
 
 namespace Dali
 {
@@ -37,9 +38,11 @@ namespace Text
 
 struct LogicalModel::Impl
 {
-  Vector<Character> mText;
-  Vector<ScriptRun> mScriptRuns;
-  Vector<FontRun>   mFontRuns;
+  Vector<Character>     mText;
+  Vector<ScriptRun>     mScriptRuns;
+  Vector<FontRun>       mFontRuns;
+  Vector<LineBreakInfo> mLineBreakInfo;
+  Vector<WordBreakInfo> mWordBreakInfo;
 };
 
 LogicalModelPtr LogicalModel::New()
@@ -47,11 +50,12 @@ LogicalModelPtr LogicalModel::New()
   return LogicalModelPtr( new LogicalModel() );
 }
 
-void LogicalModel::SetText( const Character* text, Length length )
+void LogicalModel::SetText( const Character* const text,
+                            Length numberOfCharacters )
 {
   Vector<Character>& modelText = mImpl->mText;
-  modelText.Resize( length );
-  memcpy( &modelText[0], text, length*sizeof(Character) );
+  modelText.Resize( numberOfCharacters );
+  memcpy( modelText.Begin(), text, numberOfCharacters * sizeof( Character ) );
 }
 
 Length LogicalModel::GetNumberOfCharacters() const
@@ -59,10 +63,17 @@ Length LogicalModel::GetNumberOfCharacters() const
   return mImpl->mText.Count();
 }
 
-void LogicalModel::GetText( CharacterIndex characterIndex, Character* text, Length numberOfCharacters ) const
+void LogicalModel::GetText( CharacterIndex characterIndex,
+                            Character* text,
+                            Length numberOfCharacters ) const
 {
   Vector<Character>& modelText = mImpl->mText;
-  memcpy( text, &modelText[characterIndex], numberOfCharacters*sizeof(Character) );
+  memcpy( text, modelText.Begin() + characterIndex, numberOfCharacters * sizeof( Character ) );
+}
+
+Character LogicalModel::GetCharacter( CharacterIndex characterIndex ) const
+{
+  return mImpl->mText[characterIndex];
 }
 
 void LogicalModel::SetScripts( const ScriptRun* const scripts,
@@ -236,33 +247,41 @@ FontId LogicalModel::GetFont( CharacterIndex characterIndex ) const
 void LogicalModel::SetLineBreakInfo( const LineBreakInfo* const lineBreakInfo,
                                      Length length )
 {
+  Vector<LineBreakInfo>& modelLineBreakInfo = mImpl->mLineBreakInfo;
+  modelLineBreakInfo.Resize( length );
+  memcpy( modelLineBreakInfo.Begin(), lineBreakInfo, length * sizeof( LineBreakInfo ) );
 }
 
 void LogicalModel::GetLineBreakInfo( LineBreakInfo* lineBreakInfo,
                                      CharacterIndex characterIndex,
                                      Length numberOfItems ) const
 {
+  memcpy( lineBreakInfo, mImpl->mLineBreakInfo.Begin() + characterIndex, numberOfItems * sizeof( LineBreakInfo ) );
 }
 
 LineBreakInfo LogicalModel::GetLineBreakInfo( CharacterIndex characterIndex ) const
 {
-  return 0;
+  return *( mImpl->mLineBreakInfo.Begin() + characterIndex );
 }
 
 void LogicalModel::SetWordBreakInfo( const WordBreakInfo* const wordBreakInfo,
                                      Length length )
 {
+  Vector<WordBreakInfo>& modelWordBreakInfo = mImpl->mWordBreakInfo;
+  modelWordBreakInfo.Resize( length );
+  memcpy( modelWordBreakInfo.Begin(), wordBreakInfo, length * sizeof( WordBreakInfo ) );
 }
 
 void LogicalModel::GetWordBreakInfo( WordBreakInfo* wordBreakInfo,
                                      CharacterIndex characterIndex,
                                      Length numberOfItems ) const
 {
+  memcpy( wordBreakInfo, mImpl->mWordBreakInfo.Begin() + characterIndex, numberOfItems * sizeof( WordBreakInfo ) );
 }
 
 WordBreakInfo LogicalModel::GetWordBreakInfo( CharacterIndex characterIndex ) const
 {
-  return 0;
+  return *( mImpl->mWordBreakInfo.Begin() + characterIndex );
 }
 
 void LogicalModel::SetBidirectionalInfo( const BidirectionalParagraphInfoRun* const bidirectionalInfo,