Support paragraph tag <p> in markup
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / logical-model-impl.h
index 9f2fa31..c54c523 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_TOOLKIT_TEXT_LOGICAL_MODEL_IMPL_H__
-#define __DALI_TOOLKIT_TEXT_LOGICAL_MODEL_IMPL_H__
+#ifndef DALI_TOOLKIT_TEXT_LOGICAL_MODEL_IMPL_H
+#define DALI_TOOLKIT_TEXT_LOGICAL_MODEL_IMPL_H
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include <dali/public-api/object/ref-object.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/internal/text/anchor.h>
 #include <dali-toolkit/internal/text/bidirectional-line-info-run.h>
 #include <dali-toolkit/internal/text/bidirectional-paragraph-info-run.h>
+#include <dali-toolkit/internal/text/bounded-paragraph-run.h>
 #include <dali-toolkit/internal/text/color-run.h>
-#include <dali-toolkit/internal/text/font-run.h>
+#include <dali-toolkit/internal/text/embedded-item.h>
 #include <dali-toolkit/internal/text/font-description-run.h>
+#include <dali-toolkit/internal/text/font-run.h>
 #include <dali-toolkit/internal/text/paragraph-run.h>
 #include <dali-toolkit/internal/text/script-run.h>
+#include <dali-toolkit/internal/text/strikethrough-character-run.h>
+#include <dali-toolkit/internal/text/underlined-character-run.h>
 
 namespace Dali
 {
-
 namespace Toolkit
 {
-
 namespace Text
 {
-
 class LogicalModel;
 typedef IntrusivePtr<LogicalModel> LogicalModelPtr;
 struct InputStyle;
@@ -54,7 +56,6 @@ struct InputStyle;
 class LogicalModel : public RefObject
 {
 public:
-
   /**
    * @brief Create a new instance of a LogicalModel.
    *
@@ -71,7 +72,7 @@ public:
    *
    * @return The character's script.
    */
-  Script GetScript( CharacterIndex characterIndex ) const;
+  Script GetScript(CharacterIndex characterIndex) const;
 
   // Bidirectional support interface.
 
@@ -84,7 +85,7 @@ public:
    *
    * @return The character's direction.
    */
-  CharacterDirection GetCharacterDirection( CharacterIndex characterIndex ) const;
+  CharacterDirection GetCharacterDirection(CharacterIndex characterIndex) const;
 
   // Visual <--> Logical conversion tables.
 
@@ -98,7 +99,7 @@ public:
    *
    * @return The logical cursor index.
    */
-  CharacterIndex GetLogicalCursorIndex( CharacterIndex visualCursorIndex );
+  CharacterIndex GetLogicalCursorIndex(CharacterIndex visualCursorIndex);
 
   /**
    * @brief Retrieves the logical character index for the given visual character index.
@@ -110,7 +111,7 @@ public:
    *
    * @return The logical character index.
    */
-  CharacterIndex GetLogicalCharacterIndex( CharacterIndex visualCharacterIndex );
+  CharacterIndex GetLogicalCharacterIndex(CharacterIndex visualCharacterIndex);
 
   /**
    * @brief Fetch the bidirectional line info for the given character.
@@ -121,7 +122,7 @@ public:
    *
    * @return @e true if the given @e character is in a bidirectional line.
    */
-  bool FetchBidirectionalLineInfo( CharacterIndex characterIndex );
+  bool FetchBidirectionalLineInfo(CharacterIndex characterIndex);
 
   /**
    * @brief Retrieves the last fetched bidirectional line info.
@@ -138,7 +139,7 @@ public:
    * @param[in] index The character's index.
    * @param[in] numberOfCharacters The number of characters added or removed. If the value is negative the characters are removed.
    */
-  void UpdateTextStyleRuns( CharacterIndex index, int numberOfCharacters );
+  void UpdateTextStyleRuns(CharacterIndex index, int numberOfCharacters);
 
   /**
    * @brief Retrieves the text's style for the given character index.
@@ -146,13 +147,18 @@ public:
    * @param[in] index The character index.
    * @param[out] style The text's style in the given style.
    */
-  void RetrieveStyle( CharacterIndex index, InputStyle& style );
+  void RetrieveStyle(CharacterIndex index, InputStyle& style);
 
   /**
    * @brief Clears the font description runs.
    */
   void ClearFontDescriptionRuns();
 
+  /**
+   * @brief Clears the strikethrough runs.
+   */
+  void ClearStrikethroughRuns();
+
   // Paragraphs
 
   /**
@@ -163,8 +169,8 @@ public:
    * @param[in] startIndex The character from where the paragraph info is set.
    * @param[in] numberOfCharacters The number of characters.
    */
-  void CreateParagraphInfo( CharacterIndex startIndex,
-                            Length numberOfCharacters );
+  void CreateParagraphInfo(CharacterIndex startIndex,
+                           Length         numberOfCharacters);
 
   /**
    * @brief Find the paragraphs which contains the given characters.
@@ -173,45 +179,73 @@ public:
    * @param[in] numberOfCharacters The number of characters of the run.
    * @param[out] paragraphs Indices to the paragraphs which contain the characters.
    */
-  void FindParagraphs( CharacterIndex index,
-                       Length numberOfCharacters,
-                       Vector<ParagraphRunIndex>& paragraphs );
+  void FindParagraphs(CharacterIndex             index,
+                      Length                     numberOfCharacters,
+                      Vector<ParagraphRunIndex>& paragraphs);
 
-protected:
+  /**
+   * @brief Retrieves the number of bounded paragraph runs.
+   *
+   * @return The number of bounded paragraph runs.
+   */
+  Length GetNumberOfBoundedParagraphRuns() const;
 
   /**
+   * @brief Retrieves the reference for bounded paragraph runs.
+   *
+   * @return The reference for bounded paragraph runs.
+   */
+  const Vector<BoundedParagraphRun>& GetBoundedParagraphRuns() const;
+
+  // Embedded images
+
+  /**
+   * @brief Clears the embedded images.
+   */
+  void ClearEmbeddedImages();
+
+  /**
+   * @brief Clears the anchors.
+   */
+  void ClearAnchors();
+
+protected:
+  /**
    * @brief A reference counted object may only be deleted by calling Unreference().
    */
   virtual ~LogicalModel();
 
 private:
-
   /**
    * @brief Private constructor.
    */
   LogicalModel();
 
   // Undefined
-  LogicalModel( const LogicalModel& handle );
+  LogicalModel(const LogicalModel& handle);
 
   // Undefined
-  LogicalModel& operator=( const LogicalModel& handle );
+  LogicalModel& operator=(const LogicalModel& handle);
 
 public:
-
   Vector<Character>                     mText;
   Vector<ScriptRun>                     mScriptRuns;
   Vector<FontRun>                       mFontRuns;
   Vector<ColorRun>                      mColorRuns;
+  Vector<ColorRun>                      mBackgroundColorRuns;
   Vector<FontDescriptionRun>            mFontDescriptionRuns;
   Vector<LineBreakInfo>                 mLineBreakInfo;
-  Vector<WordBreakInfo>                 mWordBreakInfo;
   Vector<ParagraphRun>                  mParagraphInfo;
   Vector<BidirectionalParagraphInfoRun> mBidirectionalParagraphInfo;
-  Vector<CharacterDirection>            mCharacterDirections;              ///< For each character, whether is right to left. ( @e flase is left to right, @e true right to left ).
+  Vector<CharacterDirection>            mCharacterDirections; ///< For each character, whether is right to left. ( @e flase is left to right, @e true right to left ).
   Vector<BidirectionalLineInfoRun>      mBidirectionalLineInfo;
+  Vector<EmbeddedItem>                  mEmbeddedItems;
+  Vector<Anchor>                        mAnchors;
+  Vector<UnderlinedCharacterRun>        mUnderlinedCharacterRuns;    ///< The underlined character run from markup-processor
+  Vector<StrikethroughCharacterRun>     mStrikethroughCharacterRuns; ///< The strikethrough character run from markup-processor
+  Vector<BoundedParagraphRun>           mBoundedParagraphRuns;       ///< The bounded paragraph is used to handle a paragraph mark-up tag and it's attributes. Like TextAlign, TextDirection, TextIndent, LineHeight, etc.
 
-  BidirectionalLineRunIndex             mBidirectionalLineIndex;           ///< The last fetched bidirectional line info.
+  BidirectionalLineRunIndex mBidirectionalLineIndex; ///< The last fetched bidirectional line info.
 };
 
 } // namespace Text
@@ -220,4 +254,4 @@ public:
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_TEXT_LOGICAL_MODEL_IMPL_H__
+#endif // DALI_TOOLKIT_TEXT_LOGICAL_MODEL_IMPL_H