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