/// <summary> /// Gets the syntax highlighting definition for a certain syntax. /// </summary> /// <param name="syntaxMode">The syntax.</param> /// <returns>The syntax highlighting definition.</returns> public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) { Assembly assembly = typeof(SyntaxMode).Assembly; // ReSharper disable AssignNullToNotNullAttribute return new XmlTextReader(assembly.GetManifestResourceStream("DigitalRune.Windows.TextEditor.Resources." + syntaxMode.FileName)); // ReSharper restore AssignNullToNotNullAttribute }
/// <summary> /// Gets the syntax highlighting definition for a certain syntax. /// </summary> /// <param name="syntaxMode">The syntax.</param> /// <returns>The syntax highlighting definition.</returns> public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) { string syntaxModeFile = Path.Combine(_directory, syntaxMode.FileName); if (!File.Exists(syntaxModeFile)) throw new HighlightingDefinitionInvalidException("Can't load highlighting definition " + syntaxModeFile + " (file not found)!"); return new XmlTextReader(File.OpenRead(syntaxModeFile)); }
/// <summary> /// Gets the syntax highlighting definition for a certain syntax. /// </summary> /// <param name="syntaxMode">The syntax.</param> /// <returns>The syntax highlighting definition.</returns> public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) { string syntaxModeFile = Path.Combine(_directory, syntaxMode.FileName); if (!File.Exists(syntaxModeFile)) { throw new HighlightingDefinitionInvalidException("Can't load highlighting definition " + syntaxModeFile + " (file not found)!"); } return(new XmlTextReader(File.OpenRead(syntaxModeFile))); }
/// <summary> /// Initializes a new instance of the <see cref="ResourceSyntaxModeProvider"/> class. /// </summary> public ResourceSyntaxModeProvider() { Assembly assembly = typeof(SyntaxMode).Assembly; Stream syntaxModeStream = assembly.GetManifestResourceStream("DigitalRune.Windows.TextEditor.Resources.SyntaxModes.xml"); if (syntaxModeStream != null) { syntaxModes = SyntaxMode.GetSyntaxModes(syntaxModeStream); } else { syntaxModes = new List <SyntaxMode>(); } }
/// <summary> /// Updates the list of syntax highlighting modes. /// </summary> public void UpdateSyntaxModeList() { string syntaxModeFile = Path.Combine(_directory, "SyntaxModes.xml"); if (File.Exists(syntaxModeFile)) { Stream s = File.OpenRead(syntaxModeFile); _syntaxModes = SyntaxMode.GetSyntaxModes(s); s.Close(); } else { _syntaxModes = ScanDirectory(_directory); } }
/// <summary> /// Parses a highlighting definition. /// </summary> /// <param name="highlighter">The highlighting strategy, which is set.</param> /// <param name="syntaxMode">The syntax highlighting mode.</param> /// <param name="xmlReader">The XML reader.</param> /// <returns></returns> private static DefaultHighlightingStrategy Parse(DefaultHighlightingStrategy highlighter, SyntaxMode syntaxMode, XmlReader xmlReader) { if (syntaxMode == null) throw new ArgumentNullException("syntaxMode"); if (xmlReader == null) throw new ArgumentNullException("xmlReader"); try { List<ValidationEventArgs> errors = null; XmlReaderSettings settings = new XmlReaderSettings(); Stream shemaStream = typeof(HighlightingDefinitionParser).Assembly.GetManifestResourceStream("DigitalRune.Windows.TextEditor.Resources.Mode.xsd"); settings.Schemas.Add("", new XmlTextReader(shemaStream)); settings.Schemas.ValidationEventHandler += delegate(object sender, ValidationEventArgs args) { if (errors == null) { errors = new List<ValidationEventArgs>(); } errors.Add(args); }; settings.ValidationType = ValidationType.Schema; XmlReader validatingReader = XmlReader.Create(xmlReader, settings); XmlDocument doc = new XmlDocument(); doc.Load(validatingReader); if (highlighter == null) highlighter = new DefaultHighlightingStrategy(doc.DocumentElement.Attributes["name"].InnerText); if (doc.DocumentElement.HasAttribute("extends")) { KeyValuePair<SyntaxMode, ISyntaxModeFileProvider> entry = HighlightingManager.Manager.FindHighlighterEntry(doc.DocumentElement.GetAttribute("extends")); if (entry.Key == null) { throw new HighlightingDefinitionInvalidException("Cannot find referenced highlighting source " + doc.DocumentElement.GetAttribute("extends")); } else { highlighter = Parse(highlighter, entry.Key, entry.Value.GetSyntaxModeFile(entry.Key)); if (highlighter == null) return null; } } if (doc.DocumentElement.HasAttribute("extensions")) { highlighter.Extensions = doc.DocumentElement.GetAttribute("extensions").Split(new char[] { ';', '|' }); } XmlElement environment = doc.DocumentElement["Environment"]; if (environment != null) { foreach (XmlNode node in environment.ChildNodes) { if (node is XmlElement) { XmlElement el = (XmlElement) node; if (el.Name == "Custom") highlighter.SetColorFor(el.GetAttribute("name"), el.HasAttribute("bgcolor") ? new HighlightBackground(el) : new HighlightColor(el)); else highlighter.SetColorFor(el.Name, el.HasAttribute("bgcolor") ? new HighlightBackground(el) : new HighlightColor(el)); } } } // parse properties if (doc.DocumentElement["Properties"] != null) foreach (XmlElement propertyElement in doc.DocumentElement["Properties"].ChildNodes) highlighter.Properties[propertyElement.Attributes["name"].InnerText] = propertyElement.Attributes["value"].InnerText; if (doc.DocumentElement["Digits"] != null) highlighter.DigitColor = new HighlightColor(doc.DocumentElement["Digits"]); XmlNodeList nodes = doc.DocumentElement.GetElementsByTagName("RuleSet"); foreach (XmlElement element in nodes) highlighter.AddRuleSet(new HighlightRuleSet(element)); xmlReader.Close(); if (errors != null) { StringBuilder msg = new StringBuilder(); foreach (ValidationEventArgs args in errors) { msg.AppendLine(args.Message); } throw new HighlightingDefinitionInvalidException(msg.ToString()); } else { return highlighter; } } catch (Exception e) { throw new HighlightingDefinitionInvalidException("Could not load mode definition file '" + syntaxMode.FileName + "'.\n", e); } }
/// <summary> /// Parses a highlighting definition. /// </summary> /// <param name="syntaxMode">The syntax highlighting mode.</param> /// <param name="xmlReader">The XML reader.</param> /// <returns>The highlighting strategy.</returns> public static DefaultHighlightingStrategy Parse(SyntaxMode syntaxMode, XmlReader xmlReader) { return Parse(null, syntaxMode, xmlReader); }
/// <summary> /// Parses a highlighting definition. /// </summary> /// <param name="highlighter">The highlighting strategy, which is set.</param> /// <param name="syntaxMode">The syntax highlighting mode.</param> /// <param name="xmlReader">The XML reader.</param> /// <returns></returns> private static DefaultHighlightingStrategy Parse(DefaultHighlightingStrategy highlighter, SyntaxMode syntaxMode, XmlReader xmlReader) { if (syntaxMode == null) { throw new ArgumentNullException("syntaxMode"); } if (xmlReader == null) { throw new ArgumentNullException("xmlReader"); } try { List <ValidationEventArgs> errors = null; XmlReaderSettings settings = new XmlReaderSettings(); Stream shemaStream = typeof(HighlightingDefinitionParser).Assembly.GetManifestResourceStream("DigitalRune.Windows.TextEditor.Resources.Mode.xsd"); settings.Schemas.Add("", new XmlTextReader(shemaStream)); settings.Schemas.ValidationEventHandler += delegate(object sender, ValidationEventArgs args) { if (errors == null) { errors = new List <ValidationEventArgs>(); } errors.Add(args); }; settings.ValidationType = ValidationType.Schema; XmlReader validatingReader = XmlReader.Create(xmlReader, settings); XmlDocument doc = new XmlDocument(); doc.Load(validatingReader); if (highlighter == null) { highlighter = new DefaultHighlightingStrategy(doc.DocumentElement.Attributes["name"].InnerText); } if (doc.DocumentElement.HasAttribute("extends")) { KeyValuePair <SyntaxMode, ISyntaxModeFileProvider> entry = HighlightingManager.Manager.FindHighlighterEntry(doc.DocumentElement.GetAttribute("extends")); if (entry.Key == null) { throw new HighlightingDefinitionInvalidException("Cannot find referenced highlighting source " + doc.DocumentElement.GetAttribute("extends")); } else { highlighter = Parse(highlighter, entry.Key, entry.Value.GetSyntaxModeFile(entry.Key)); if (highlighter == null) { return(null); } } } if (doc.DocumentElement.HasAttribute("extensions")) { highlighter.Extensions = doc.DocumentElement.GetAttribute("extensions").Split(new char[] { ';', '|' }); } XmlElement environment = doc.DocumentElement["Environment"]; if (environment != null) { foreach (XmlNode node in environment.ChildNodes) { if (node is XmlElement) { XmlElement el = (XmlElement)node; if (el.Name == "Custom") { highlighter.SetColorFor(el.GetAttribute("name"), el.HasAttribute("bgcolor") ? new HighlightBackground(el) : new HighlightColor(el)); } else { highlighter.SetColorFor(el.Name, el.HasAttribute("bgcolor") ? new HighlightBackground(el) : new HighlightColor(el)); } } } } // parse properties if (doc.DocumentElement["Properties"] != null) { foreach (XmlElement propertyElement in doc.DocumentElement["Properties"].ChildNodes) { highlighter.Properties[propertyElement.Attributes["name"].InnerText] = propertyElement.Attributes["value"].InnerText; } } if (doc.DocumentElement["Digits"] != null) { highlighter.DigitColor = new HighlightColor(doc.DocumentElement["Digits"]); } XmlNodeList nodes = doc.DocumentElement.GetElementsByTagName("RuleSet"); foreach (XmlElement element in nodes) { highlighter.AddRuleSet(new HighlightRuleSet(element)); } xmlReader.Close(); if (errors != null) { StringBuilder msg = new StringBuilder(); foreach (ValidationEventArgs args in errors) { msg.AppendLine(args.Message); } throw new HighlightingDefinitionInvalidException(msg.ToString()); } else { return(highlighter); } } catch (Exception e) { throw new HighlightingDefinitionInvalidException("Could not load mode definition file '" + syntaxMode.FileName + "'.\n", e); } }
/// <summary> /// Parses a highlighting definition. /// </summary> /// <param name="syntaxMode">The syntax highlighting mode.</param> /// <param name="xmlReader">The XML reader.</param> /// <returns>The highlighting strategy.</returns> public static DefaultHighlightingStrategy Parse(SyntaxMode syntaxMode, XmlReader xmlReader) { return(Parse(null, syntaxMode, xmlReader)); }
public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) { return new XmlTextReader(highlighting); }
/// <summary> /// Gets the syntax highlighting definition for a certain syntax. /// </summary> /// <param name="syntaxMode">The syntax.</param> /// <returns>The syntax highlighting definition.</returns> public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) { Assembly assembly = typeof(SyntaxMode).Assembly; return new XmlTextReader(assembly.GetManifestResourceStream("DigitalRune.Windows.TextEditor.Resources." + syntaxMode.FileName)); }
/// <summary> /// Gets the syntax highlighting definition for a certain syntax. /// </summary> /// <param name="syntaxMode">The syntax.</param> /// <returns>The syntax highlighting definition.</returns> public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) { Assembly assembly = typeof(SyntaxMode).Assembly; return(new XmlTextReader(assembly.GetManifestResourceStream("DigitalRune.Windows.TextEditor.Resources." + syntaxMode.FileName))); }