diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/ColorExtensions.cs b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/ColorExtensions.cs
index 042e868..2cf4d75 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/ColorExtensions.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/ColorExtensions.cs
@@ -1,4 +1,21 @@
-using System;
+// Copyright © 2017-2025 QL-Win Contributors
+//
+// This file is part of QuickLook program.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+using System;
using System.Globalization;
using System.Windows.Media;
diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/CustomHighlightingDefinition.cs b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/CustomHighlightingDefinition.cs
index 162a2a7..657340d 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/CustomHighlightingDefinition.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/CustomHighlightingDefinition.cs
@@ -1,5 +1,23 @@
-using ICSharpCode.AvalonEdit.Highlighting;
+// Copyright © 2017-2025 QL-Win Contributors
+//
+// This file is part of QuickLook program.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Media;
@@ -32,7 +50,8 @@ public class CustomHighlightingDefinition : ICustomHighlightingDefinition
public virtual DocumentColorizingTransformer[] LineTransformers { get; }
}
-public class LightHighlightingDefinition : CustomHighlightingDefinition
+[CustomHighlightingDefinition("Light")]
+public abstract class LightHighlightingDefinition : CustomHighlightingDefinition
{
public override string Theme => "Light";
@@ -42,7 +61,8 @@ public class LightHighlightingDefinition : CustomHighlightingDefinition
};
}
-public class DarkHighlightingDefinition : CustomHighlightingDefinition
+[CustomHighlightingDefinition("Dark")]
+public abstract class DarkHighlightingDefinition : CustomHighlightingDefinition
{
public override string Theme => "Dark";
@@ -52,6 +72,18 @@ public class DarkHighlightingDefinition : CustomHighlightingDefinition
};
}
+public sealed class CustomHighlightingDefinitionAttribute(string theme) : Attribute
+{
+ public string Theme { get; } = theme;
+}
+
+public sealed class CustomHighlightingDefinitionClass(ICustomHighlightingDefinition instance, string theme)
+{
+ public ICustomHighlightingDefinition Instance { get; } = instance;
+
+ public string Theme { get; } = theme;
+}
+
public interface ICustomHighlightingDefinition : IHighlightingDefinition
{
public string Theme { get; }
diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Dark/PropertiesHighlightingDefinition.cs b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Dark/PropertiesHighlightingDefinition.cs
index 7ecb4e6..4eed277 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Dark/PropertiesHighlightingDefinition.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Dark/PropertiesHighlightingDefinition.cs
@@ -1,4 +1,21 @@
-using ICSharpCode.AvalonEdit.Document;
+// Copyright © 2017-2025 QL-Win Contributors
+//
+// This file is part of QuickLook program.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using System.Collections.Generic;
diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Light/PropertiesHighlightingDefinition.cs b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Light/PropertiesHighlightingDefinition.cs
index 094dd75..38afc09 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Light/PropertiesHighlightingDefinition.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingDefinitions/Light/PropertiesHighlightingDefinition.cs
@@ -1,9 +1,25 @@
-using ICSharpCode.AvalonEdit.Document;
+// Copyright © 2017-2025 QL-Win Contributors
+//
+// This file is part of QuickLook program.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using System.Collections.Generic;
using System.Text.RegularExpressions;
-using System.Windows;
using System.Windows.Media;
namespace QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions.Light;
diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingThemeManager.cs b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingThemeManager.cs
index 02f9a56..f5c8ad0 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingThemeManager.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Themes/HighlightingThemeManager.cs
@@ -21,13 +21,12 @@ using QuickLook.Common.Helpers;
using QuickLook.Plugin.TextViewer.Detectors;
using QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions;
using System;
+using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml;
-using DarkHighlightingDefinition = QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions.Dark;
-using LightHighlightingDefinition = QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions.Light;
namespace QuickLook.Plugin.TextViewer.Themes;
@@ -171,12 +170,36 @@ public class HighlightingThemeManager
private static void InitCustomHighlighting()
{
- AddCustomHighlighting(Light, new LightHighlightingDefinition.PropertiesHighlightingDefinition());
+ foreach (var definitionClass in LoadAllDefinitions())
+ {
+ var hlm = definitionClass.Theme == nameof(Dark) ? Dark : Light;
- AddCustomHighlighting(Dark, new DarkHighlightingDefinition.PropertiesHighlightingDefinition());
+ AddCustomHighlighting(hlm, definitionClass.Instance);
+ }
+
+ static IEnumerable LoadAllDefinitions()
+ {
+ var assembly = Assembly.GetExecutingAssembly();
+ var types = assembly.GetTypes()
+ .Where(t => t.IsClass
+ && !t.IsAbstract
+ && typeof(ICustomHighlightingDefinition).IsAssignableFrom(t)
+ && t.GetConstructor(Type.EmptyTypes) != null);
+
+ foreach (var type in types)
+ {
+ if (type.GetCustomAttribute() is CustomHighlightingDefinitionAttribute { } attr)
+ {
+ if (Activator.CreateInstance(type) is ICustomHighlightingDefinition instance)
+ {
+ yield return new CustomHighlightingDefinitionClass(instance, attr.Theme);
+ }
+ }
+ }
+ }
}
- private static void AddCustomHighlighting(HighlightingManager hlm, CustomHighlightingDefinition definition)
+ private static void AddCustomHighlighting(HighlightingManager hlm, ICustomHighlightingDefinition definition)
{
try
{