1 // Scintilla source code edit control 2 /** @file PerLine.h 3 ** Manages data associated with each line of the document 4 **/ 5 // Copyright 1998-2009 by Neil Hodgson <neilh@scintilla.org> 6 // The License.txt file describes the conditions under which this software may be distributed. 7 8 #ifndef PERLINE_H 9 #define PERLINE_H 10 11 #ifdef SCI_NAMESPACE 12 namespace Scintilla { 13 #endif 14 15 /** 16 * This holds the marker identifier and the marker type to display. 17 * MarkerHandleNumbers are members of lists. 18 */ 19 struct MarkerHandleNumber { 20 int handle; 21 int number; 22 MarkerHandleNumber *next; 23 }; 24 25 /** 26 * A marker handle set contains any number of MarkerHandleNumbers. 27 */ 28 class MarkerHandleSet { 29 MarkerHandleNumber *root; 30 31 public: 32 MarkerHandleSet(); 33 ~MarkerHandleSet(); 34 int Length() const; 35 int NumberFromHandle(int handle) const; 36 int MarkValue() const; ///< Bit set of marker numbers. 37 bool Contains(int handle) const; 38 bool InsertHandle(int handle, int markerNum); 39 void RemoveHandle(int handle); 40 bool RemoveNumber(int markerNum); 41 void CombineWith(MarkerHandleSet *other); 42 }; 43 44 class LineMarkers : public PerLine { 45 SplitVector<MarkerHandleSet *> markers; 46 /// Handles are allocated sequentially and should never have to be reused as 32 bit ints are very big. 47 int handleCurrent; 48 public: LineMarkers()49 LineMarkers() : handleCurrent(0) { 50 } 51 virtual ~LineMarkers(); 52 virtual void Init(); 53 virtual void InsertLine(int line); 54 virtual void RemoveLine(int line); 55 56 int MarkValue(int line); 57 int AddMark(int line, int marker, int lines); 58 void MergeMarkers(int pos); 59 bool DeleteMark(int line, int markerNum, bool all); 60 void DeleteMarkFromHandle(int markerHandle); 61 int LineFromHandle(int markerHandle); 62 }; 63 64 class LineLevels : public PerLine { 65 SplitVector<int> levels; 66 public: 67 virtual ~LineLevels(); 68 virtual void Init(); 69 virtual void InsertLine(int line); 70 virtual void RemoveLine(int line); 71 72 void ExpandLevels(int sizeNew=-1); 73 void ClearLevels(); 74 int SetLevel(int line, int level, int lines); 75 int GetLevel(int line); 76 }; 77 78 class LineState : public PerLine { 79 SplitVector<int> lineStates; 80 public: LineState()81 LineState() { 82 } 83 virtual ~LineState(); 84 virtual void Init(); 85 virtual void InsertLine(int line); 86 virtual void RemoveLine(int line); 87 88 int SetLineState(int line, int state); 89 int GetLineState(int line); 90 int GetMaxLineState(); 91 }; 92 93 class LineAnnotation : public PerLine { 94 SplitVector<char *> annotations; 95 public: LineAnnotation()96 LineAnnotation() { 97 } 98 virtual ~LineAnnotation(); 99 virtual void Init(); 100 virtual void InsertLine(int line); 101 virtual void RemoveLine(int line); 102 103 bool AnySet() const; 104 bool MultipleStyles(int line) const; 105 int Style(int line); 106 const char *Text(int line) const; 107 const unsigned char *Styles(int line) const; 108 void SetText(int line, const char *text); 109 void ClearAll(); 110 void SetStyle(int line, int style); 111 void SetStyles(int line, const unsigned char *styles); 112 int Length(int line) const; 113 int Lines(int line) const; 114 }; 115 116 #ifdef SCI_NAMESPACE 117 } 118 #endif 119 120 #endif 121