// 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 #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 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 ExtractSubString(const wchar_t* lpszFullString, int iSubString, wchar_t chSep); int GetCharIndex(int index) const; private: std::vector m_CharIndex; UnownedPtr m_pTextPage; WideString m_strText; WideString m_findWhat; int m_flags; std::vector m_csFindWhatArray; Optional m_findNextStart; Optional m_findPreStart; bool m_bMatchCase; bool m_bMatchWholeWord; int m_resStart; int m_resEnd; std::vector m_resArray; bool m_IsFind; }; #endif // CORE_FPDFTEXT_CPDF_TEXTPAGEFIND_H_