Code Coverage Statistics for Source File
c:\Tools\SD3\src\Libraries\ICSharpCode.TextEditor\Project\Src\Document\HighlightingStrategy\HighlightRuleSet.cs
|
Sequence Point Coverage
N/A
0 of 0
|
Branch Coverage
N/A
0 of 0
|
Lines
190
|
Highlight:
Uncovered Code
Covered Code
| L | V | Source |
|---|---|---|
1 |
// <file> |
|
2 |
// <copyright see="prj:///doc/copyright.txt"/> |
|
3 |
// <license see="prj:///doc/license.txt"/> |
|
4 |
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> |
|
5 |
// <version>$Revision: 2115 $</version> |
|
6 |
// </file> |
|
7 |
||
8 |
using System; |
|
9 |
using System.Collections; |
|
10 |
using System.Xml; |
|
11 |
||
12 |
using ICSharpCode.TextEditor.Util; |
|
13 |
||
14 |
namespace ICSharpCode.TextEditor.Document |
|
15 |
{ |
|
16 |
public class HighlightRuleSet |
|
17 |
{ |
|
18 |
LookupTable keyWords; |
|
19 |
ArrayList spans = new ArrayList(); |
|
20 |
LookupTable prevMarkers; |
|
21 |
LookupTable nextMarkers; |
|
22 |
IHighlightingStrategy highlighter = null; |
|
23 |
char escapeCharacter; |
|
24 |
||
25 |
bool ignoreCase = false; |
|
26 |
string name = null; |
|
27 |
||
28 |
bool[] delimiters = new bool[256]; |
|
29 |
||
30 |
string reference = null; |
|
31 |
||
32 |
public ArrayList Spans { |
|
33 |
get { |
|
34 |
return spans; |
|
35 |
} |
|
36 |
} |
|
37 |
||
38 |
internal IHighlightingStrategy Highlighter { |
|
39 |
get { |
|
40 |
return highlighter; |
|
41 |
} |
|
42 |
set { |
|
43 |
highlighter = value; |
|
44 |
} |
|
45 |
} |
|
46 |
||
47 |
public LookupTable KeyWords { |
|
48 |
get { |
|
49 |
return keyWords; |
|
50 |
} |
|
51 |
} |
|
52 |
||
53 |
public LookupTable PrevMarkers { |
|
54 |
get { |
|
55 |
return prevMarkers; |
|
56 |
} |
|
57 |
} |
|
58 |
||
59 |
public LookupTable NextMarkers { |
|
60 |
get { |
|
61 |
return nextMarkers; |
|
62 |
} |
|
63 |
} |
|
64 |
||
65 |
public bool[] Delimiters { |
|
66 |
get { |
|
67 |
return delimiters; |
|
68 |
} |
|
69 |
} |
|
70 |
||
71 |
public char EscapeCharacter { |
|
72 |
get { |
|
73 |
return escapeCharacter; |
|
74 |
} |
|
75 |
} |
|
76 |
||
77 |
public bool IgnoreCase { |
|
78 |
get { |
|
79 |
return ignoreCase; |
|
80 |
} |
|
81 |
} |
|
82 |
||
83 |
public string Name { |
|
84 |
get { |
|
85 |
return name; |
|
86 |
} |
|
87 |
set { |
|
88 |
name = value; |
|
89 |
} |
|
90 |
} |
|
91 |
||
92 |
public string Reference { |
|
93 |
get { |
|
94 |
return reference; |
|
95 |
} |
|
96 |
} |
|
97 |
||
98 |
public HighlightRuleSet() |
|
99 |
{ |
|
100 |
keyWords = new LookupTable(false); |
|
101 |
prevMarkers = new LookupTable(false); |
|
102 |
nextMarkers = new LookupTable(false); |
|
103 |
} |
|
104 |
||
105 |
public HighlightRuleSet(XmlElement el) |
|
106 |
{ |
|
107 |
XmlNodeList nodes; |
|
108 |
||
109 |
if (el.Attributes["name"] != null) { |
|
110 |
Name = el.Attributes["name"].InnerText; |
|
111 |
} |
|
112 |
||
113 |
if (el.HasAttribute("escapecharacter")) { |
|
114 |
escapeCharacter = el.GetAttribute("escapecharacter")[0]; |
|
115 |
} |
|
116 |
||
117 |
if (el.Attributes["reference"] != null) { |
|
118 |
reference = el.Attributes["reference"].InnerText; |
|
119 |
} |
|
120 |
||
121 |
if (el.Attributes["ignorecase"] != null) { |
|
122 |
ignoreCase = Boolean.Parse(el.Attributes["ignorecase"].InnerText); |
|
123 |
} |
|
124 |
||
125 |
for (int i = 0; i < Delimiters.Length; ++i) { |
|
126 |
delimiters[i] = false; |
|
127 |
} |
|
128 |
||
129 |
if (el["Delimiters"] != null) { |
|
130 |
string delimiterString = el["Delimiters"].InnerText; |
|
131 |
foreach (char ch in delimiterString) { |
|
132 |
delimiters[(int)ch] = true; |
|
133 |
} |
|
134 |
} |
|
135 |
||
136 |
// Spans = new LookupTable(!IgnoreCase); |
|
137 |
||
138 |
keyWords = new LookupTable(!IgnoreCase); |
|
139 |
prevMarkers = new LookupTable(!IgnoreCase); |
|
140 |
nextMarkers = new LookupTable(!IgnoreCase); |
|
141 |
||
142 |
nodes = el.GetElementsByTagName("KeyWords"); |
|
143 |
foreach (XmlElement el2 in nodes) { |
|
144 |
HighlightColor color = new HighlightColor(el2); |
|
145 |
||
146 |
XmlNodeList keys = el2.GetElementsByTagName("Key"); |
|
147 |
foreach (XmlElement node in keys) { |
|
148 |
keyWords[node.Attributes["word"].InnerText] = color; |
|
149 |
} |
|
150 |
} |
|
151 |
||
152 |
nodes = el.GetElementsByTagName("Span"); |
|
153 |
foreach (XmlElement el2 in nodes) { |
|
154 |
Spans.Add(new Span(el2)); |
|
155 |
/* |
|
156 |
Span span = new Span(el2); |
|
157 |
Spans[span.Begin] = span;*/ |
|
158 |
} |
|
159 |
||
160 |
nodes = el.GetElementsByTagName("MarkPrevious"); |
|
161 |
foreach (XmlElement el2 in nodes) { |
|
162 |
PrevMarker prev = new PrevMarker(el2); |
|
163 |
prevMarkers[prev.What] = prev; |
|
164 |
} |
|
165 |
||
166 |
nodes = el.GetElementsByTagName("MarkFollowing"); |
|
167 |
foreach (XmlElement el2 in nodes) { |
|
168 |
NextMarker next = new NextMarker(el2); |
|
169 |
nextMarkers[next.What] = next; |
|
170 |
} |
|
171 |
} |
|
172 |
||
173 |
/// <summary> |
|
174 |
/// Merges spans etc. from the other rule set into this rule set. |
|
175 |
/// </summary> |
|
176 |
public void MergeFrom(HighlightRuleSet ruleSet) |
|
177 |
{ |
|
178 |
for (int i = 0; i < delimiters.Length; i++) { |
|
179 |
delimiters[i] |= ruleSet.delimiters[i]; |
|
180 |
} |
|
181 |
// insert merged spans in front of old spans |
|
182 |
ArrayList oldSpans = spans; |
|
183 |
spans = (ArrayList)ruleSet.spans.Clone(); |
|
184 |
spans.AddRange(oldSpans); |
|
185 |
//keyWords.MergeFrom(ruleSet.keyWords); |
|
186 |
//prevMarkers.MergeFrom(ruleSet.prevMarkers); |
|
187 |
//nextMarkers.MergeFrom(ruleSet.nextMarkers); |
|
188 |
} |
|
189 |
} |
|
190 |
} |