diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-09-06 11:44:39 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-09-06 15:54:37 +0000 |
commit | eb57e0d0b396606b39ef76a864b8bf9dd91a8ed8 (patch) | |
tree | 3d4ee88701eed1cbb56f456ea6ebc7c7c0f47f6c /core | |
parent | 746552254ad113ef88b40aca4dbc0e57cefbac85 (diff) | |
download | pdfium-eb57e0d0b396606b39ef76a864b8bf9dd91a8ed8.tar.xz |
Implement word selection in CFDE_TextEditEngine
This CL implements the needed logic in CFDE_TextEditEngine to handle
word selection.
Change-Id: I6b388c23655037fec107d68ec07d33638b959374
Reviewed-on: https://pdfium-review.googlesource.com/13211
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Diffstat (limited to 'core')
-rw-r--r-- | core/fxcrt/cfx_wordbreak.cpp | 24 | ||||
-rw-r--r-- | core/fxcrt/cfx_wordbreak.h | 10 |
2 files changed, 10 insertions, 24 deletions
diff --git a/core/fxcrt/cfx_wordbreak.cpp b/core/fxcrt/cfx_wordbreak.cpp index 7a5d8f7dcd..86c6d40522 100644 --- a/core/fxcrt/cfx_wordbreak.cpp +++ b/core/fxcrt/cfx_wordbreak.cpp @@ -2779,16 +2779,14 @@ FX_WordBreakProp GetWordBreakProperty(wchar_t wcCodePoint) { } // namespace -CFX_WordBreak::CFX_WordBreak() {} +CFX_WordBreak::CFX_WordBreak(std::unique_ptr<IFX_CharIter> pIter) + : m_pCurIter(std::move(pIter)) { + ASSERT(m_pCurIter); +} CFX_WordBreak::~CFX_WordBreak() {} -void CFX_WordBreak::Attach(IFX_CharIter* pIter) { - ASSERT(pIter); - m_pCurIter.reset(pIter); -} - -void CFX_WordBreak::SetAt(int32_t nIndex) { +std::pair<size_t, size_t> CFX_WordBreak::BoundsAt(int32_t nIndex) { m_pPreIter.reset(); m_pCurIter->SetAt(nIndex); FindNextBreakPos(m_pCurIter.get(), true); @@ -2796,18 +2794,8 @@ void CFX_WordBreak::SetAt(int32_t nIndex) { m_pPreIter = std::move(m_pCurIter); m_pCurIter = m_pPreIter->Clone(); FindNextBreakPos(m_pCurIter.get(), false); -} - -int32_t CFX_WordBreak::GetWordPos() const { - return m_pPreIter->GetAt(); -} - -int32_t CFX_WordBreak::GetWordLength() const { - return m_pCurIter->GetAt() - m_pPreIter->GetAt() + 1; -} -bool CFX_WordBreak::IsEOF(bool bTail) const { - return m_pCurIter->IsEOF(bTail); + return {m_pPreIter->GetAt(), m_pCurIter->GetAt()}; } bool CFX_WordBreak::FindNextBreakPos(IFX_CharIter* pIter, bool bPrev) { diff --git a/core/fxcrt/cfx_wordbreak.h b/core/fxcrt/cfx_wordbreak.h index 59c071be03..6e94c71e95 100644 --- a/core/fxcrt/cfx_wordbreak.h +++ b/core/fxcrt/cfx_wordbreak.h @@ -8,22 +8,20 @@ #define CORE_FXCRT_CFX_WORDBREAK_H_ #include <memory> +#include <utility> class IFX_CharIter; class CFX_WordBreak { public: - CFX_WordBreak(); + explicit CFX_WordBreak(std::unique_ptr<IFX_CharIter> pIter); ~CFX_WordBreak(); - void Attach(IFX_CharIter* pIter); - void SetAt(int32_t nIndex); - int32_t GetWordPos() const; - int32_t GetWordLength() const; + // <start_idx, end_idx> + std::pair<size_t, size_t> BoundsAt(int32_t nIndex); private: bool FindNextBreakPos(IFX_CharIter* pIter, bool bPrev); - bool IsEOF(bool bTail) const; std::unique_ptr<IFX_CharIter> m_pPreIter; std::unique_ptr<IFX_CharIter> m_pCurIter; |