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()
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,
// CLASS HEADER
#include <dali-toolkit/public-api/text/segmentation.h>
+// EXTERNAL INCLUDES
+#include <dali/public-api/text-abstraction/segmentation.h>
+
namespace Dali
{
void SetLineBreakInfo( const Vector<Character>& text,
Vector<LineBreakInfo>& lineBreakInfo )
{
+ const Length numberOfCharacters = text.Count();
+
+ if( 0u == numberOfCharacters )
+ {
+ // Nothing to do if there are no characters.
+ return;
+ }
+
+ // Retrieve the line break info.
+ lineBreakInfo.Resize( numberOfCharacters );
+ TextAbstraction::Segmentation::Get().GetLineBreakPositions( text.Begin(),
+ numberOfCharacters,
+ lineBreakInfo.Begin() );
}
void SetWordBreakInfo( const Vector<Character>& text,
Vector<WordBreakInfo>& wordBreakInfo )
{
+ const Length numberOfCharacters = text.Count();
+
+ if( 0u == numberOfCharacters )
+ {
+ // Nothing to do if there are no characters.
+ return;
+ }
+
+ // Retrieve the word break info.
+ wordBreakInfo.Resize( numberOfCharacters );
+ TextAbstraction::Segmentation::Get().GetWordBreakPositions( text.Begin(),
+ numberOfCharacters,
+ wordBreakInfo.Begin() );
}
} // namespace Text
namespace Text
{
-typedef TextAbstraction::FontId FontId; ///< The unique identifier for a font face (generated by FontClient)
-typedef TextAbstraction::FontMetrics FontMetrics; ///< The metrics for a Font expressed in 26.6 fractional pixel format
-typedef TextAbstraction::PointSize26Dot6 PointSize26Dot6; ///< The point size in 26.6 fractional points
-typedef TextAbstraction::FaceIndex FaceIndex; ///< Used with fonts which allow several font faces
-typedef TextAbstraction::GlyphIndex GlyphIndex; ///< Uniquely identifies a glyph within a particular font
-typedef TextAbstraction::Character Character; ///< A UTF-32 representation of a character
-typedef TextAbstraction::GlyphInfo GlyphInfo; ///< The information describing a glyph (font ID, index, metrics)
-typedef TextAbstraction::CharacterIndex CharacterIndex; ///< An index into an array of characters
-typedef TextAbstraction::Length Length; ///< The length of an array
+typedef TextAbstraction::FontId FontId; ///< The unique identifier for a font face (generated by FontClient).
+typedef TextAbstraction::FontMetrics FontMetrics; ///< The metrics for a Font expressed in 26.6 fractional pixel format.
+typedef TextAbstraction::PointSize26Dot6 PointSize26Dot6; ///< The point size in 26.6 fractional points.
+typedef TextAbstraction::FaceIndex FaceIndex; ///< Used with fonts which allow several font faces.
+typedef TextAbstraction::GlyphIndex GlyphIndex; ///< Uniquely identifies a glyph within a particular font.
+typedef TextAbstraction::Character Character; ///< A UTF-32 representation of a character.
+typedef TextAbstraction::GlyphInfo GlyphInfo; ///< The information describing a glyph (font ID, index, metrics).
+typedef TextAbstraction::CharacterIndex CharacterIndex; ///< An index into an array of characters.
+typedef TextAbstraction::Length Length; ///< The length of an array.
typedef TextAbstraction::BidiInfoIndex BidiInfoIndex; ///< Index to the bidirectional info for a paragraph.
typedef TextAbstraction::Script Script; ///< The character's script.
typedef TextAbstraction::LineBreakInfo LineBreakInfo; ///< Line break info (must break, allow break, no break). Possible values are: @e LINE_MUST_BREAK, @e LINE_ALLOW_BREAK and @e LINE_NO_BREAK (in the TextAbstraction namespace).