Clean up PDFTEXT_Obj usage.

- Make it private within CPDF_TextPage.
- Rename it to TransformedTextObject.
- Pass it by const-reference.
- Give instantiations of the struct and some surrounding code better
  names.

Change-Id: Ia7c9db00cb3347768aec3447d83b49500ebf2b46
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65875
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 58a2959..489e7d4 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -228,11 +228,12 @@
 
 }  // namespace
 
-PDFTEXT_Obj::PDFTEXT_Obj() {}
+CPDF_TextPage::TransformedTextObject::TransformedTextObject() = default;
 
-PDFTEXT_Obj::PDFTEXT_Obj(const PDFTEXT_Obj& that) = default;
+CPDF_TextPage::TransformedTextObject::TransformedTextObject(
+    const TransformedTextObject& that) = default;
 
-PDFTEXT_Obj::~PDFTEXT_Obj() {}
+CPDF_TextPage::TransformedTextObject::~TransformedTextObject() = default;
 
 CPDF_TextPage::CharInfo::CharInfo() = default;
 
@@ -594,10 +595,10 @@
     else if (pObj->IsForm())
       ProcessFormObject(pObj->AsForm(), matrix);
   }
-  for (const auto& obj : m_LineObj)
+  for (const auto& obj : mTextObjects)
     ProcessTextObject(obj);
 
-  m_LineObj.clear();
+  mTextObjects.clear();
   CloseTempLine();
 }
 
@@ -723,30 +724,30 @@
   if (fabs(pTextObj->GetRect().Width()) < kSizeEpsilon)
     return;
 
-  size_t count = m_LineObj.size();
-  PDFTEXT_Obj Obj;
-  Obj.m_pTextObj = pTextObj;
-  Obj.m_formMatrix = formMatrix;
+  size_t count = mTextObjects.size();
+  TransformedTextObject new_obj;
+  new_obj.m_pTextObj = pTextObj;
+  new_obj.m_formMatrix = formMatrix;
   if (count == 0) {
-    m_LineObj.push_back(Obj);
+    mTextObjects.push_back(new_obj);
     return;
   }
   if (IsSameAsPreTextObject(pTextObj, pObjList, ObjPos))
     return;
 
-  PDFTEXT_Obj prev_Obj = m_LineObj[count - 1];
-  size_t nItem = prev_Obj.m_pTextObj->CountItems();
+  TransformedTextObject prev_obj = mTextObjects[count - 1];
+  size_t nItem = prev_obj.m_pTextObj->CountItems();
   if (nItem == 0)
     return;
 
   CPDF_TextObjectItem item;
-  prev_Obj.m_pTextObj->GetItemInfo(nItem - 1, &item);
+  prev_obj.m_pTextObj->GetItemInfo(nItem - 1, &item);
   float prev_width =
-      GetCharWidth(item.m_CharCode, prev_Obj.m_pTextObj->GetFont().Get()) *
-      prev_Obj.m_pTextObj->GetFontSize() / 1000;
+      GetCharWidth(item.m_CharCode, prev_obj.m_pTextObj->GetFont().Get()) *
+      prev_obj.m_pTextObj->GetFontSize() / 1000;
 
   CFX_Matrix prev_matrix =
-      prev_Obj.m_pTextObj->GetTextMatrix() * prev_Obj.m_formMatrix;
+      prev_obj.m_pTextObj->GetTextMatrix() * prev_obj.m_formMatrix;
   prev_width = prev_matrix.TransformDistance(fabs(prev_width));
   pTextObj->GetItemInfo(0, &item);
   float this_width = GetCharWidth(item.m_CharCode, pTextObj->GetFont().Get()) *
@@ -758,33 +759,32 @@
 
   float threshold = std::max(prev_width, this_width) / 4;
   CFX_PointF prev_pos = m_DisplayMatrix.Transform(
-      prev_Obj.m_formMatrix.Transform(prev_Obj.m_pTextObj->GetPos()));
+      prev_obj.m_formMatrix.Transform(prev_obj.m_pTextObj->GetPos()));
   CFX_PointF this_pos =
       m_DisplayMatrix.Transform(formMatrix.Transform(pTextObj->GetPos()));
   if (fabs(this_pos.y - prev_pos.y) > threshold * 2) {
     for (size_t i = 0; i < count; ++i)
-      ProcessTextObject(m_LineObj[i]);
-    m_LineObj.clear();
-    m_LineObj.push_back(Obj);
+      ProcessTextObject(mTextObjects[i]);
+    mTextObjects.clear();
+    mTextObjects.push_back(new_obj);
     return;
   }
 
   for (size_t i = count; i > 0; --i) {
-    PDFTEXT_Obj prev_text_obj = m_LineObj[i - 1];
+    TransformedTextObject prev_text_obj = mTextObjects[i - 1];
     CFX_PointF new_prev_pos =
         m_DisplayMatrix.Transform(prev_text_obj.m_formMatrix.Transform(
             prev_text_obj.m_pTextObj->GetPos()));
     if (this_pos.x >= new_prev_pos.x) {
-      m_LineObj.insert(m_LineObj.begin() + i, Obj);
+      mTextObjects.insert(mTextObjects.begin() + i, new_obj);
       return;
     }
   }
