Make CPDF_TextStateData private to CPDF_TextState.

Review-Url: https://codereview.chromium.org/2313083002
diff --git a/BUILD.gn b/BUILD.gn
index 8df422d..4e430ab 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -451,8 +451,6 @@
     "core/fpdfapi/fpdf_page/cpdf_shadingpattern.h",
     "core/fpdfapi/fpdf_page/cpdf_textobject.cpp",
     "core/fpdfapi/fpdf_page/cpdf_textstate.cpp",
-    "core/fpdfapi/fpdf_page/cpdf_textstate.h",
-    "core/fpdfapi/fpdf_page/cpdf_textstatedata.cpp",
     "core/fpdfapi/fpdf_page/cpdf_tilingpattern.cpp",
     "core/fpdfapi/fpdf_page/cpdf_tilingpattern.h",
     "core/fpdfapi/fpdf_page/fpdf_page_colors.cpp",
@@ -475,7 +473,7 @@
     "core/fpdfapi/fpdf_page/include/cpdf_pathobject.h",
     "core/fpdfapi/fpdf_page/include/cpdf_shadingobject.h",
     "core/fpdfapi/fpdf_page/include/cpdf_textobject.h",
-    "core/fpdfapi/fpdf_page/include/cpdf_textstatedata.h",
+    "core/fpdfapi/fpdf_page/include/cpdf_textstate.h",
     "core/fpdfapi/fpdf_page/pageint.h",
     "core/fpdfapi/fpdf_parser/cfdf_document.cpp",
     "core/fpdfapi/fpdf_parser/cpdf_array.cpp",
diff --git a/core/fpdfapi/fpdf_page/cpdf_graphicstates.h b/core/fpdfapi/fpdf_page/cpdf_graphicstates.h
index fb404ff..5059f3c 100644
--- a/core/fpdfapi/fpdf_page/cpdf_graphicstates.h
+++ b/core/fpdfapi/fpdf_page/cpdf_graphicstates.h
@@ -8,9 +8,9 @@
 #define CORE_FPDFAPI_FPDF_PAGE_CPDF_GRAPHICSTATES_H_
 
 #include "core/fpdfapi/fpdf_page/cpdf_colorstate.h"
-#include "core/fpdfapi/fpdf_page/cpdf_textstate.h"
 #include "core/fpdfapi/fpdf_page/include/cpdf_clippath.h"
 #include "core/fpdfapi/fpdf_page/include/cpdf_generalstate.h"
