xref: /aosp_15_r20/external/pdfium/core/fpdftext/cpdf_textpagefind.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2016 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #ifndef CORE_FPDFTEXT_CPDF_TEXTPAGEFIND_H_
8 #define CORE_FPDFTEXT_CPDF_TEXTPAGEFIND_H_
9 
10 #include <stddef.h>
11 
12 #include <memory>
13 #include <vector>
14 
15 #include "core/fxcrt/fx_coordinates.h"
16 #include "core/fxcrt/unowned_ptr.h"
17 #include "core/fxcrt/widestring.h"
18 #include "third_party/abseil-cpp/absl/types/optional.h"
19 
20 class CPDF_TextPage;
21 
22 class CPDF_TextPageFind {
23  public:
24   struct Options {
25     bool bMatchCase = false;
26     bool bMatchWholeWord = false;
27     bool bConsecutive = false;
28   };
29 
30   static std::unique_ptr<CPDF_TextPageFind> Create(
31       const CPDF_TextPage* pTextPage,
32       const WideString& findwhat,
33       const Options& options,
34       absl::optional<size_t> startPos);
35 
36   ~CPDF_TextPageFind();
37 
38   bool FindNext();
39   bool FindPrev();
40   int GetCurOrder() const;
41   int GetMatchedCount() const;
42 
43  private:
44   CPDF_TextPageFind(const CPDF_TextPage* pTextPage,
45                     const std::vector<WideString>& findwhat_array,
46                     const Options& options,
47                     absl::optional<size_t> startPos);
48 
49   // Should be called immediately after construction.
50   bool FindFirst();
51 
52   int GetCharIndex(int index) const;
53 
54   UnownedPtr<const CPDF_TextPage> const m_pTextPage;
55   const WideString m_strText;
56   const std::vector<WideString> m_csFindWhatArray;
57   absl::optional<size_t> m_findNextStart;
58   absl::optional<size_t> m_findPreStart;
59   int m_resStart = 0;
60   int m_resEnd = -1;
61   const Options m_options;
62 };
63 
64 #endif  // CORE_FPDFTEXT_CPDF_TEXTPAGEFIND_H_
65