aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorIain Clarke <unknown>2020-04-08 09:27:43 +1000
committerIain Clarke <unknown>2020-04-08 09:27:43 +1000
commitb8369870e15d4b061ec5d67d0cfbfe04d3a6459f (patch)
tree41276956ec5d67485a560a1218bfa0a9325e11e7 /src
parent4a1cfeae9b35bbb3639c3f48d3bf5ec17a6aa77f (diff)
downloadscintilla-mirror-b8369870e15d4b061ec5d67d0cfbfe04d3a6459f.tar.gz
Feature [feature-requests:1344]. Add methods for iterating through the marker
handles and marker numbers on a line.
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx8
-rw-r--r--src/Document.h2
-rw-r--r--src/Editor.cxx6
-rw-r--r--src/PerLine.cxx25
-rw-r--r--src/PerLine.h3
5 files changed, 44 insertions, 0 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index 6b93a30af..263e83d7a 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -369,6 +369,14 @@ Sci::Line Document::LineFromHandle(int markerHandle) const {
return Markers()->LineFromHandle(markerHandle);
}
+int Document::MarkerNumberFromLine(Sci::Line line, int which) const {
+ return Markers()->NumberFromLine(line, which);
+}
+
+int Document::MarkerHandleFromLine(Sci::Line line, int which) const {
+ return Markers()->HandleFromLine(line, which);
+}
+
Sci_Position SCI_METHOD Document::LineStart(Sci_Position line) const {
return cb.LineStart(line);
}
diff --git a/src/Document.h b/src/Document.h
index c96fe9ee7..1f03dda1d 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -403,6 +403,8 @@ public:
void DeleteMarkFromHandle(int markerHandle);
void DeleteAllMarks(int markerNum);
Sci::Line LineFromHandle(int markerHandle) const;
+ int MarkerNumberFromLine(Sci::Line line, int which) const;
+ int MarkerHandleFromLine(Sci::Line line, int which) const;
Sci_Position SCI_METHOD LineStart(Sci_Position line) const override;
bool IsLineStartPosition(Sci::Position position) const;
Sci_Position SCI_METHOD LineEnd(Sci_Position line) const override;
diff --git a/src/Editor.cxx b/src/Editor.cxx
index efb360331..b7636adb2 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -6412,6 +6412,12 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
pdoc->DeleteMarkFromHandle(static_cast<int>(wParam));
break;
+ case SCI_MARKERHANDLEFROMLINE:
+ return pdoc->MarkerHandleFromLine(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));
+
+ case SCI_MARKERNUMBERFROMLINE:
+ return pdoc->MarkerNumberFromLine(static_cast<Sci::Line>(wParam), static_cast<int>(lParam));
+
case SCI_GETVIEWWS:
return vs.viewWhitespace;
diff --git a/src/PerLine.cxx b/src/PerLine.cxx
index 017eb77b8..31da695ad 100644
--- a/src/PerLine.cxx
+++ b/src/PerLine.cxx
@@ -55,6 +55,15 @@ bool MarkerHandleSet::Contains(int handle) const noexcept {
return false;
}
+MarkerHandleNumber const *MarkerHandleSet::GetMarkerHandleNumber(int which) const noexcept {
+ for (const MarkerHandleNumber &mhn : mhList) {
+ if (which == 0)
+ return &mhn;
+ which--;
+ }
+ return nullptr;
+}
+
bool MarkerHandleSet::InsertHandle(int handle, int markerNum) {
mhList.push_front(MarkerHandleNumber(handle, markerNum));
return true;
@@ -116,6 +125,22 @@ Sci::Line LineMarkers::LineFromHandle(int markerHandle) {
return -1;
}
+int LineMarkers::HandleFromLine(Sci::Line line, int which) const {
+ if (markers.Length() && (line >= 0) && (line < markers.Length()) && markers[line]) {
+ MarkerHandleNumber const *pnmh = markers[line]->GetMarkerHandleNumber(which);
+ return pnmh ? pnmh->handle : -1;
+ }
+ return -1;
+}
+
+int LineMarkers::NumberFromLine(Sci::Line line, int which) const {
+ if (markers.Length() && (line >= 0) && (line < markers.Length()) && markers[line]) {
+ MarkerHandleNumber const *pnmh = markers[line]->GetMarkerHandleNumber(which);
+ return pnmh ? pnmh->number : -1;
+ }
+ return -1;
+}
+
void LineMarkers::MergeMarkers(Sci::Line line) {
if (markers[line + 1]) {
if (!markers[line])
diff --git a/src/PerLine.h b/src/PerLine.h
index 94dc17a20..3da02b5e5 100644
--- a/src/PerLine.h
+++ b/src/PerLine.h
@@ -41,6 +41,7 @@ public:
void RemoveHandle(int handle);
bool RemoveNumber(int markerNum, bool all);
void CombineWith(MarkerHandleSet *other);
+ MarkerHandleNumber const *GetMarkerHandleNumber(int which) const noexcept;
};
class LineMarkers : public PerLine {
@@ -67,6 +68,8 @@ public:
bool DeleteMark(Sci::Line line, int markerNum, bool all);
void DeleteMarkFromHandle(int markerHandle);
Sci::Line LineFromHandle(int markerHandle);
+ int HandleFromLine(Sci::Line line, int which) const;
+ int NumberFromLine(Sci::Line line, int which) const;
};
class LineLevels : public PerLine {