Git rid of FPDFText_Direction.

Replace it with bools named "rtl" which is just as easy to understand in
the few places that use FPDFText_Direction in CPDF_TextPage. Also switch
a CPDF_TextPage instantiation / deletion to use unique_ptrs instead of
raw new/delete calls.

Change-Id: Idd98dcb258eeef2485939176ad97d315d07f97ef
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65431
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 5f2d88e..fe20e93 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -222,8 +222,8 @@
 
 PAGECHAR_INFO::~PAGECHAR_INFO() {}
 
-CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage, FPDFText_Direction flags)
-    : m_pPage(pPage), m_parserflag(flags) {
+CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage, bool rtl)
+    : m_pPage(pPage), m_rtl(rtl) {
   m_TextBuf.SetAllocStep(10240);
   const FX_RECT rect(0, 0, static_cast<int>(pPage->GetPageWidth()),
                      static_cast<int>(pPage->GetPageHeight()));
@@ -718,7 +718,7 @@
     bPrevSpace = true;
   }
   CFX_BidiString bidi(str);
-  if (m_parserflag == FPDFText_Direction::Right)
+  if (m_rtl)
     bidi.SetOverallDirectionRight();
   CFX_BidiChar::Direction eCurrentDirection = bidi.OverallDirection();
   for (const auto& segment : bidi) {
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index a5f3eeb..e6d655c 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -36,8 +36,6 @@
 #define TEXT_HYPHEN L"-"
 #define TEXT_CHARRATIO_GAPDELTA 0.070
 
-enum class FPDFText_Direction { Left = -1, Right = 1 };
-
 class PAGECHAR_INFO {
  public:
   PAGECHAR_INFO();
@@ -80,7 +78,7 @@
     CFX_Matrix m_Matrix;
   };
 
-  CPDF_TextPage(const CPDF_Page* pPage, FPDFText_Direction flags);
+  CPDF_TextPage(const CPDF_Page* pPage, bool rtl);
   ~CPDF_TextPage();
 
   void ParseTextPage();
@@ -158,9 +156,9 @@
   std::deque<PAGECHAR_INFO> m_TempCharList;
   CFX_WideTextBuf m_TextBuf;
   CFX_WideTextBuf m_TempTextBuf;
-  const FPDFText_Direction m_parserflag;
   UnownedPtr<CPDF_TextObject> m_pPreTextObj;
   CFX_Matrix m_perMatrix;
+  const bool m_rtl;
   bool m_bIsParsed = false;
   CFX_Matrix m_DisplayMatrix;
   std::vector<CFX_FloatRect> m_SelRects;
diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp
index 41d5614..9c16958 100644
--- a/fpdfsdk/fpdf_text.cpp
+++ b/fpdfsdk/fpdf_text.cpp
@@ -48,15 +48,18 @@
     return nullptr;
 
   CPDF_ViewerPreferences viewRef(pPDFPage->GetDocument());
-  CPDF_TextPage* textpage = new CPDF_TextPage(
-      pPDFPage, viewRef.IsDirectionR2L() ? FPDFText_Direction::Right
-                                         : FPDFText_Direction::Left);
+  auto textpage =
+      pdfium::MakeUnique<CPDF_TextPage>(pPDFPage, viewRef.IsDirectionR2L());
   textpage->ParseTextPage();
-  return FPDFTextPageFromCPDFTextPage(textpage);
+
+  // Caller takes ownership.
+  return FPDFTextPageFromCPDFTextPage(textpage.release());
 }
 
 FPDF_EXPORT void FPDF_CALLCONV FPDFText_ClosePage(FPDF_TEXTPAGE text_page) {
-  delete CPDFTextPageFromFPDFTextPage(text_page);
+  // PDFium takes ownership.
+  std::unique_ptr<CPDF_TextPage> textpage_deleter(
+      CPDFTextPageFromFPDFTextPage(text_page));
 }
 
 FPDF_EXPORT int FPDF_CALLCONV FPDFText_CountChars(FPDF_TEXTPAGE text_page) {