mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.2 KiB
99 lines
3.2 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.Xml; |
|
using System.Xml.Schema; |
|
|
|
namespace ICSharpCode.AvalonEdit.Highlighting.Xshd |
|
{ |
|
/// <summary> |
|
/// Static class with helper methods to load XSHD highlighting files. |
|
/// </summary> |
|
public static class HighlightingLoader |
|
{ |
|
#region XSHD loading |
|
/// <summary> |
|
/// Lodas a syntax definition from the xml reader. |
|
/// </summary> |
|
public static XshdSyntaxDefinition LoadXshd(XmlReader reader) |
|
{ |
|
return LoadXshd(reader, false); |
|
} |
|
|
|
internal static XshdSyntaxDefinition LoadXshd(XmlReader reader, bool skipValidation) |
|
{ |
|
if (reader == null) |
|
throw new ArgumentNullException("reader"); |
|
try { |
|
reader.MoveToContent(); |
|
if (reader.NamespaceURI == V2Loader.Namespace) { |
|
return V2Loader.LoadDefinition(reader, skipValidation); |
|
} else { |
|
return V1Loader.LoadDefinition(reader, skipValidation); |
|
} |
|
} catch (XmlSchemaException ex) { |
|
throw WrapException(ex, ex.LineNumber, ex.LinePosition); |
|
} catch (XmlException ex) { |
|
throw WrapException(ex, ex.LineNumber, ex.LinePosition); |
|
} |
|
} |
|
|
|
static Exception WrapException(Exception ex, int lineNumber, int linePosition) |
|
{ |
|
return new HighlightingDefinitionInvalidException(FormatExceptionMessage(ex.Message, lineNumber, linePosition), ex); |
|
} |
|
|
|
internal static string FormatExceptionMessage(string message, int lineNumber, int linePosition) |
|
{ |
|
if (lineNumber <= 0) |
|
return message; |
|
else |
|
return "Error at position (line " + lineNumber + ", column " + linePosition + "):\n" + message; |
|
} |
|
|
|
internal static XmlReader GetValidatingReader(XmlReader input, bool ignoreWhitespace, XmlSchemaSet schemaSet) |
|
{ |
|
XmlReaderSettings settings = new XmlReaderSettings(); |
|
settings.CloseInput = true; |
|
settings.IgnoreComments = true; |
|
settings.IgnoreWhitespace = ignoreWhitespace; |
|
if (schemaSet != null) { |
|
settings.Schemas = schemaSet; |
|
settings.ValidationType = ValidationType.Schema; |
|
} |
|
return XmlReader.Create(input, settings); |
|
} |
|
|
|
internal static XmlSchemaSet LoadSchemaSet(XmlReader schemaInput) |
|
{ |
|
XmlSchemaSet schemaSet = new XmlSchemaSet(); |
|
schemaSet.Add(null, schemaInput); |
|
schemaSet.ValidationEventHandler += delegate(object sender, ValidationEventArgs args) { |
|
throw new HighlightingDefinitionInvalidException(args.Message); |
|
}; |
|
return schemaSet; |
|
} |
|
#endregion |
|
|
|
#region Load Highlighting from XSHD |
|
/// <summary> |
|
/// Creates a highlighting definition from the XSHD file. |
|
/// </summary> |
|
public static IHighlightingDefinition Load(XshdSyntaxDefinition syntaxDefinition, IHighlightingDefinitionReferenceResolver resolver) |
|
{ |
|
if (syntaxDefinition == null) |
|
throw new ArgumentNullException("syntaxDefinition"); |
|
return new XmlHighlightingDefinition(syntaxDefinition, resolver); |
|
} |
|
|
|
/// <summary> |
|
/// Creates a highlighting definition from the XSHD file. |
|
/// </summary> |
|
public static IHighlightingDefinition Load(XmlReader reader, IHighlightingDefinitionReferenceResolver resolver) |
|
{ |
|
return Load(LoadXshd(reader), resolver); |
|
} |
|
#endregion |
|
} |
|
}
|
|
|