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 { |