// Scintilla source code edit control /** @file PerLine.h ** Manages data associated with each line of the document **/ // Copyright 1998-2009 by Neil Hodgson // The License.txt file describes the conditions under which this software may be distributed. #ifndef PERLINE_H #define PERLINE_H #ifdef SCI_NAMESPACE namespace Scintilla { #endif /** * This holds the marker identifier and the marker type to display. * MarkerHandleNumbers are members of lists. */ struct MarkerHandleNumber { int handle; int number; MarkerHandleNumber *next; }; /** * A marker handle set contains any number of MarkerHandleNumbers. */ class MarkerHandleSet { MarkerHandleNumber *root; public: MarkerHandleSet(); // Deleted so MarkerHandleSet objects can not be copied. MarkerHandleSet(const MarkerHandleSet &) = delete; void operator=(const MarkerHandleSet &) = delete; ~MarkerHandleSet(); int Length() const; int MarkValue() const; ///< Bit set of marker numbers. bool Contains(int handle) const; bool InsertHandle(int handle, int markerNum); void RemoveHandle(int handle); bool RemoveNumber(int markerNum, bool all); void CombineWith(MarkerHandleSet *other); }; class LineMarkers : public PerLine { SplitVector markers; /// Handles are allocated sequentially and should never have to be reused as 32 bit ints are very big. int handleCurrent; public: LineMarkers() : handleCurrent(0) { } // Deleted so Worker objects can not be copied. LineMarkers(const LineMarkers &) = delete; void operator=(const LineMarkers &) = delete; virtual ~LineMarkers(); void Init() override; void InsertLine(Sci::Line line) override; void RemoveLine(Sci::Line line) override; int MarkValue(Sci::Line line); Sci::Line MarkerNext(Sci::Line lineStart, int mask) const; int AddMark(Sci::Line line, int markerNum, Sci::Line lines); void MergeMarkers(Sci::Line line); bool DeleteMark(Sci::Line line, int markerNum, bool all); void DeleteMarkFromHandle(int markerHandle); Sci::Line LineFromHandle(int markerHandle); }; class LineLevels : public PerLine { SplitVector levels; public: LineLevels() { } // Deleted so Worker objects can not be copied. LineLevels(const LineLevels &) = delete; void operator=(const LineLevels &) = delete; virtual ~LineLevels(); void Init() override; void InsertLine(Sci::Line line) override; void RemoveLine(Sci::Line line) override; void ExpandLevels(Sci::Line sizeNew=-1); void ClearLevels(); int SetLevel(Sci::Line line, int level, Sci::Line lines); int GetLevel(Sci::Line line) const; }; class LineState : public PerLine { SplitVector lineStates; public: LineState() { } // Deleted so Worker objects can not be copied. LineState(const LineState &) = delete; void operator=(const LineState &) = delete; virtual ~LineState(); void Init() override; void InsertLine(Sci::Line line) override; void RemoveLine(Sci::Line line) override; int SetLineState(Sci::Line line, int state); int GetLineState(Sci::Line line); Sci::Line GetMaxLineState() const; }; class LineAnnotation : public PerLine { SplitVector annotations; public: LineAnnotation() { } // Deleted so Worker objects can not be copied. LineAnnotation(const LineAnnotation &) = delete; void operator=(const LineAnnotation &) = delete; virtual ~LineAnnotation(); void Init() override; void InsertLine(Sci::Line line) override; void RemoveLine(Sci::Line line) override; bool MultipleStyles(Sci::Line line) const; int Style(Sci::Line line) const; const char *Text(Sci::Line line) const; const unsigned char *Styles(Sci::Line line) const; void SetText(Sci::Line line, const char *text); void ClearAll(); void SetStyle(Sci::Line line, int style); void SetStyles(Sci::Line line, const unsigned char *styles); int Length(Sci::Line line) const; int Lines(Sci::Line line) const; }; typedef std::vector TabstopList; class LineTabstops : public PerLine { SplitVector tabstops; public: LineTabstops() { } // Deleted so Worker objects can not be copied. LineTabstops(const LineTabstops &) = delete; void operator=(const LineTabstops &) = delete; virtual ~LineTabstops(); void Init() override; void InsertLine(Sci::Line line) override; void RemoveLine(Sci::Line line) override; bool ClearTabstops(Sci::Line line); bool AddTabstop(Sci::Line line, int x); int GetNextTabstop(Sci::Line line, int x) const; }; #ifdef SCI_NAMESPACE } #endif #endif