diff options
| author | Zufu Liu <unknown> | 2021-10-21 22:15:57 +1100 | 
|---|---|---|
| committer | Zufu Liu <unknown> | 2021-10-21 22:15:57 +1100 | 
| commit | 9975609bf3b39f0e1cd121995ac49aea30a6c48f (patch) | |
| tree | 339887d2052a909480b4e3b4df12f318bbec2be8 /src/PositionCache.cxx | |
| parent | a989b1ed63c7cf81c693da8f2f66ab5e29ee341a (diff) | |
| download | scintilla-mirror-9975609bf3b39f0e1cd121995ac49aea30a6c48f.tar.gz | |
Feature [feature-requests:#1417] Use backward iteration to find space / control
character and text / punctuation boundaries in SafeSegment as will be simpler
and faster in almost all cases.
Simplify BreakFinder::Next calling SafeSegment.
Diffstat (limited to 'src/PositionCache.cxx')
| -rw-r--r-- | src/PositionCache.cxx | 21 | 
1 files changed, 10 insertions, 11 deletions
| diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 6370edb33..c9f4e8793 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -755,21 +755,20 @@ TextSegment BreakFinder::Next() {  		}  		subBreak = prev;  	} +  	// Splitting up a long run from prev to nextBreak in lots of approximately lengthEachSubdivision. -	// For very long runs add extra breaks after spaces or if no spaces before low punctuation.  	const int startSegment = subBreak; -	if ((nextBreak - subBreak) <= lengthEachSubdivision) { -		subBreak = -1; -		return TextSegment(startSegment, nextBreak - startSegment); +	const int remaining = nextBreak - startSegment; +	int lengthSegment = remaining; +	if (lengthSegment > lengthEachSubdivision) { +		lengthSegment = static_cast<int>(pdoc->SafeSegment(std::string_view(&ll->chars[startSegment], lengthEachSubdivision))); +	} +	if (lengthSegment < remaining) { +		subBreak += lengthSegment;  	} else { -		subBreak += pdoc->SafeSegment(&ll->chars[subBreak], lengthEachSubdivision); -		if (subBreak >= nextBreak) { -			subBreak = -1; -			return TextSegment(startSegment, nextBreak - startSegment); -		} else { -			return TextSegment(startSegment, subBreak - startSegment); -		} +		subBreak = -1;  	} +	return TextSegment(startSegment, lengthSegment);  }  bool BreakFinder::More() const noexcept { | 
