/// <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); } }
/// <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); } }