Skip to content

Commit ddba666

Browse files
Merge pull request #390 from ltrzesniewski/overwrite-highlighting
Overwrite registered highlightings
2 parents d12a782 + 1c833b8 commit ddba666

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ bld/
4545
# Visual Studio 2017 auto generated files
4646
Generated\ Files/
4747

48+
# JetBrains Rider
49+
.idea/
50+
4851
# MSTest test Results
4952
[Tt]est[Rr]esult*/
5053
[Bb]uild[Ll]og.*
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
3+
using ICSharpCode.AvalonEdit.Highlighting;
4+
using ICSharpCode.AvalonEdit.Highlighting.Xshd;
5+
6+
using NUnit.Framework;
7+
8+
namespace ICSharpCode.AvalonEdit.Tests.Highlighting
9+
{
10+
[TestFixture]
11+
public class HighlightingManagerTests
12+
{
13+
[Test]
14+
public void OverwriteHighlightingDefinitionWithSameName()
15+
{
16+
var highlightingManager = new HighlightingManager();
17+
18+
var definitionA = CreateDefinition("TestDefinition");
19+
var definitionB = CreateDefinition("TestDefinition");
20+
var definitionC = CreateDefinition("DifferentName");
21+
22+
Assert.That(highlightingManager.HighlightingDefinitions, Is.Empty);
23+
24+
highlightingManager.RegisterHighlighting(definitionA.Name, Array.Empty<string>(), definitionA);
25+
Assert.That(highlightingManager.HighlightingDefinitions, Is.EqualTo(new[] { definitionA }));
26+
27+
highlightingManager.RegisterHighlighting(definitionB.Name, Array.Empty<string>(), definitionB);
28+
Assert.That(highlightingManager.HighlightingDefinitions, Is.EqualTo(new[] { definitionB }));
29+
30+
highlightingManager.RegisterHighlighting(definitionC.Name, Array.Empty<string>(), definitionC);
31+
Assert.That(highlightingManager.HighlightingDefinitions, Is.EqualTo(new[] { definitionB, definitionC }));
32+
33+
XmlHighlightingDefinition CreateDefinition(string name)
34+
{
35+
return new XmlHighlightingDefinition(new XshdSyntaxDefinition { Name = name, Elements = { new XshdRuleSet() } }, highlightingManager);
36+
}
37+
}
38+
}
39+
}

ICSharpCode.AvalonEdit/Highlighting/HighlightingManager.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,17 @@ public void RegisterHighlighting(string name, string[] extensions, IHighlighting
185185
throw new ArgumentNullException("highlighting");
186186

187187
lock (lockObj) {
188-
allHighlightings.Add(highlighting);
189188
if (name != null) {
189+
if (highlightingsByName.TryGetValue(name, out var existingDefinition))
190+
allHighlightings.Remove(existingDefinition);
190191
highlightingsByName[name] = highlighting;
191192
}
192193
if (extensions != null) {
193194
foreach (string ext in extensions) {
194195
highlightingsByExtension[ext] = highlighting;
195196
}
196197
}
198+
allHighlightings.Add(highlighting);
197199
}
198200
}
199201

0 commit comments

Comments
 (0)