+#include "core/fpdfapi/fpdf_page/include/cpdf_textstate.h"
 #include "core/fxge/include/cfx_graphstate.h"
 
 class CPDF_GraphicStates {
diff --git a/core/fpdfapi/fpdf_page/cpdf_textstate.cpp b/core/fpdfapi/fpdf_page/cpdf_textstate.cpp
index feb70ae..4967cca 100644
--- a/core/fpdfapi/fpdf_page/cpdf_textstate.cpp
+++ b/core/fpdfapi/fpdf_page/cpdf_textstate.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/fpdf_page/cpdf_textstate.h"
+#include "core/fpdfapi/fpdf_page/include/cpdf_textstate.h"
 
 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h"
 #include "core/fpdfapi/fpdf_page/pageint.h"
@@ -88,3 +88,100 @@
 FX_FLOAT* CPDF_TextState::GetMutableCTM() {
   return m_Ref.GetPrivateCopy()->m_CTM;
 }
+
+CPDF_TextState::TextData::TextData()
+    : m_pFont(nullptr),
+      m_pDocument(nullptr),
+      m_FontSize(1.0f),
+      m_CharSpace(0),
+      m_WordSpace(0),
+      m_TextMode(TextRenderingMode::MODE_FILL) {
+  m_Matrix[0] = m_Matrix[3] = 1.0f;
+  m_Matrix[1] = m_Matrix[2] = 0;
+  m_CTM[0] = m_CTM[3] = 1.0f;
+  m_CTM[1] = m_CTM[2] = 0;
+}
+
+CPDF_TextState::TextData::TextData(const TextData& that)
+    : m_pFont(that.m_pFont),
+      m_pDocument(that.m_pDocument),
+      m_FontSize(that.m_FontSize),
+      m_CharSpace(that.m_CharSpace),
+      m_WordSpace(that.m_WordSpace),
+      m_TextMode(that.m_TextMode) {
+  for (int i = 0; i < 4; ++i)
+    m_Matrix[i] = that.m_Matrix[i];
+
+  for (int i = 0; i < 4; ++i)
+    m_CTM[i] = that.m_CTM[i];
+
+  if (m_pDocument && m_pFont) {
+    m_pFont =
+        m_pDocument->GetPageData()->GetFont(m_pFont->GetFontDict(), FALSE);
+  }
+}
+
+CPDF_TextState::TextData::~TextData() {
+  if (m_pDocument && m_pFont) {
+    CPDF_DocPageData* pPageData = m_pDocument->GetPageData();
+    if (pPageData && !pPageData->IsForceClear())
+      pPageData->ReleaseFont(m_pFont->GetFontDict());
+  }
+}
+
+void CPDF_TextState::TextData::SetFont(CPDF_Font* pFont) {
+  CPDF_Document* pDoc = m_pDocument;
+  CPDF_DocPageData* pPageData = pDoc ? pDoc->GetPageData() : nullptr;
+  if (pPageData && m_pFont && !pPageData->IsForceClear())
+    pPageData->ReleaseFont(m_pFont->GetFontDict());
+
+  m_pDocument = pFont ? pFont->m_pDocument : nullptr;
+  m_pFont = pFont;
+}
+
+FX_FLOAT CPDF_TextState::TextData::GetFontSizeV() const {
+  return FXSYS_fabs(FXSYS_sqrt2(m_Matrix[1], m_Matrix[3]) * m_FontSize);
+}
+
+FX_FLOAT CPDF_TextState::TextData::GetFontSizeH() const {
+  return FXSYS_fabs(FXSYS_sqrt2(m_Matrix[0], m_Matrix[2]) * m_FontSize);
+}
+
+FX_FLOAT CPDF_TextState::TextData::GetBaselineAngle() const {
+  return FXSYS_atan2(m_Matrix[2], m_Matrix[0]);
+}
+
+FX_FLOAT CPDF_TextState::TextData::GetShearAngle() const {
+  return GetBaselineAngle() + FXSYS_atan2(m_Matrix[1], m_Matrix[3]);
+}
+
+bool SetTextRenderingModeFromInt(int iMode, TextRenderingMode* mode) {
+  if (iMode < 0 || iMode > 7)
+    return false;
+  *mode = static_cast<TextRenderingMode>(iMode);
+  return true;
+}
+
+bool TextRenderingModeIsClipMode(const TextRenderingMode& mode) {
+  switch (mode) {
+    case TextRenderingMode::MODE_FILL_CLIP:
+    case TextRenderingMode::MODE_STROKE_CLIP:
+    case TextRenderingMode::MODE_FILL_STROKE_CLIP:
+    case TextRenderingMode::MODE_CLIP:
+      return true;
+    default:
+      return false;
+  }
+}
+
+bool TextRenderingModeIsStrokeMode(const TextRenderingMode& mode) {
+  switch (mode) {
+    case TextRenderingMode::MODE_STROKE:
+    case TextRenderingMode::MODE_FILL_STROKE:
+    case TextRenderingMode::MODE_STROKE_CLIP:
+    case TextRenderingMode::MODE_FILL_STROKE_CLIP:
+      return true;
+    default:
+      return false;
+  }
+}
diff --git a/core/fpdfapi/fpdf_page/cpdf_textstate.h b/core/fpdfapi/fpdf_page/cpdf_textstate.h
deleted file mode 100644
index 87f0b5c..0000000
--- a/core/fpdfapi/fpdf_page/cpdf_textstate.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FPDFAPI_FPDF_PAGE_CPDF_TEXTSTATE_H_
-#define CORE_FPDFAPI_FPDF_PAGE_CPDF_TEXTSTATE_H_
-
-#include "core/fpdfapi/fpdf_page/include/cpdf_textstatedata.h"
-#include "core/fxcrt/include/cfx_count_ref.h"
-#include "core/fxcrt/include/fx_basic.h"
-
-class CPDF_Font;
-
-class CPDF_TextState {
- public:
-  CPDF_TextState();
-  ~CPDF_TextState();
-
-  void Emplace();
-
-  CPDF_Font* GetFont() const;
-  void SetFont(CPDF_Font* pFont);
-
-  FX_FLOAT GetFontSize() const;
-  void SetFontSize(FX_FLOAT size);
-
-  const FX_FLOAT* GetMatrix() const;
-  FX_FLOAT* GetMutableMatrix();
-
-  FX_FLOAT GetCharSpace() const;
-  void SetCharSpace(FX_FLOAT sp);
-
-  FX_FLOAT GetWordSpace() const;
-  void SetWordSpace(FX_FLOAT sp);
-
-  FX_FLOAT GetFontSizeV() const;
-  FX_FLOAT GetFontSizeH() const;
-  FX_FLOAT GetBaselineAngle() const;
-  FX_FLOAT GetShearAngle() const;
-
-  TextRenderingMode GetTextMode() const;
-  void SetTextMode(TextRenderingMode mode);
-
-  const FX_FLOAT* GetCTM() const;
-  FX_FLOAT* GetMutableCTM();
-
- private:
-  CFX_CountRef<CPDF_TextStateData> m_Ref;
-};
-
-#endif  // CORE_FPDFAPI_FPDF_PAGE_CPDF_TEXTSTATE_H_
diff --git a/core/fpdfapi/fpdf_page/cpdf_textstatedata.cpp b/core/fpdfapi/fpdf_page/cpdf_textstatedata.cpp
deleted file mode 100644
index 17c33a0..0000000
--- a/core/fpdfapi/fpdf_page/cpdf_textstatedata.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/fpdfapi/fpdf_page/include/cpdf_textstatedata.h"
-
-#include "core/fpdfapi/fpdf_font/include/cpdf_font.h"
-#include "core/fpdfapi/fpdf_page/pageint.h"
-#include "core/fpdfapi/fpdf_parser/include/cpdf_document.h"
-
-bool SetTextRenderingModeFromInt(int iMode, TextRenderingMode* mode) {
-  if (iMode < 0 || iMode > 7)
-    return false;
-  *mode = static_cast<TextRenderingMode>(iMode);
-  return true;
-}
-
-bool TextRenderingModeIsClipMode(const TextRenderingMode& mode) {
-  switch (mode) {
-    case TextRenderingMode::MODE_FILL_CLIP:
-    case TextRenderingMode::MODE_STROKE_CLIP:
-    case TextRenderingMode::MODE_FILL_STROKE_CLIP:
-    case TextRenderingMode::MODE_CLIP:
-      return true;
-    default:
-      return false;
-  }
-}
-
-bool TextRenderingModeIsStrokeMode(const TextRenderingMode& mode) {
-  switch (mode) {
-    case TextRenderingMode::MODE_STROKE:
-    case TextRenderingMode::MODE_FILL_STROKE:
-    case TextRenderingMode::MODE_STROKE_CLIP:
-    case TextRenderingMode::MODE_FILL_STROKE_CLIP:
-      return true;
-    default:
-      return false;
-  }
-}
-
-CPDF_TextStateData::CPDF_TextStateData()
-    : m_pFont(nullptr),
-      m_pDocument(nullptr),
-      m_FontSize(1.0f),
-      m_CharSpace(0),
-      m_WordSpace(0),
-      m_TextMode(TextRenderingMode::MODE_FILL) {
-  m_Matrix[0] = m_Matrix[3] = 1.0f;
-  m_Matrix[1] = m_Matrix[2] = 0;
-  m_CTM[0] = m_CTM[3] = 1.0f;
-  m_CTM[1] = m_CTM[2] = 0;
-}
-
-CPDF_TextStateData::CPDF_TextStateData(const CPDF_TextStateData& src) {
-  if (this == &src)
-    return;
-
-  FXSYS_memcpy(this, &src, sizeof(CPDF_TextStateData));
-  if (m_pDocument && m_pFont) {
-    m_pFont =
-        m_pDocument->GetPageData()->GetFont(m_pFont->GetFontDict(), FALSE);
-  }
-}
-
-CPDF_TextStateData::~CPDF_TextStateData() {
-  if (m_pDocument && m_pFont) {
-    CPDF_DocPageData* pPageData = m_pDocument->GetPageData();
-    if (pPageData && !pPageData->IsForceClear())
-      pPageData->ReleaseFont(m_pFont->GetFontDict());
-  }
-}
-
-void CPDF_TextStateData::SetFont(CPDF_Font* pFont) {
-  CPDF_Document* pDoc = m_pDocument;
-  CPDF_DocPageData* pPageData = pDoc ? pDoc->GetPageData() : nullptr;
-  if (pPageData && m_pFont && !pPageData->IsForceClear())
-    pPageData->ReleaseFont(m_pFont->GetFontDict());
-
-  m_pDocument = pFont ? pFont->m_pDocument : nullptr;
-  m_pFont = pFont;
-}
-
-FX_FLOAT CPDF_TextStateData::GetFontSizeV() const {
-  return FXSYS_fabs(FXSYS_sqrt2(m_Matrix[1], m_Matrix[3]) * m_FontSize);
-}
-
-FX_FLOAT CPDF_TextStateData::GetFontSizeH() const {
-  return FXSYS_fabs(FXSYS_sqrt2(m_Matrix[0], m_Matrix[2]) * m_FontSize);
-}
-
-FX_FLOAT CPDF_TextStateData::GetBaselineAngle() const {
-  return FXSYS_atan2(m_Matrix[2], m_Matrix[0]);
-}
-
-FX_FLOAT CPDF_TextStateData::GetShearAngle() const {
-  return GetBaselineAngle() + FXSYS_atan2(m_Matrix[1], m_Matrix[3]);
-}
diff --git a/core/fpdfapi/fpdf_page/include/cpdf_textstate.h b/core/fpdfapi/fpdf_page/include/cpdf_textstate.h
new file mode 100644
index 0000000..b457026
--- /dev/null
+++ b/core/fpdfapi/fpdf_page/include/cpdf_textstate.h
@@ -0,0 +1,91 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_TEXTSTATE_H_
+#define CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_TEXTSTATE_H_
+
+#include "core/fxcrt/include/cfx_count_ref.h"
+#include "core/fxcrt/include/fx_basic.h"
+
+class CPDF_Document;
+class CPDF_Font;
+
+// See PDF Reference 1.7, page 402, table 5.3.
+enum class TextRenderingMode {
+  MODE_FILL = 0,
+  MODE_STROKE = 1,
+  MODE_FILL_STROKE = 2,
+  MODE_INVISIBLE = 3,
+  MODE_FILL_CLIP = 4,
+  MODE_STROKE_CLIP = 5,
+  MODE_FILL_STROKE_CLIP = 6,
+  MODE_CLIP = 7,
+};
+
+class CPDF_TextState {
+ public:
+  CPDF_TextState();
+  ~CPDF_TextState();
+
+  void Emplace();
+
+  CPDF_Font* GetFont() const;
+  void SetFont(CPDF_Font* pFont);
+
+  FX_FLOAT GetFontSize() const;
+  void SetFontSize(FX_FLOAT size);
+
+  const FX_FLOAT* GetMatrix() const;
+  FX_FLOAT* GetMutableMatrix();
+
+  FX_FLOAT GetCharSpace() const;
+  void SetCharSpace(FX_FLOAT sp);
+
+  FX_FLOAT GetWordSpace() const;
+  void SetWordSpace(FX_FLOAT sp);
+
+  FX_FLOAT GetFontSizeV() const;
+  FX_FLOAT GetFontSizeH() const;
+  FX_FLOAT GetBaselineAngle() const;
+  FX_FLOAT GetShearAngle() const;
+
+  TextRenderingMode GetTextMode() const;
+  void SetTextMode(TextRenderingMode mode);
+
+  const FX_FLOAT* GetCTM() const;
+  FX_FLOAT* GetMutableCTM();
+
+ private:
+  class TextData {
+   public:
+    TextData();
+    TextData(const TextData& src);
+    ~TextData();
+
+    void SetFont(CPDF_Font* pFont);
+    FX_FLOAT GetFontSizeV() const;
+    FX_FLOAT GetFontSizeH() const;
+    FX_FLOAT GetBaselineAngle() const;
+    FX_FLOAT GetShearAngle() const;
+
+    CPDF_Font* m_pFont;
+    CPDF_Document* m_pDocument;
+    FX_FLOAT m_FontSize;
+    FX_FLOAT m_CharSpace;
+    FX_FLOAT m_WordSpace;
+    TextRenderingMode m_TextMode;
+    FX_FLOAT m_Matrix[4];
+    FX_FLOAT m_CTM[4];
+  };
+
+  CFX_CountRef<TextData> m_Ref;
+};
+
+bool SetTextRenderingModeFromInt(int iMode, TextRenderingMode* mode);
+bool TextRenderingModeIsClipMode(const TextRenderingMode& mode);
+bool TextRenderingModeIsStrokeMode(const TextRenderingMode& mode);
+
+#endif  // CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_TEXTSTATE_H_
diff --git a/core/fpdfapi/fpdf_page/include/cpdf_textstatedata.h b/core/fpdfapi/fpdf_page/include/cpdf_textstatedata.h
deleted file mode 100644
index f3d6696..0000000
--- a/core/fpdfapi/fpdf_page/include/cpdf_textstatedata.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_TEXTSTATEDATA_H_
-#define CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_TEXTSTATEDATA_H_
-
-#include "core/fxcrt/include/fx_system.h"
-
-class CPDF_Font;
-class CPDF_Document;
-
-// See PDF Reference 1.7, page 402, table 5.3.
-enum class TextRenderingMode {
-  MODE_FILL = 0,
-  MODE_STROKE = 1,
-  MODE_FILL_STROKE = 2,
-  MODE_INVISIBLE = 3,
-  MODE_FILL_CLIP = 4,
-  MODE_STROKE_CLIP = 5,
-  MODE_FILL_STROKE_CLIP = 6,
-  MODE_CLIP = 7,
-};
-
-bool SetTextRenderingModeFromInt(int iMode, TextRenderingMode* mode);
-bool TextRenderingModeIsClipMode(const TextRenderingMode& mode);
-bool TextRenderingModeIsStrokeMode(const TextRenderingMode& mode);
-
-class CPDF_TextStateData {
- public:
-  CPDF_TextStateData();
-  CPDF_TextStateData(const CPDF_TextStateData& src);
-  ~CPDF_TextStateData();
-
-  void SetFont(CPDF_Font* pFont);
-  FX_FLOAT GetFontSizeV() const;
-  FX_FLOAT GetFontSizeH() const;
-  FX_FLOAT GetBaselineAngle() const;
-  FX_FLOAT GetShearAngle() const;
-
-  CPDF_Font* m_pFont;
-  CPDF_Document* m_pDocument;
-  FX_FLOAT m_FontSize;
-  FX_FLOAT m_CharSpace;
-  FX_FLOAT m_WordSpace;
-  TextRenderingMode m_TextMode;
-  FX_FLOAT m_Matrix[4];
-  FX_FLOAT m_CTM[4];
-};
-
-#endif  // CORE_FPDFAPI_FPDF_PAGE_INCLUDE_CPDF_TEXTSTATEDATA_H_