Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1299)

Unified Diff: third_party/WebKit/Source/platform/text/TextBreakIterator.h

Issue 2871173002: Add LazyLineBreakIterator::Next/PreviousBreakOpportunity() (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/text/TextBreakIterator.h
diff --git a/third_party/WebKit/Source/platform/text/TextBreakIterator.h b/third_party/WebKit/Source/platform/text/TextBreakIterator.h
index 7780e9ed2ab838a0c5d9035d86da9606b84cb86f..88b63e5d0e4ddaab69e0175caf3feda533251424 100644
--- a/third_party/WebKit/Source/platform/text/TextBreakIterator.h
+++ b/third_party/WebKit/Source/platform/text/TextBreakIterator.h
@@ -80,17 +80,20 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
LazyLineBreakIterator()
: iterator_(0),
cached_prior_context_(0),
- cached_prior_context_length_(0) {
+ cached_prior_context_length_(0),
+ break_type_(LineBreakType::kNormal) {
ResetPriorContext();
}
LazyLineBreakIterator(String string,
- const AtomicString& locale = AtomicString())
+ const AtomicString& locale = AtomicString(),
+ LineBreakType break_type = LineBreakType::kNormal)
: string_(string),
locale_(locale),
iterator_(0),
cached_prior_context_(0),
- cached_prior_context_length_(0) {
+ cached_prior_context_length_(0),
+ break_type_(break_type) {
ResetPriorContext();
}
@@ -150,7 +153,7 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
// is (or has been) initialized to use the previously stored string as the
// primary breaking context and using previously stored prior context if
// non-empty.
- TextBreakIterator* Get(unsigned prior_context_length) {
+ TextBreakIterator* Get(unsigned prior_context_length) const {
DCHECK(prior_context_length <= kPriorContextCapacity);
const UChar* prior_context =
prior_context_length
@@ -169,28 +172,32 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
cached_prior_context_length_ = prior_context_length;
} else if (prior_context != cached_prior_context_ ||
prior_context_length != cached_prior_context_length_) {
- this->ResetStringAndReleaseIterator(string_, locale_);
- return this->Get(prior_context_length);
+ ReleaseIterator();
+ return Get(prior_context_length);
}
return iterator_;
}
void ResetStringAndReleaseIterator(String string,
const AtomicString& locale) {
- if (iterator_)
- ReleaseLineBreakIterator(iterator_);
-
string_ = string;
locale_ = locale;
- iterator_ = 0;
- cached_prior_context_ = 0;
- cached_prior_context_length_ = 0;
+
+ ReleaseIterator();
+ }
+
+ void SetLocale(const AtomicString& locale) {
+ if (locale == locale_)
+ return;
+ locale_ = locale;
+ ReleaseIterator();
}
- inline bool IsBreakable(
- int pos,
- int& next_breakable,
- LineBreakType line_break_type = LineBreakType::kNormal) {
+ void SetBreakType(LineBreakType break_type) { break_type_ = break_type; }
+
+ inline bool IsBreakable(int pos,
+ int& next_breakable,
+ LineBreakType line_break_type) const {
if (pos > next_breakable) {
switch (line_break_type) {
case LineBreakType::kBreakAll:
@@ -206,18 +213,37 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
return pos == next_breakable;
}
+ inline bool IsBreakable(int pos, int& next_breakable) const {
+ return IsBreakable(pos, next_breakable, break_type_);
+ }
+
+ // Returns the break opportunity at or after |offset|.
+ unsigned NextBreakOpportunity(unsigned offset) const;
+
+ // Returns the break opportunity at or before |offset|.
+ unsigned PreviousBreakOpportunity(unsigned offset, unsigned min = 0) const;
+
private:
- int NextBreakablePositionIgnoringNBSP(int pos);
- int NextBreakablePositionBreakAll(int pos);
- int NextBreakablePositionKeepAll(int pos);
+ void ReleaseIterator() const {
+ if (iterator_)
+ ReleaseLineBreakIterator(iterator_);
+ iterator_ = 0;
+ cached_prior_context_ = 0;
+ cached_prior_context_length_ = 0;
+ }
+
+ int NextBreakablePositionIgnoringNBSP(int pos) const;
+ int NextBreakablePositionBreakAll(int pos) const;
+ int NextBreakablePositionKeepAll(int pos) const;
static const unsigned kPriorContextCapacity = 2;
String string_;
AtomicString locale_;
- TextBreakIterator* iterator_;
+ mutable TextBreakIterator* iterator_;
UChar prior_context_[kPriorContextCapacity];
- const UChar* cached_prior_context_;
- unsigned cached_prior_context_length_;
+ mutable const UChar* cached_prior_context_;
+ mutable unsigned cached_prior_context_length_;
+ LineBreakType break_type_;
};
// Iterates over "extended grapheme clusters", as defined in UAX #29.

Powered by Google App Engine
This is Rietveld 408576698