/// <summary>
        /// Static class constructor
        /// </summary>
        static DefaultHighlightingManager()
        {
            var defaultManager = new DefaultHighlightingManager();

            var theme = new HLTheme("Dark", "Light", "Dark",
                                    HL_THEMES_NAMESPACE_ROOT, "Dark.xshtd", defaultManager);

            defaultManager.ThemedHighlightingAdd(theme.Key, theme);

            theme = new HLTheme("Light", HL_GENERIC_NAMESPACE_ROOT, "Light");
            defaultManager.ThemedHighlightingAdd(theme.Key, theme);

            // Setup default theme without registration of Highlightings
            defaultManager.SetCurrentThemeInternal(theme.Key);

            theme = new HLTheme("TrueBlue", "Light", "True Blue",
                                HL_THEMES_NAMESPACE_ROOT, "TrueBlue.xshtd", defaultManager);
            defaultManager.ThemedHighlightingAdd(theme.Key, theme);

            theme = new HLTheme("VS2019_Dark", "Light", "VS2019 Dark",
                                HL_THEMES_NAMESPACE_ROOT, "VS2019_Dark.xshtd", defaultManager);
            defaultManager.ThemedHighlightingAdd(theme.Key, theme);

            HLResources.RegisterBuiltInHighlightings(defaultManager, defaultManager.CurrentTheme);

            Instance = defaultManager;
        }
        Func <IHighlightingDefinition> LoadHighlighting(IHLTheme theme, string name, string resourceName)
        {
            Func <IHighlightingDefinition> func = delegate
            {
                ICSharpCode.AvalonEdit.Highlighting.Xshd.XshdSyntaxDefinition xshd;
                using (Stream s = HLResources.OpenStream(GetPrefix(CurrentTheme.HLBaseKey), resourceName))
                {
                    using (XmlTextReader reader = new XmlTextReader(s))
                    {
                        // in release builds, skip validating the built-in highlightings
                        xshd = HighlightingLoader.LoadXshd(reader, true);
                    }
                }

                var hlTheme = theme.HlTheme;
                SyntaxDefinition themedHighlights = null;

                if (hlTheme != null)
                {
                    themedHighlights = hlTheme.GetNamedSyntaxDefinition(name);
                }

                return(HighlightingLoader.Load(themedHighlights, xshd, this));
            };

            return(func);
        }
