Text segmentation implementation 76/35476/2
authorVictor Cebollada <v.cebollada@samsung.com>
Mon, 16 Feb 2015 09:20:48 +0000 (09:20 +0000)
committerVictor Cebollada <v.cebollada@samsung.com>
Tue, 17 Feb 2015 15:30:29 +0000 (15:30 +0000)
Change-Id: I923a98e88181cd291d84f55fbc23940b3b02d30e
Signed-off-by: Victor Cebollada <v.cebollada@samsung.com>
dali-toolkit/public-api/text/logical-model.cpp
dali-toolkit/public-api/text/segmentation.cpp
dali-toolkit/public-api/text/text-definitions.h

index 6d22f3a..09a590c 100644 (file)
@@ -38,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()
@@ -245,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,
index 3fa7450..db4e7ae 100644 (file)
@@ -18,6 +18,9 @@
 // CLASS HEADER
 #include <dali-toolkit/public-api/text/segmentation.h>
 
+// EXTERNAL INCLUDES
+#include <dali/public-api/text-abstraction/segmentation.h>
+
 namespace Dali
 {
 
@@ -30,11 +33,37 @@ namespace Text
 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
index 19caf79..981c5eb 100644 (file)
@@ -33,15 +33,15 @@ namespace Toolkit
 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).