-  m_LineObj.insert(m_LineObj.begin(), Obj);
+  mTextObjects.insert(mTextObjects.begin(), new_obj);
 }
 
 CPDF_TextPage::MarkedContentState CPDF_TextPage::PreMarkedContent(
-    PDFTEXT_Obj Obj) {
-  CPDF_TextObject* pTextObj = Obj.m_pTextObj.Get();
+    const CPDF_TextObject* pTextObj) {
   size_t nContentMarks = pTextObj->m_ContentMarks.CountItems();
   if (nContentMarks == 0)
     return MarkedContentState::kPass;
@@ -842,8 +842,8 @@
   return MarkedContentState::kDelay;
 }
 
-void CPDF_TextPage::ProcessMarkedContent(PDFTEXT_Obj Obj) {
-  CPDF_TextObject* pTextObj = Obj.m_pTextObj.Get();
+void CPDF_TextPage::ProcessMarkedContent(const TransformedTextObject& obj) {
+  CPDF_TextObject* pTextObj = obj.m_pTextObj.Get();
 
   size_t nContentMarks = pTextObj->m_ContentMarks.CountItems();
   if (nContentMarks == 0)
@@ -860,7 +860,7 @@
     return;
 
   RetainPtr<CPDF_Font> pFont = pTextObj->GetFont();
-  CFX_Matrix matrix = pTextObj->GetTextMatrix() * Obj.m_formMatrix;
+  CFX_Matrix matrix = pTextObj->GetTextMatrix() * obj.m_formMatrix;
 
   for (size_t k = 0; k < actText.GetLength(); ++k) {
     wchar_t wChar = actText[k];
@@ -907,27 +907,27 @@
     std::swap(pTempBuffer[i], pTempBuffer[j]);
 }
 
-void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
-  CPDF_TextObject* pTextObj = Obj.m_pTextObj.Get();
+void CPDF_TextPage::ProcessTextObject(const TransformedTextObject& obj) {
+  CPDF_TextObject* const pTextObj = obj.m_pTextObj.Get();
   if (fabs(pTextObj->GetRect().Width()) < kSizeEpsilon)
     return;
 
-  CFX_Matrix formMatrix = Obj.m_formMatrix;
+  CFX_Matrix form_matrix = obj.m_formMatrix;
   RetainPtr<CPDF_Font> pFont = pTextObj->GetFont();
-  CFX_Matrix matrix = pTextObj->GetTextMatrix() * formMatrix;
-  MarkedContentState ePreMKC = PreMarkedContent(Obj);
+  CFX_Matrix matrix = pTextObj->GetTextMatrix() * form_matrix;
+  MarkedContentState ePreMKC = PreMarkedContent(obj.m_pTextObj.Get());
   if (ePreMKC == MarkedContentState::kDone) {
     m_pPrevTextObj = pTextObj;
-    m_PrevMatrix = formMatrix;
+    m_PrevMatrix = form_matrix;
     return;
   }
   GenerateCharacter result = GenerateCharacter::kNone;
   if (m_pPrevTextObj) {
-    result = ProcessInsertObject(pTextObj, formMatrix);
+    result = ProcessInsertObject(pTextObj, form_matrix);
     if (result == GenerateCharacter::kLineBreak)
-      m_CurlineRect = Obj.m_pTextObj->GetRect();
+      m_CurlineRect = pTextObj->GetRect();
     else
-      m_CurlineRect.Union(Obj.m_pTextObj->GetRect());
+      m_CurlineRect.Union(obj.m_pTextObj->GetRect());
 
     switch (result) {
       case GenerateCharacter::kNone:
@@ -935,8 +935,8 @@
       case GenerateCharacter::kSpace: {
         Optional<CharInfo> pGenerateChar = GenerateCharInfo(L' ');
         if (pGenerateChar) {
-          if (!formMatrix.IsIdentity())
-            pGenerateChar->m_Matrix = formMatrix;
+          if (!form_matrix.IsIdentity())
+            pGenerateChar->m_Matrix = form_matrix;
           m_TempTextBuf.AppendChar(L' ');
           m_TempCharList.push_back(*pGenerateChar);
         }
@@ -945,8 +945,8 @@
       case GenerateCharacter::kLineBreak:
         CloseTempLine();
         if (m_TextBuf.GetSize()) {
-          AppendGeneratedCharacter(L'\r', formMatrix);
-          AppendGeneratedCharacter(L'\n', formMatrix);
+          AppendGeneratedCharacter(L'\r', form_matrix);
+          AppendGeneratedCharacter(L'\n', form_matrix);
         }
         break;
       case GenerateCharacter::kHyphen:
@@ -974,17 +974,17 @@
         break;
     }
   } else {
-    m_CurlineRect = Obj.m_pTextObj->GetRect();
+    m_CurlineRect = pTextObj->GetRect();
   }
 
   if (ePreMKC == MarkedContentState::kDelay) {
-    ProcessMarkedContent(Obj);
+    ProcessMarkedContent(obj);
     m_pPrevTextObj = pTextObj;
-    m_PrevMatrix = formMatrix;
+    m_PrevMatrix = form_matrix;
     return;
   }
   m_pPrevTextObj = pTextObj;
-  m_PrevMatrix = formMatrix;
+  m_PrevMatrix = form_matrix;
   float baseSpace = CalculateBaseSpace(pTextObj, matrix);
 
   const bool bR2L = IsRightToLeft(*pTextObj, *pFont);
@@ -1039,7 +1039,7 @@
         charinfo.m_Index = m_TextBuf.GetLength();
         m_TempTextBuf.AppendChar(L' ');
         charinfo.m_CharCode = CPDF_Font::kInvalidCharCode;
-        charinfo.m_Matrix = formMatrix;
+        charinfo.m_Matrix = form_matrix;
         charinfo.m_Origin = matrix.Transform(item.m_Origin);
         charinfo.m_CharBox =
             CFX_FloatRect(charinfo.m_Origin.x, charinfo.m_Origin.y,
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index bac7181..37cb095 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -23,15 +23,6 @@
 class CPDF_Page;
 class CPDF_TextObject;
 
-struct PDFTEXT_Obj {
-  PDFTEXT_Obj();
-  PDFTEXT_Obj(const PDFTEXT_Obj& that);
-  ~PDFTEXT_Obj();
-
-  UnownedPtr<CPDF_TextObject> m_pTextObj;
-  CFX_Matrix m_formMatrix;
-};
-
 class CPDF_TextPage {
  public:
   enum class CharType : uint8_t {
@@ -100,12 +91,21 @@
 
   enum class MarkedContentState { kPass = 0, kDone, kDelay };
 
+  struct TransformedTextObject {
+    TransformedTextObject();
+    TransformedTextObject(const TransformedTextObject& that);
+    ~TransformedTextObject();
+
+    UnownedPtr<CPDF_TextObject> m_pTextObj;
+    CFX_Matrix m_formMatrix;
+  };
+
   void Init();
   bool IsHyphen(wchar_t curChar) const;
   void ProcessObject();
   void ProcessFormObject(CPDF_FormObject* pFormObj,
                          const CFX_Matrix& formMatrix);
-  void ProcessTextObject(PDFTEXT_Obj pObj);
+  void ProcessTextObject(const TransformedTextObject& obj);
   void ProcessTextObject(CPDF_TextObject* pTextObj,
                          const CFX_Matrix& formMatrix,
                          const CPDF_PageObjectHolder* pObjList,
@@ -120,8 +120,8 @@
   bool IsSameTextObject(CPDF_TextObject* pTextObj1,
                         CPDF_TextObject* pTextObj2) const;
   void CloseTempLine();
-  MarkedContentState PreMarkedContent(PDFTEXT_Obj pObj);
-  void ProcessMarkedContent(PDFTEXT_Obj pObj);
+  MarkedContentState PreMarkedContent(const CPDF_TextObject* pTextObj);
+  void ProcessMarkedContent(const TransformedTextObject& obj);
   void FindPreviousTextObject();
   void AddCharInfoByLRDirection(wchar_t wChar, const CharInfo& info);
   void AddCharInfoByRLDirection(wchar_t wChar, const CharInfo& info);
@@ -144,7 +144,7 @@
   const bool m_rtl;
   const CFX_Matrix m_DisplayMatrix;
   std::vector<CFX_FloatRect> m_SelRects;
-  std::vector<PDFTEXT_Obj> m_LineObj;
+  std::vector<TransformedTextObject> mTextObjects;
   TextOrientation m_TextlineDir = TextOrientation::kUnknown;
   CFX_FloatRect m_CurlineRect;
 };