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) {