// 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_FPDFTEXT_CPDF_TEXTPAGEFIND_H_ #define CORE_FPDFTEXT_CPDF_TEXTPAGEFIND_H_ #include <vector> #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/fx_string.h" #include "core/fxcrt/fx_system.h" #include "core/fxcrt/unowned_ptr.h" #include "third_party/base/optional.h" class CPDF_TextPage; class CPDF_TextPageFind { public: explicit CPDF_TextPageFind(const CPDF_TextPage* pTextPage); ~CPDF_TextPageFind(); bool FindFirst(const WideString& findwhat, int flags, Optional<size_t> startPos); bool FindNext(); bool FindPrev(); int GetCurOrder() const; int GetMatchedCount() const; protected: void ExtractFindWhat(const WideString& findwhat); bool IsMatchWholeWord(const WideString& csPageText, size_t startPos, size_t endPos); Optional<WideString> ExtractSubString(const wchar_t* lpszFullString, int iSubString, wchar_t chSep); int GetCharIndex(int index) const; private: std::vector<uint16_t> m_CharIndex; UnownedPtr<const CPDF_TextPage> m_pTextPage; WideString m_strText; WideString m_findWhat; int m_flags; std::vector<WideString> m_csFindWhatArray; Optional<size_t> m_findNextStart; Optional<size_t> m_findPreStart; bool m_bMatchCase; bool m_bMatchWholeWord; int m_resStart; int m_resEnd; std::vector<CFX_FloatRect> m_resArray; bool m_IsFind; }; #endif // CORE_FPDFTEXT_CPDF_TEXTPAGEFIND_H_