// 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_