Replace CPDF_TextPageFind flags with options.
Instead of having various flags combined into an int, define a struct to
hold the various options.
Change-Id: I7cfcfb57d7c056385ff5e2cf1d670bb5b5faa656
Reviewed-on: https://pdfium-review.googlesource.com/c/50473
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index 7ab2702..e10b45d 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -23,10 +23,6 @@
class CPDF_Page;
class CPDF_TextObject;
-#define FPDFTEXT_MATCHCASE 0x00000001
-#define FPDFTEXT_MATCHWHOLEWORD 0x00000002
-#define FPDFTEXT_CONSECUTIVE 0x00000004
-
#define FPDFTEXT_CHAR_NORMAL 0
#define FPDFTEXT_CHAR_GENERATED 1
#define FPDFTEXT_CHAR_UNUNICODE 2
diff --git a/core/fpdftext/cpdf_textpagefind.cpp b/core/fpdftext/cpdf_textpagefind.cpp
index 829fc56..b431f5d 100644
--- a/core/fpdftext/cpdf_textpagefind.cpp
+++ b/core/fpdftext/cpdf_textpagefind.cpp
@@ -75,16 +75,16 @@
}
bool CPDF_TextPageFind::FindFirst(const WideString& findwhat,
- int flags,
+ const Options& options,
Optional<size_t> startPos) {
if (!m_pTextPage)
return false;
- if (m_strText.IsEmpty() || m_bMatchCase != (flags & FPDFTEXT_MATCHCASE))
+ if (m_strText.IsEmpty() || m_bMatchCase != options.bMatchCase)
m_strText = m_pTextPage->GetAllPageText();
WideString findwhatStr = findwhat;
m_findWhat = findwhatStr;
- m_flags = flags;
- m_bMatchCase = flags & FPDFTEXT_MATCHCASE;
+ m_options = options;
+ m_bMatchCase = options.bMatchCase;
if (m_strText.IsEmpty()) {
m_IsFind = false;
return true;
@@ -94,7 +94,7 @@
findwhatStr.MakeLower();
m_strText.MakeLower();
}
- m_bMatchWholeWord = !!(flags & FPDFTEXT_MATCHWHOLEWORD);
+ m_bMatchWholeWord = options.bMatchWholeWord;
m_findNextStart = startPos;
if (!startPos.has_value()) {
if (!m_strText.IsEmpty())
@@ -212,7 +212,7 @@
int resStart = GetCharIndex(m_resStart);
int resEnd = GetCharIndex(m_resEnd);
m_resArray = m_pTextPage->GetRectArray(resStart, resEnd - resStart + 1);
- if (m_flags & FPDFTEXT_CONSECUTIVE) {
+ if (m_options.bConsecutive) {
m_findNextStart = m_resStart + 1;
m_findPreStart = m_resEnd - 1;
} else {
@@ -231,7 +231,7 @@
return m_IsFind;
}
CPDF_TextPageFind findEngine(m_pTextPage.Get());
- bool ret = findEngine.FindFirst(m_findWhat, m_flags, Optional<size_t>(0));
+ bool ret = findEngine.FindFirst(m_findWhat, m_options, 0);
if (!ret) {
m_IsFind = false;
return m_IsFind;
@@ -258,7 +258,7 @@
m_resEnd = m_pTextPage->TextIndexFromCharIndex(order + MatchedCount - 1);
m_IsFind = true;
m_resArray = m_pTextPage->GetRectArray(order, MatchedCount);
- if (m_flags & FPDFTEXT_CONSECUTIVE) {
+ if (m_options.bConsecutive) {
m_findNextStart = m_resStart + 1;
m_findPreStart = m_resEnd - 1;
} else {
diff --git a/core/fpdftext/cpdf_textpagefind.h b/core/fpdftext/cpdf_textpagefind.h
index 8d59456..e075c41 100644
--- a/core/fpdftext/cpdf_textpagefind.h
+++ b/core/fpdftext/cpdf_textpagefind.h
@@ -19,11 +19,17 @@
class CPDF_TextPageFind {
public:
+ struct Options {
+ bool bMatchCase = false;
+ bool bMatchWholeWord = false;
+ bool bConsecutive = false;
+ };
+
explicit CPDF_TextPageFind(const CPDF_TextPage* pTextPage);
~CPDF_TextPageFind();
bool FindFirst(const WideString& findwhat,
- int flags,
+ const Options& options,
Optional<size_t> startPos);
bool FindNext();
bool FindPrev();
@@ -51,7 +57,7 @@
Optional<size_t> m_findPreStart;
int m_resStart = 0;
int m_resEnd = -1;
- int m_flags = 0;
+ Options m_options;
bool m_bMatchCase = false;
bool m_bMatchWholeWord = false;
bool m_IsFind = false;
diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp
index 044624b..37eba57 100644
--- a/fpdfsdk/fpdf_text.cpp
+++ b/fpdfsdk/fpdf_text.cpp
@@ -279,11 +279,15 @@
if (!text_page)
return nullptr;
+ CPDF_TextPageFind::Options options;
+ options.bMatchCase = !!(flags & FPDF_MATCHCASE);
+ options.bMatchWholeWord = !!(flags & FPDF_MATCHWHOLEWORD);
+ options.bConsecutive = !!(flags & FPDF_CONSECUTIVE);
CPDF_TextPageFind* textpageFind =
new CPDF_TextPageFind(CPDFTextPageFromFPDFTextPage(text_page));
textpageFind->FindFirst(
- WideStringFromFPDFWideString(findwhat), flags,
- start_index >= 0 ? Optional<size_t>(start_index) : Optional<size_t>());
+ WideStringFromFPDFWideString(findwhat), options,
+ start_index >= 0 ? Optional<size_t>(start_index) : pdfium::nullopt);
return FPDFSchHandleFromCPDFTextPageFind(textpageFind);
}