diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Document.cxx | 14 | ||||
| -rw-r--r-- | src/Document.h | 3 | ||||
| -rw-r--r-- | src/Editor.cxx | 27 | 
3 files changed, 21 insertions, 23 deletions
| diff --git a/src/Document.cxx b/src/Document.cxx index afe6717a1..2c04bbaae 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -453,8 +453,8 @@ Range Document::LineRange(Sci::Line line) const noexcept {  	return {cb.LineStart(line), cb.LineStart(line + 1)};  } -bool Document::IsLineStartPosition(Sci::Position position) const { -	return LineStart(LineFromPosition(position)) == position; +bool Document::IsLineStartPosition(Sci::Position position) const noexcept { +	return LineStartPosition(position) == position;  }  Sci_Position SCI_METHOD Document::LineEnd(Sci_Position line) const { @@ -477,6 +477,10 @@ Sci::Line Document::SciLineFromPosition(Sci::Position pos) const noexcept {  	return cb.LineFromPosition(pos);  } +Sci::Position Document::LineStartPosition(Sci::Position position) const noexcept { +	return cb.LineStart(cb.LineFromPosition(position)); +} +  Sci::Position Document::LineEndPosition(Sci::Position position) const noexcept {  	return cb.LineEnd(cb.LineFromPosition(position));  } @@ -767,7 +771,7 @@ Sci::Position Document::MovePositionOutsideChar(Sci::Position pos, Sci::Position  		} else {  			// Anchor DBCS calculations at start of line because start of line can  			// not be a DBCS trail byte. -			const Sci::Position posStartLine = cb.LineStart(cb.LineFromPosition(pos)); +			const Sci::Position posStartLine = LineStartPosition(pos);  			if (pos == posStartLine)  				return pos; @@ -850,7 +854,7 @@ Sci::Position Document::NextPosition(Sci::Position pos, int moveDir) const noexc  			} else {  				// Anchor DBCS calculations at start of line because start of line can  				// not be a DBCS trail byte. -				const Sci::Position posStartLine = cb.LineStart(cb.LineFromPosition(pos)); +				const Sci::Position posStartLine = LineStartPosition(pos);  				// See http://msdn.microsoft.com/en-us/library/cc194792%28v=MSDN.10%29.aspx  				// http://msdn.microsoft.com/en-us/library/cc194790.aspx  				if ((pos - 1) <= posStartLine) { @@ -3079,7 +3083,7 @@ public:  #endif -std::regex_constants::match_flag_type MatchFlags(const Document *doc, Sci::Position startPos, Sci::Position endPos) { +std::regex_constants::match_flag_type MatchFlags(const Document *doc, Sci::Position startPos, Sci::Position endPos) noexcept {  	std::regex_constants::match_flag_type flagsMatch = std::regex_constants::match_default;  	if (!doc->IsLineStartPosition(startPos))  		flagsMatch |= std::regex_constants::match_not_bol; diff --git a/src/Document.h b/src/Document.h index 8889d6454..f7f4eeedd 100644 --- a/src/Document.h +++ b/src/Document.h @@ -455,8 +455,9 @@ public:  	int MarkerHandleFromLine(Sci::Line line, int which) const noexcept;  	Sci_Position SCI_METHOD LineStart(Sci_Position line) const override;  	[[nodiscard]] Range LineRange(Sci::Line line) const noexcept; -	bool IsLineStartPosition(Sci::Position position) const; +	bool IsLineStartPosition(Sci::Position position) const noexcept;  	Sci_Position SCI_METHOD LineEnd(Sci_Position line) const override; +	Sci::Position LineStartPosition(Sci::Position position) const noexcept;  	Sci::Position LineEndPosition(Sci::Position position) const noexcept;  	bool IsLineEndPosition(Sci::Position position) const noexcept;  	bool IsPositionInLineEnd(Sci::Position position) const noexcept; diff --git a/src/Editor.cxx b/src/Editor.cxx index dd2fc7e98..7d4417115 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -623,12 +623,10 @@ void Editor::InvalidateWholeSelection() {     at the beginning and end of the region lines. */  SelectionRange Editor::LineSelectionRange(SelectionPosition currentPos_, SelectionPosition anchor_) const {  	if (currentPos_ > anchor_) { -		anchor_ = SelectionPosition( -			pdoc->LineStart(pdoc->LineFromPosition(anchor_.Position()))); +		anchor_ = SelectionPosition(pdoc->LineStartPosition(anchor_.Position()));  		currentPos_ = SelectionPosition(pdoc->LineEndPosition(currentPos_.Position()));  	} else { -		currentPos_ = SelectionPosition( -			pdoc->LineStart(pdoc->LineFromPosition(currentPos_.Position()))); +		currentPos_ = SelectionPosition(pdoc->LineStartPosition(currentPos_.Position()));  		anchor_ = SelectionPosition(pdoc->LineEndPosition(anchor_.Position()));  	}  	return SelectionRange(currentPos_, anchor_); @@ -2192,8 +2190,7 @@ void Editor::InsertPasteShape(const char *text, Sci::Position len, PasteShape sh  		PasteRectangular(sel.Start(), text, len);  	} else {  		if (shape == PasteShape::line) { -			const Sci::Position insertPos = -				pdoc->LineStart(pdoc->LineFromPosition(sel.MainCaret())); +			const Sci::Position insertPos = pdoc->LineStartPosition(sel.MainCaret());  			Sci::Position lengthInserted = pdoc->InsertString(insertPos, text, len);  			// add the newline if necessary  			if ((len > 0) && (text[len - 1] != '\n' && text[len - 1] != '\r')) { @@ -3515,8 +3512,7 @@ int Editor::HorizontalMove(Message iMessage) {  			break;  		case Message::HomeRectExtend:  		case Message::HomeExtend: // only when sel.IsRectangular() && sel.MoveExtends() -			spCaret = SelectionPosition( -				pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position()))); +			spCaret = SelectionPosition(pdoc->LineStartPosition(spCaret.Position()));  			break;  		case Message::VCHomeRectExtend:  		case Message::VCHomeExtend: // only when sel.IsRectangular() && sel.MoveExtends() @@ -3539,8 +3535,7 @@ int Editor::HorizontalMove(Message iMessage) {  		SelectionPosition selAtLimit = (NaturalDirection(iMessage) > 0) ? sel.Limits().end : sel.Limits().start;  		switch (iMessage) {  		case Message::Home: -			selAtLimit = SelectionPosition( -				pdoc->LineStart(pdoc->LineFromPosition(selAtLimit.Position()))); +			selAtLimit = SelectionPosition(pdoc->LineStartPosition(selAtLimit.Position()));  			break;  		case Message::VCHome:  			selAtLimit = SelectionPosition(pdoc->VCHomePosition(selAtLimit.Position())); @@ -3604,8 +3599,7 @@ int Editor::HorizontalMove(Message iMessage) {  				break;  			case Message::Home:  			case Message::HomeExtend: -				spCaret = SelectionPosition( -					pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position()))); +				spCaret = SelectionPosition(pdoc->LineStartPosition(spCaret.Position()));  				break;  			case Message::HomeDisplay:  			case Message::HomeDisplayExtend: @@ -3615,8 +3609,7 @@ int Editor::HorizontalMove(Message iMessage) {  			case Message::HomeWrapExtend:  				spCaret = MovePositionSoVisible(StartEndDisplayLine(spCaret.Position(), true), -1);  				if (spCaretNow <= spCaret) -					spCaret = SelectionPosition( -						pdoc->LineStart(pdoc->LineFromPosition(spCaret.Position()))); +					spCaret = SelectionPosition(pdoc->LineStartPosition(spCaret.Position()));  				break;  			case Message::VCHome:  			case Message::VCHomeExtend: @@ -3766,7 +3759,7 @@ int Editor::DelWordOrLine(Message iMessage) {  			break;  		case Message::DelLineLeft:  			rangeDelete = Range( -				pdoc->LineStart(pdoc->LineFromPosition(sel.Range(r).caret.Position())), +				pdoc->LineStartPosition(sel.Range(r).caret.Position()),  				sel.Range(r).caret.Position());  			break;  		case Message::DelLineRight: @@ -4608,7 +4601,7 @@ void Editor::WordSelection(Sci::Position pos) {  		// Extend forward to the word containing the character to the left of pos.  		// Skip ExtendWordSelect if the line is empty or if pos is the first position on the line.  		// This ensures that a series of empty lines isn't counted as a single "word". -		if (pos > pdoc->LineStart(pdoc->LineFromPosition(pos))) +		if (pos > pdoc->LineStartPosition(pos))  			pos = pdoc->ExtendWordSelect(pdoc->MovePositionOutsideChar(pos - 1, -1), 1);  		TrimAndSetSelection(pos, wordSelectAnchorStartPos);  	} else { @@ -4722,7 +4715,7 @@ void Editor::ButtonDownWithModifiers(Point pt, unsigned int curTime, KeyMod modi  			} else {  				// Selecting backwards, or anchor beyond last character on line. In these cases,  				// we select the word containing the character to the *left* of the anchor. -				if (charPos > pdoc->LineStart(pdoc->LineFromPosition(charPos))) { +				if (charPos > pdoc->LineStartPosition(charPos)) {  					startWord = pdoc->ExtendWordSelect(charPos, -1);  					endWord = pdoc->ExtendWordSelect(startWord, 1);  				} else { | 