예제 #3
0
        /// <summary>
        /// Static class constructor
        /// </summary>
        static DefaultHighlightingManager()
        {
            var defaultManager = new DefaultHighlightingManager();
            var themeNamespace = Assembly.GetExecutingAssembly().GetManifestResourceNames().First(name => name.EndsWith(FilenameXmldocXshd));

            foreach (var resourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames())
            {
                if (!resourceName.EndsWith(ExtensionXshtd))
                {
                    continue;
                }

                var split    = resourceName.Split('.');
                var name     = split[split.Length - 2];
                var filename = string.Join(".", split, split.Length - 2, 2);
                var ns       = resourceName.Remove(resourceName.Length - (split[split.Length - 1].Length + split[split.Length - 2].Length) - 2);
                var theme    = new HLTheme(name, LightThemeName, name, ns, filename, defaultManager);
                defaultManager.ThemedHighlightingAdd(theme.Key, theme);
            }

            themeNamespace = themeNamespace.Remove(themeNamespace.Length - FilenameXmldocXshd.Length - 1);
            defaultManager.ThemedHighlightingAdd(LightThemeName, new HLTheme(LightThemeName, themeNamespace, LightThemeName));
            defaultManager.SetCurrentThemeInternal(LightThemeName);

            HLResources.RegisterBuiltInHighlightings(defaultManager, defaultManager.CurrentTheme);
            Instance = defaultManager;
        }
        /// <summary>
        /// Registering a built-in highlighting including highlighting themes (if any).
        /// </summary>
        /// <param name="theme"></param>
        /// <param name="name"></param>
        /// <param name="extensions"></param>
        /// <param name="resourceName"></param>
        internal void RegisterHighlighting(IHLTheme theme,
                                           string name,
                                           string[] extensions,
                                           string resourceName)
        {
            try
            {
#if DEBUG
                // don't use lazy-loading in debug builds, show errors immediately
                ICSharpCode.AvalonEdit.Highlighting.Xshd.XshdSyntaxDefinition xshd;
                using (Stream s = HLResources.OpenStream(GetPrefix(CurrentTheme.HLBaseKey), resourceName))
                {
                    using (XmlTextReader reader = new XmlTextReader(s))
                    {
                        xshd = HighlightingLoader.LoadXshd(reader, false);
                    }
                }
                Debug.Assert(name == xshd.Name);
                if (extensions != null)
                {
                    Debug.Assert(System.Linq.Enumerable.SequenceEqual(extensions, xshd.Extensions));
                }
                else
                {
                    Debug.Assert(xshd.Extensions.Count == 0);
                }

                var hlTheme = theme.HlTheme;
                SyntaxDefinition themedHighlights = null;

                if (hlTheme != null)
                {
                    themedHighlights = hlTheme.GetNamedSyntaxDefinition(name);
                }

                // round-trip xshd:
                //					string resourceFileName = Path.Combine(Path.GetTempPath(), resourceName);
                //					using (XmlTextWriter writer = new XmlTextWriter(resourceFileName, System.Text.Encoding.UTF8)) {
                //						writer.Formatting = Formatting.Indented;
                //						new Xshd.SaveXshdVisitor(writer).WriteDefinition(xshd);
                //					}
                //					using (FileStream fs = File.Create(resourceFileName + ".bin")) {
                //						new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, xshd);
                //					}
                //					using (FileStream fs = File.Create(resourceFileName + ".compiled")) {
                //						new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, Xshd.HighlightingLoader.Load(xshd, this));
                //					}

                base.RegisterHighlighting(name, extensions,
                                          HighlightingLoader.Load(themedHighlights, xshd, this));
#else
                base.RegisterHighlighting(name, extensions, LoadHighlighting(theme, name, resourceName));
#endif
            }
            catch (HighlightingDefinitionInvalidException ex)
            {
                throw new InvalidOperationException("The built-in highlighting '" + name + "' is invalid.", ex);
            }
        }
예제 #5
0
        /// <summary>
        /// Converts a XSHTD reference from namespace prefix and themename
        /// into a <see cref="XhstdThemeDefinition"/> object and returns it.
        /// </summary>
        /// <param name="hLPrefix"></param>
        /// <param name="hLThemeName"></param>
        /// <returns></returns>
        public XhstdThemeDefinition ResolveHighLightingTheme(string hLPrefix, string hLThemeName)
        {
            if (string.IsNullOrEmpty(hLPrefix) || string.IsNullOrEmpty(hLThemeName))
            {
                return(null);
            }

            using (Stream s = HLResources.OpenStream(hLPrefix, hLThemeName))
            {
                using (XmlTextReader reader = new XmlTextReader(s))
                {
                    return(HighlightingThemeLoader.LoadXshd(reader, false));
                }
            }
        }
예제 #6
0
 /// <summary>
 /// Sets the current highlighting based on the name of the given highöighting theme.
 /// (eg: WPF APP Theme 'TrueBlue' -> Resolve highlighting 'C#' to 'TrueBlue'->'C#')
 ///
 /// Throws an <see cref="IndexOutOfRangeException"/> if the WPF APP theme is not known.
 /// </summary>
 /// <param name="themeNameKey"></param>
 public void SetCurrentTheme(string themeNameKey)
 {
     SetCurrentThemeInternal(themeNameKey);
     HLResources.RegisterBuiltInHighlightings(DefaultHighlightingManager.Instance, CurrentTheme);
 }