#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
{
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()
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
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,
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,