aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Document.cxx')
-rw-r--r--src/Document.cxx28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index 2312e3f5a..1c3015c92 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -339,8 +339,32 @@ void Document::TentativeUndo() {
}
}
-int Document::GetMark(Sci::Line line) const noexcept {
- return Markers()->MarkValue(line);
+int Document::GetMark(Sci::Line line, bool includeChangeHistory) const {
+ int marksHistory = 0;
+ if (includeChangeHistory) {
+ int marksEdition = 0;
+
+ const Sci::Position start = LineStart(line);
+ const Sci::Position lineNext = LineStart(line + 1);
+ for (Sci::Position position = start; position < lineNext;) {
+ const int edition = EditionAt(position);
+ if (edition) {
+ marksEdition |= 1 << (edition-1);
+ }
+ position = EditionEndRun(position);
+ }
+ const Sci::Position lineEnd = LineEnd(line);
+ for (Sci::Position position = start; position <= lineEnd;) {
+ marksEdition |= EditionDeletesAt(position);
+ position = EditionNextDelete(position);
+ }
+
+ /* Bits: RevertedToOrigin, Saved, Modified, RevertedToModified */
+ constexpr unsigned int editionShift = static_cast<unsigned int>(MarkerOutline::HistoryRevertedToOrigin);
+ marksHistory = marksEdition << editionShift;
+ }
+
+ return marksHistory | Markers()->MarkValue(line);
}
Sci::Line Document::MarkerNext(Sci::Line lineStart, int mask) const noexcept {