/// <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));
 }
Beispiel #10
0
 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)));
        }