158 lines
3.2 KiB
C#
158 lines
3.2 KiB
C#
// <file>
|
|
// <copyright see="prj:///doc/copyright.txt"/>
|
|
// <license see="prj:///doc/license.txt"/>
|
|
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
|
// <version>$Revision$</version>
|
|
// </file>
|
|
|
|
using System;
|
|
using System.Xml;
|
|
|
|
namespace ICSharpCode.TextEditor.Document
|
|
{
|
|
public sealed class Span
|
|
{
|
|
bool stopEOL;
|
|
HighlightColor color;
|
|
HighlightColor beginColor;
|
|
HighlightColor endColor;
|
|
char[] begin;
|
|
char[] end;
|
|
string name;
|
|
string rule;
|
|
HighlightRuleSet ruleSet;
|
|
char escapeCharacter;
|
|
bool ignoreCase;
|
|
bool isBeginSingleWord;
|
|
bool? isBeginStartOfLine;
|
|
bool isEndSingleWord;
|
|
|
|
internal HighlightRuleSet RuleSet {
|
|
get {
|
|
return ruleSet;
|
|
}
|
|
set {
|
|
ruleSet = value;
|
|
}
|
|
}
|
|
|
|
public bool IgnoreCase {
|
|
get {
|
|
return ignoreCase;
|
|
}
|
|
set {
|
|
ignoreCase = value;
|
|
}
|
|
}
|
|
|
|
public bool StopEOL {
|
|
get {
|
|
return stopEOL;
|
|
}
|
|
}
|
|
|
|
public bool? IsBeginStartOfLine {
|
|
get {
|
|
return isBeginStartOfLine;
|
|
}
|
|
}
|
|
|
|
public bool IsBeginSingleWord {
|
|
get {
|
|
return isBeginSingleWord;
|
|
}
|
|
}
|
|
|
|
public bool IsEndSingleWord {
|
|
get {
|
|
return isEndSingleWord;
|
|
}
|
|
}
|
|
|
|
public HighlightColor Color {
|
|
get {
|
|
return color;
|
|
}
|
|
}
|
|
|
|
public HighlightColor BeginColor {
|
|
get {
|
|
if(beginColor != null) {
|
|
return beginColor;
|
|
} else {
|
|
return color;
|
|
}
|
|
}
|
|
}
|
|
|
|
public HighlightColor EndColor {
|
|
get {
|
|
return endColor!=null ? endColor : color;
|
|
}
|
|
}
|
|
|
|
public char[] Begin {
|
|
get { return begin; }
|
|
}
|
|
|
|
public char[] End {
|
|
get { return end; }
|
|
}
|
|
|
|
public string Name {
|
|
get { return name; }
|
|
}
|
|
|
|
public string Rule {
|
|
get { return rule; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the escape character of the span. The escape character is a character that can be used in front
|
|
/// of the span end to make it not end the span. The escape character followed by another escape character
|
|
/// means the escape character was escaped like in @"a "" b" literals in C#.
|
|
/// The default value '\0' means no escape character is allowed.
|
|
/// </summary>
|
|
public char EscapeCharacter {
|
|
get { return escapeCharacter; }
|
|
}
|
|
|
|
public Span(XmlElement span)
|
|
{
|
|
color = new HighlightColor(span);
|
|
|
|
if (span.HasAttribute("rule")) {
|
|
rule = span.GetAttribute("rule");
|
|
}
|
|
|
|
if (span.HasAttribute("escapecharacter")) {
|
|
escapeCharacter = span.GetAttribute("escapecharacter")[0];
|
|
}
|
|
|
|
name = span.GetAttribute("name");
|
|
if (span.HasAttribute("stopateol")) {
|
|
stopEOL = bool.Parse(span.GetAttribute("stopateol"));
|
|
}
|
|
|
|
begin = span["Begin"].InnerText.ToCharArray();
|
|
beginColor = new HighlightColor(span["Begin"], color);
|
|
|
|
if (span["Begin"].HasAttribute("singleword")) {
|
|
this.isBeginSingleWord = bool.Parse(span["Begin"].GetAttribute("singleword"));
|
|
}
|
|
if (span["Begin"].HasAttribute("startofline")) {
|
|
this.isBeginStartOfLine = bool.Parse(span["Begin"].GetAttribute("startofline"));
|
|
}
|
|
|
|
if (span["End"] != null) {
|
|
end = span["End"].InnerText.ToCharArray();
|
|
endColor = new HighlightColor(span["End"], color);
|
|
if (span["End"].HasAttribute("singleword")) {
|
|
this.isEndSingleWord = bool.Parse(span["End"].GetAttribute("singleword"));
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|