コード例 #1
0
        /// <summary>
        /// Registers the specified syntax highlighting definition (.XSHD file).
        /// </summary>
        /// <param name="file">The file including path.</param>
        /// <param name="theme">The theme. (Can be <see langword="null"/>.)</param>
        private void Register(string file, string theme)
        {
            // Quickly inspect the file to get name of language and supported file extensions.
            string name, extensionsString;

            if (InspectHighlightingDefinition(file, out name, out extensionsString))
            {
                Logger.Debug(
                    "Registering syntax highlighting definition (file = \"{0}\", name = \"{1}\", extensions = \"{2}\".",
                    file, name, extensionsString);

                // Use the file name if no name is defined in the highlighting definition.
                if (string.IsNullOrWhiteSpace(name))
                {
                    name = Path.GetFileNameWithoutExtension(file);
                }

                Debug.Assert(name != null, "Sanity check.");

                // Register highlighting definition in list and lookup tables.
                ThemeAwareHighlightingDefinition highlightingDefinition;
                if (!_definitionsByName.TryGetValue(name, out highlightingDefinition))
                {
                    highlightingDefinition = new ThemeAwareHighlightingDefinition(name, _themeService);
                    _definitions.Add(highlightingDefinition);

                    // Register language name.
                    _definitionsByName.Add(name, highlightingDefinition);

                    // Register supported file extensions.
                    if (extensionsString != null)
                    {
                        var extensions = extensionsString.Split(';')
                                         .Select(extension => extension.Trim())
                                         .Where(extension => extension.Length > 0);
                        foreach (var extension in extensions)
                        {
                            _definitionsByExtension[extension] = highlightingDefinition;
                        }
                    }
                }

                // Register function for deferred loading of highlighting definition.
                Func <IHighlightingDefinition> loadDefinition = () =>
                {
                    XshdSyntaxDefinition xshd;
                    using (var reader = XmlReader.Create(file))
                        xshd = HighlightingLoader.LoadXshd(reader);

                    return(HighlightingLoader.Load(xshd, this));
                };
                highlightingDefinition.Register(theme, loadDefinition);
            }
        }
コード例 #2
0
        /// <summary>
        /// Registers the specified syntax highlighting definition (.XSHD file).
        /// </summary>
        /// <param name="file">The file including path.</param>
        /// <param name="theme">The theme. (Can be <see langword="null"/>.)</param>
        private void Register(string file, string theme)
        {
            // Quickly inspect the file to get name of language and supported file extensions.
            string name, extensionsString;
            if (InspectHighlightingDefinition(file, out name, out extensionsString))
            {
                Logger.Debug(
                    "Registering syntax highlighting definition (file = \"{0}\", name = \"{1}\", extensions = \"{2}\".",
                    file, name, extensionsString);

                // Use the file name if no name is defined in the highlighting definition.
                if (string.IsNullOrWhiteSpace(name))
                    name = Path.GetFileNameWithoutExtension(file);

                Debug.Assert(name != null, "Sanity check.");

                // Register highlighting definition in list and lookup tables.
                ThemeAwareHighlightingDefinition highlightingDefinition;
                if (!_definitionsByName.TryGetValue(name, out highlightingDefinition))
                {
                    highlightingDefinition = new ThemeAwareHighlightingDefinition(name, _themeService);
                    _definitions.Add(highlightingDefinition);

                    // Register language name.
                    _definitionsByName.Add(name, highlightingDefinition);

                    // Register supported file extensions.
                    if (extensionsString != null)
                    {
                        var extensions = extensionsString.Split(';')
                                                         .Select(extension => extension.Trim())
                                                         .Where(extension => extension.Length > 0);
                        foreach (var extension in extensions)
                            _definitionsByExtension[extension] = highlightingDefinition;
                    }
                }

                // Register function for deferred loading of highlighting definition.
                Func<IHighlightingDefinition> loadDefinition = () =>
                                                               {
                                                                   XshdSyntaxDefinition xshd;
                                                                   using (var reader = XmlReader.Create(file))
                                                                       xshd = HighlightingLoader.LoadXshd(reader);

                                                                   return HighlightingLoader.Load(xshd, this);
                                                               };
                highlightingDefinition.Register(theme, loadDefinition);
            }
        }