Support paragraph tag <p> in markup
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / logical-model-impl.cpp
index 8ecab1f..9ad00bc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 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.
@@ -19,6 +19,7 @@
 #include <dali-toolkit/internal/text/logical-model-impl.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/internal/text/bounded-paragraph-helper-functions.h>
 #include <dali-toolkit/internal/text/input-style.h>
 #include <dali-toolkit/internal/text/text-run-container.h>
 
@@ -55,6 +56,16 @@ void FreeEmbeddedItems(Vector<EmbeddedItem>& embeddedItem)
   embeddedItem.Clear();
 }
 
+void FreeAnchors(Vector<Anchor>& anchors)
+{
+  for(auto&& anchor : anchors)
+  {
+    delete[] anchor.href;
+  }
+
+  anchors.Clear();
+}
+
 LogicalModelPtr LogicalModel::New()
 {
   return LogicalModelPtr(new LogicalModel());
@@ -286,6 +297,23 @@ void LogicalModel::UpdateTextStyleRuns(CharacterIndex index, int numberOfCharact
                                 mColorRuns,
                                 removedColorRuns);
 
+  // This is needed until now for underline tag in mark-up processor
+  // Process the underlined runs.
+  Vector<UnderlinedCharacterRun> removedUnderlinedCharacterRuns;
+  UpdateCharacterRuns<UnderlinedCharacterRun>(index,
+                                              numberOfCharacters,
+                                              totalNumberOfCharacters,
+                                              mUnderlinedCharacterRuns,
+                                              removedUnderlinedCharacterRuns);
+
+  // Process the strikethrough runs.
+  Vector<StrikethroughCharacterRun> removedStrikethroughCharacterRuns;
+  UpdateCharacterRuns<StrikethroughCharacterRun>(index,
+                                                 numberOfCharacters,
+                                                 totalNumberOfCharacters,
+                                                 mStrikethroughCharacterRuns,
+                                                 removedStrikethroughCharacterRuns);
+
   // Process the background color runs.
   Vector<ColorRun> removedBackgroundColorRuns;
   UpdateCharacterRuns<ColorRun>(index,
@@ -304,6 +332,19 @@ void LogicalModel::UpdateTextStyleRuns(CharacterIndex index, int numberOfCharact
 
   // Free memory allocated for the font family name.
   FreeFontFamilyNames(removedFontDescriptionRuns);
+
+  // Process the bounded paragraph runs
+  MergeBoundedParagraphRunsWhenRemoveCharacters(mText,
+                                                index,
+                                                numberOfCharacters,
+                                                mBoundedParagraphRuns);
+
+  Vector<BoundedParagraphRun> removedBoundedParagraphRuns;
+  UpdateCharacterRuns<BoundedParagraphRun>(index,
+                                           numberOfCharacters,
+                                           totalNumberOfCharacters,
+                                           mBoundedParagraphRuns,
+                                           removedBoundedParagraphRuns);
 }
 
 void LogicalModel::RetrieveStyle(CharacterIndex index, InputStyle& style)
@@ -444,6 +485,11 @@ void LogicalModel::ClearFontDescriptionRuns()
   FreeFontFamilyNames(mFontDescriptionRuns);
 }
 
+void LogicalModel::ClearStrikethroughRuns()
+{
+  mStrikethroughCharacterRuns.Clear();
+}
+
 void LogicalModel::CreateParagraphInfo(CharacterIndex startIndex,
                                        Length         numberOfCharacters)
 {
@@ -568,11 +614,26 @@ void LogicalModel::FindParagraphs(CharacterIndex             index,
   }
 }
 
+Length LogicalModel::GetNumberOfBoundedParagraphRuns() const
+{
+  return mBoundedParagraphRuns.Count();
+}
+
+const Vector<BoundedParagraphRun>& LogicalModel::GetBoundedParagraphRuns() const
+{
+  return mBoundedParagraphRuns;
+}
+
 void LogicalModel::ClearEmbeddedImages()
 {
   FreeEmbeddedItems(mEmbeddedItems);
 }
 
+void LogicalModel::ClearAnchors()
+{
+  FreeAnchors(mAnchors);
+}
+
 LogicalModel::~LogicalModel()
 {
   ClearFontDescriptionRuns();