From 93273820aa895f121d19a2b39c23a1d70abc5705 Mon Sep 17 00:00:00 2001 From: ema Date: Thu, 2 Jan 2025 03:26:42 +0800 Subject: [PATCH] Improve dark mode text preview --- .../QuickLook.Plugin.TextViewer/Plugin.cs | 10 +- .../Syntax/Dark/.gitkeep | 0 .../Syntax/Dark/JSON.xshd | 73 +++++++ .../Syntax/Light/Assembly.xshd | 2 +- .../Syntax/_LICENSE | 21 -- .../Syntax/_README.md | 198 ------------------ 6 files changed, 80 insertions(+), 224 deletions(-) delete mode 100644 QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/.gitkeep create mode 100644 QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/JSON.xshd delete mode 100644 QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_LICENSE delete mode 100644 QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_README.md diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Plugin.cs index 928586b4f..4bc6e5426 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Plugin.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Plugin.cs @@ -95,7 +95,7 @@ public void View(string path, ContextObject context) else { _tvp = new TextViewerPanel(path, context); - AssignHighlightingManager(_tvp, context); + AssignHighlightingManager(path, _tvp, context); context.ViewerContent = _tvp; } @@ -146,10 +146,12 @@ private HighlightingManager getHighlightingManager(Themes theme, string dirName) return hlm; } - private void AssignHighlightingManager(TextViewerPanel tvp, ContextObject context) + private void AssignHighlightingManager(string path, TextViewerPanel tvp, ContextObject context) { - var darkThemeAllowed = SettingHelper.Get("AllowDarkTheme", false, "QuickLook.Plugin.TextViewer"); + var def = _hlmDark.GetDefinitionByExtension(Path.GetExtension(path)); + var darkThemeAllowed = SettingHelper.Get("AllowDarkTheme", def != null, "QuickLook.Plugin.TextViewer"); var isDark = darkThemeAllowed && OSThemeHelper.AppsUseDarkTheme(); + tvp.HighlightingManager = isDark ? _hlmDark : _hlmLight; if (isDark) { @@ -160,7 +162,7 @@ private void AssignHighlightingManager(TextViewerPanel tvp, ContextObject contex { // if os dark mode, but not AllowDarkTheme, make background light tvp.Background = OSThemeHelper.AppsUseDarkTheme() - ? new SolidColorBrush(Color.FromArgb(150, 255, 255, 255)) + ? new SolidColorBrush(Color.FromArgb(175, 255, 255, 255)) : Brushes.Transparent; } } diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/.gitkeep b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/JSON.xshd b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/JSON.xshd new file mode 100644 index 000000000..386a84582 --- /dev/null +++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Dark/JSON.xshd @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + " + " + + + ' + ' + + + : + + + , + + + + + + + , + + + + + + true + false + + + null + + + " + " + + + ' + ' + + + \{ + \} + + + \[ + \] + + + \b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)? + + + + + + + diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/Assembly.xshd b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/Assembly.xshd index 004dd4b53..add834a21 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/Assembly.xshd +++ b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/Light/Assembly.xshd @@ -10,7 +10,7 @@ hello@exr.be https://github.com/ei --> - + diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_LICENSE b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_LICENSE deleted file mode 100644 index 9bad58814..000000000 --- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Ezra Altahan and 2019 Dirkster99 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_README.md b/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_README.md deleted file mode 100644 index 9957ab9be..000000000 --- a/QuickLook.Plugin/QuickLook.Plugin.TextViewer/Syntax/_README.md +++ /dev/null @@ -1,198 +0,0 @@ -Synopsis -======== -This project is a compilation of lexers I had written for [SharpDevelop](https://github.com/icsharpcode)'s TextEditor component. I am indeed late to the party, as the component is no longer supported by SharpDevelop team; however, I spent a good chunk of time writing these lexers through the years and now I thought why not make them open source for everyone who's still using the component. - -All lexers were created exclusively for ICSharpCode.TextEditor v3.2. They were not tested on any earlier or later releases. - -Languages ---------- -List of all supported languages, sorted alphabetically: - -A | B | C | D | E | F | G | H | I | J | K | L | N | O | P | R | S | T | V | X --------------|-------|--------------|--------|--------|------------|---------|---------|---------|------------|---------|------|---------|-------|------------|----------|----------|------------|-------------|---- -ActionScript | Batch | C# | D | Eiffel | F# | Go | Haskell | Icon | Java | KiXtart | Lean | Nemerle | Obj-C | ParaSail | R | Scala | TCL | Vala | X10 -Ada | Boo | C | Dart | Erlang | Falcon | Groovy | Haxe | ILYC | JavaScript | Kotlin | Lisp | Nim | OCaml | Pascal | Registry | Scheme | Thrift | VB.NET | XC -ANTLR | | C++ | Delphi | | Fantom | Gui4Cli | HTML | INI/INF | JSON | | Lua | | | PHP | Resource | Solidity | TypeScript | VBScript | XML -Assembly | | Ceylon | | | Fortran95 | | | Io | Julia | | | | | Pike | Rexx | Spike | | Verilog | Xtend -AutoHotkey | | ChucK | | | | | | | | | | | | PowerShell | Rust | SQF | | VHDL | -‌‌ | | Clojure | | | | | | | | | | | | Prolog | | SQL | | VS Solution | -‌‌ | | Cocoa | | | | | | | | | | | | PureScript | | Swift | | Volt | -‌‌ | | CoffeeScript | | | | | | | | | | | | Python | | | | | -‌‌ | | Cool | | | | | | | | | | | | | | | | | -‌‌ | | CSS | | | | | | | | | | | | | | | | | - -That makes 85 languages in total. - -> **Notes** - -> - **PHP**: Heredoc highlighting is not supported. The syntax parser simply can't do it. -> - **CSS**: Omitting the last semicolon in the block is not supported. Same reason as above. - -Usage ------ -If you are on this page, you most likely already know how to activate the lexer and use it.
For a complete noob, this is how it is done: - -C# -```c# -using System.IO; -using ICSharpCode.TextEditor.Document; -``` -```c# -// insert the directory path of the desired .xshd file -var synDir = Application.StartupPath + "\\Syntax"; - -// check if directory exists to prevent throwing an exception -if (Directory.Exists(synDir)) -{ - // create new provider with the highlighting directory - var fsmProvider = new FileSyntaxModeProvider(synDir); - // attach to the text editor - HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider); - // activate the highlighting, use the name from the SyntaxDefinition node in the .xshd file - TextEditorControl.SetHighlighting("YourHighlighting"); -} -else { MessageBox.Show("\u0027" + synDir + "\u0027" + " doesn't exist"); } -``` - -VB.NET -```vb.net -Imports System.IO -Imports ICSharpCode.TextEditor.Document -``` -```vb.net -' insert the directory path of the desired .xshd file -Dim synDir As String = Application.StartupPath & "\Syntax" -' syntax provider -Dim fsmProvider As FileSyntaxModeProvider - -If Directory.Exists(synDir) Then - ' create new provider with the highlighting directory - fsmProvider = New FileSyntaxModeProvider(synDir) - ' attach to the text editor - HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider) - ' activate the highlighting, use the name from the SyntaxDefinition node in the .xshd file - TextEditorControl.SetHighlighting("YourHighlighting") -Else - MessageBox.Show(ChrW(39) + synDir + ChrW(39) + "doesn't exist") -End If -``` - -For more information on XSHD files, [see here](https://github.com/icsharpcode/SharpDevelop/wiki/Syntax-highlighting#attach-a-syntaxhighlighting-to-the-text-editor). - -Contact Author -------- -[Email me your love letters](mailto:xviyy@aol.com) -
-[Tweet me maybe?](https://twitter.com/xviyy) - -Legal ------ -This project is distributed under the [MIT License](https://opensource.org/licenses/MIT) - - -/******************************************************/ - - -[![Build status](https://ci.appveyor.com/api/projects/status/s19eint5cqhjxh5h/branch/master?svg=true)](https://ci.appveyor.com/project/Dirkster99/avalonedithighlightingthemes/branch/master) [![Release](https://img.shields.io/github/release/Dirkster99/AvalonEditHighlightingThemes.svg)](https://github.com/Dirkster99/AvalonEditHighlightingThemes/releases/latest) [![NuGet](https://img.shields.io/nuget/dt/Dirkster.HL.svg)](http://nuget.org/packages/Dirkster.HL) - -# AvalonEditHighlightingThemes -Implements a sample implementation for using Highlightings with different (Light/Dark) WPF themes - -# ThemedHighlightingManager for AvalonEdit - -This [AvalonEdit](https://github.com/icsharpcode/AvalonEdit) extension implements its own highlighting manager that extends the classic way of handling highlighting definitions (see also [Dirkster99/AvalonEdit-Samples](https://github.com/Dirkster99/AvalonEdit-Samples)). - -The inital release contains 5 highlighting themes: -- Dark -- Light -- True Blue-Light -- True Blue-Dark -- VS 2019-Dark - -but you can easily define more themes. Just create a pull request with the [XSHTD file](https://github.com/Dirkster99/AvalonEditHighlightingThemes/tree/master/source/HL/Resources/Themes) at this site. - -The standard highlighting in AvalonEdit is dependent on the currently viewed type -of text (eg C# or SQL), but a highlighting definition designed for a **Light** WPF theme may look [ugly](https://github.com/Dirkster99/AvalonEditHighlightingThemes/wiki/Highlighting-without-a-Theme) if viewed with a **Dark** -WPF theme, and vice versa. This is why the **ThemedHighlightingManager** extension associates each highlighting definition -with: - -- A WPF Theme (Light, Dark) and -- A type of text (C#, SQL etc) - -This approach is very similar to the implementation in [Notepad++](https://github.com/notepad-plus-plus/notepad-plus-plus) except Notepad++ uses a plain [xml file](https://lonewolfonline.net/notepad-colour-schemes/) to configure a highlighting theme whereas the **ThemedHighlightingManager** uses an [XSHTD file](https://github.com/Dirkster99/AvalonEditHighlightingThemes/tree/master/source/HL/Resources/Themes) to do the same. But at the end of the day, its XML in both projects, and cloning a highlighting theme from Notepad++ is almost too easy (thats how similar both implementations are). - -Assuming that an application already use a WPF theming/management library, such as: -- [MahApps.Metro](https://github.com/MahApps/MahApps.Metro), -- [MLib](https://github.com/Dirkster99/MLib), or -- [MUI](https://github.com/firstfloorsoftware/mui) - -enables an applications author to switch highlighting definitions to a matching color palette whenever the user -switches a given WPF theme. See [AvalonEditHighlightingThemes](https://github.com/Dirkster99/AvalonEditHighlightingThemes) -and [Aehnlich](https://github.com/Dirkster99/Aehnlich) for detailed sample implementations. - -# Themes -![](screenshots/Themes.png) - -## True Blue Light Theme -![](screenshots/TrueBlue_Light.png) - -## VS 2019 Dark -![](screenshots/VS2019_Dark.png) - -## Dark Theme -![](screenshots/Dark.png) - -## Light Theme -![](screenshots/Light.png) - -## True Blue Dark Theme -![](screenshots/TrueBlue_Dark.png) - -# Concept -## WPF Theme - -A WPF theme is a way of styling and theming WPF controls. This is usually implemented in a seperate library, such as: -- [MahApps.Metro](https://github.com/MahApps/MahApps.Metro), -- [MLib](https://github.com/Dirkster99/MLib), or -- [MUI](https://github.com/firstfloorsoftware/mui) - -and takes advantage of WPFs way of defining and using themes ('Dark', 'Light', 'True Blue'...) with XAML resources etc. - -## Generic Highlighting Theme - -A Generic highlighting theme is a classic collection of AvalonEdit V2 highlighting definitions -(collection of xshd files). In this project, there is only one such theme, the **'Light'** highlighting -theme. This theme is defined in a classic collection of xshd resource files at -[HL.Resources.Light](https://github.com/Dirkster99/AvalonEditHighlightingThemes/tree/master/source/Apps/HL/Resources/Light). - -## Derived Highlighting Theme - -A derived highlighting theme is a highlighting theme that makes use of a -[Generic Highlighting Theme](#Generic-Highlighting-Theme) and overwrites -formattings defined in named colors by incorporating an additional xsh**t**d file. - -This approach re-uses the highlighting patterns of the generic theme but applies -different colors and formattings to better support: - -- different background colors of different WPF themes or -- different taste towards different color schemes by different users - -This project has multiple derived highlighting themes - -- 'Dark' -- 'True Blue' -- 'VS 2019 Dark' - -which are based on the highlighting patterns of the 'Light' generic highlighting theme. - -## Data Design - Extension with Themable Highlighting - -![](screenshots/HighlightingManagerV2.png) - -## Data Design - Classic Highlighting Manager V5.04 - -![](screenshots/ClassicHighlighting.png) - -## Other AvalonEdit Demo Projects: - -More demo projects may be listed at the [AvalonEdit's Wiki page](https://github.com/icsharpcode/AvalonEdit/wiki/Samples-and-Articles) \ No newline at end of file