Convert FindNextBreakPos to return position
This CL changes FindNextBreakPos to return the found index instead of
requiring a call to GetAt(). This also fixes the issue that we may
return -1 from GetAt which would cause issues in the BoundsForWordAt
method when it gets shoved into a size_t variable.
Change-Id: I29e09de5d0837921a027208fc2471a9b1de287f1
Reviewed-on: https://pdfium-review.googlesource.com/14293
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/xfa/fde/cfde_texteditengine.cpp b/xfa/fde/cfde_texteditengine.cpp
index 233d958..c619a98 100644
--- a/xfa/fde/cfde_texteditengine.cpp
+++ b/xfa/fde/cfde_texteditengine.cpp
@@ -975,11 +975,9 @@
CFDE_TextEditEngine::Iterator iter(this);
iter.SetAt(idx);
- iter.FindNextBreakPos(true);
- size_t start_idx = iter.GetAt();
- iter.FindNextBreakPos(false);
- size_t end_idx = iter.GetAt();
+ size_t start_idx = iter.FindNextBreakPos(true);
+ size_t end_idx = iter.FindNextBreakPos(false);
return {start_idx, end_idx - start_idx + 1};
}
@@ -1006,19 +1004,13 @@
return engine_->GetChar(current_position_);
}
-void CFDE_TextEditEngine::Iterator::SetAt(int32_t nIndex) {
- if (nIndex < 0)
- current_position_ = 0;
- else if (static_cast<size_t>(nIndex) >= engine_->GetLength())
+void CFDE_TextEditEngine::Iterator::SetAt(size_t nIndex) {
+ if (static_cast<size_t>(nIndex) >= engine_->GetLength())
current_position_ = engine_->GetLength();
else
current_position_ = nIndex;
}
-int32_t CFDE_TextEditEngine::Iterator::GetAt() const {
- return current_position_;
-}
-
bool CFDE_TextEditEngine::Iterator::IsEOF(bool bPrev) const {
return bPrev ? current_position_ == -1
: current_position_ > -1 &&
@@ -1026,9 +1018,9 @@
engine_->GetLength();
}
-void CFDE_TextEditEngine::Iterator::FindNextBreakPos(bool bPrev) {
+size_t CFDE_TextEditEngine::Iterator::FindNextBreakPos(bool bPrev) {
if (IsEOF(bPrev))
- return;
+ return current_position_ > -1 ? current_position_ : 0;
WordBreakProperty ePreType = WordBreakProperty::kNone;
if (!IsEOF(!bPrev)) {
@@ -1047,14 +1039,14 @@
if (wBreak) {
if (IsEOF(bPrev)) {
Next(!bPrev);
- return;
+ break;
}
if (bFirst) {
int32_t nFlags = GetBreakFlagsFor(eCurType, eNextType);
if (nFlags > 0) {
if (BreakFlagsChanged(nFlags, ePreType)) {
Next(!bPrev);
- return;
+ break;
}
Next(bPrev);
wBreak = false;
@@ -1064,7 +1056,7 @@
int32_t nFlags = GetBreakFlagsFor(eNextType, eCurType);
if (nFlags <= 0) {
Next(!bPrev);
- return;
+ break;
}
Next(bPrev);
@@ -1072,11 +1064,12 @@
if (BreakFlagsChanged(nFlags, eNextType)) {
Next(!bPrev);
Next(!bPrev);
- return;
+ break;
}
}
}
eCurType = eNextType;
bFirst = false;
}
+ return current_position_ > -1 ? current_position_ : 0;
}
diff --git a/xfa/fde/cfde_texteditengine.h b/xfa/fde/cfde_texteditengine.h
index fc5a5fb..e26487a 100644
--- a/xfa/fde/cfde_texteditengine.h
+++ b/xfa/fde/cfde_texteditengine.h
@@ -44,9 +44,8 @@
void Next(bool bPrev);
wchar_t GetChar() const;
- void SetAt(int32_t nIndex);
- int32_t GetAt() const;
- void FindNextBreakPos(bool bPrev);
+ void SetAt(size_t nIndex);
+ size_t FindNextBreakPos(bool bPrev);
bool IsEOF(bool bPrev) const;
private: