aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2023-10-26 14:48:39 +1100
committerNeil <nyamatongwe@gmail.com>2023-10-26 14:48:39 +1100
commitd6d33d9460fb5fba165cbbd743b501324baa7516 (patch)
treee5ac09d5a24c3d91819899ee4d9b589ecd04a92c /src
parent624100e7bccb2f8cc740bf9306f6eb2768fdb51d (diff)
downloadscintilla-mirror-d6d33d9460fb5fba165cbbd743b501324baa7516.tar.gz
Add LineStartPosition to replace common idiom LineStart(LineFromPosition(x)) as
this shortens code. LineStartPosition is also noexcept which allows callers to be noexcept.
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx14
-rw-r--r--src/Document.h3
-rw-r--r--src/Editor.cxx27
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 {