Code Coverage Statistics for Source File

c:\Tools\SD3\src\Libraries\ICSharpCode.TextEditor\Project\Src\Document\HighlightingStrategy\SyntaxModes\FileSyntaxModeProvider.cs

Sequence Point Coverage
N/A
0 of 0
Branch Coverage
N/A
0 of 0
Lines
84
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: 2533 $</version>
6
// </file>
7
8
using System;
9
using System.Collections.Generic;
10
using System.IO;
11
using System.Windows.Forms;
12
using System.Xml;
13
14
namespace ICSharpCode.TextEditor.Document
15
{
16
	public class FileSyntaxModeProvider : ISyntaxModeFileProvider
17
	{
18
		string    directory;
19
		List<SyntaxMode> syntaxModes = null;
20
		
21
		public ICollection<SyntaxMode> SyntaxModes {
22
			get {
23
				return syntaxModes;
24
			}
25
		}
26
		
27
		public FileSyntaxModeProvider(string directory)
28
		{
29
			this.directory = directory;
30
			UpdateSyntaxModeList();
31
		}
32
		
33
		public void UpdateSyntaxModeList()
34
		{
35
			string syntaxModeFile = Path.Combine(directory, "SyntaxModes.xml");
36
			if (File.Exists(syntaxModeFile)) {
37
				Stream s = File.OpenRead(syntaxModeFile);
38
				syntaxModes = SyntaxMode.GetSyntaxModes(s);
39
				s.Close();
40
			} else {
41
				syntaxModes = ScanDirectory(directory);
42
			}
43
		}
44
		
45
		public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode)
46
		{
47
			string syntaxModeFile = Path.Combine(directory, syntaxMode.FileName);
48
			if (!File.Exists(syntaxModeFile)) {
49
				throw new HighlightingDefinitionInvalidException("Can't load highlighting definition " + syntaxModeFile + " (file not found)!");
50
			}
51
			return new XmlTextReader(File.OpenRead(syntaxModeFile));
52
		}
53
		
54
		List<SyntaxMode> ScanDirectory(string directory)
55
		{
56
			string[] files = Directory.GetFiles(directory);
57
			List<SyntaxMode> modes = new List<SyntaxMode>();
58
			foreach (string file in files) {
59
				if (Path.GetExtension(file).Equals(".XSHD", StringComparison.OrdinalIgnoreCase)) {
60
					XmlTextReader reader = new XmlTextReader(file);
61
					while (reader.Read()) {
62
						if (reader.NodeType == XmlNodeType.Element) {
63
							switch (reader.Name) {
64
								case "SyntaxDefinition":
65
									string name       = reader.GetAttribute("name");
66
									string extensions = reader.GetAttribute("extensions");
67
									modes.Add(new SyntaxMode(Path.GetFileName(file),
68
									                         name,
69
									                         extensions));
70
									goto bailout;
71
								default:
72
									throw new HighlightingDefinitionInvalidException("Unknown root node in syntax highlighting file :" + reader.Name);
73
							}
74
						}
75
					}
76
				bailout:
77
					reader.Close();
78
					
79
				}
80
			}
81
			return modes;
82
		}
83
	}
84
}