// 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" class CPDF_TextPage; class CPDF_TextPageFind { public: explicit CPDF_TextPageFind(const CPDF_TextPage* pTextPage); ~CPDF_TextPageFind(); bool FindFirst(const CFX_WideString& findwhat, int flags, int startPos = 0); bool FindNext(); bool FindPrev(); int GetCurOrder() const; int GetMatchedCount() const; protected: void ExtractFindWhat(const CFX_WideString& findwhat); bool IsMatchWholeWord(const CFX_WideString& csPageText, int startPos, int endPos); bool ExtractSubString(CFX_WideString& rString, const FX_WCHAR* lpszFullString, int iSubString, FX_WCHAR chSep); CFX_WideString MakeReverse(const CFX_WideString& str); int GetCharIndex(int index) const; private: std::vector<uint16_t> m_CharIndex; const CPDF_TextPage* m_pTextPage; CFX_WideString m_strText; CFX_WideString m_findWhat; int m_flags; std::vector<CFX_WideString> m_csFindWhatArray; int m_findNextStart; int 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_