mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-12 10:19:07 +00:00
Add MakefileDetector for text viewer
This commit is contained in:
@@ -27,13 +27,16 @@ public class FormatDetector
|
||||
[
|
||||
new XMLDetector(),
|
||||
new JSONDetector(),
|
||||
new MakefileDetector(),
|
||||
];
|
||||
|
||||
public static IFormatDetector Detect(string text)
|
||||
public static IFormatDetector Detect(string path, string text)
|
||||
{
|
||||
_ = path;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(text)) return null;
|
||||
|
||||
return Instance.TextDetectors.Where(detector => detector.Detect(text))
|
||||
return Instance.TextDetectors.Where(detector => detector.Detect(path, text))
|
||||
.FirstOrDefault();
|
||||
}
|
||||
}
|
||||
@@ -44,5 +47,5 @@ public interface IFormatDetector
|
||||
|
||||
public string Extension { get; }
|
||||
|
||||
public bool Detect(string text);
|
||||
public bool Detect(string path, string text);
|
||||
}
|
||||
|
@@ -26,8 +26,10 @@ public class JSONDetector : IFormatDetector
|
||||
|
||||
public string Extension => ".json";
|
||||
|
||||
public bool Detect(string text)
|
||||
public bool Detect(string path, string text)
|
||||
{
|
||||
_ = path;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(text)) return false;
|
||||
|
||||
var span = text.AsSpan();
|
||||
|
@@ -0,0 +1,35 @@
|
||||
// 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace QuickLook.Plugin.TextViewer.Detectors;
|
||||
|
||||
public class MakefileDetector : IFormatDetector
|
||||
{
|
||||
public string Name => "Makefile";
|
||||
|
||||
public string Extension => ".mk";
|
||||
|
||||
public bool Detect(string path, string text)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(text)) return false;
|
||||
|
||||
return "Makefile".Equals(Path.GetFileName(path), StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
@@ -27,8 +27,10 @@ public class XMLDetector : IFormatDetector
|
||||
|
||||
public string Extension => ".xml";
|
||||
|
||||
public bool Detect(string text)
|
||||
public bool Detect(string path, string text)
|
||||
{
|
||||
_ = path;
|
||||
|
||||
return Signature.IsMatch(text);
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<SyntaxDefinition name="JavaScript" extensions=".js;.jsx;.mjs;.cjs;" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
|
||||
<SyntaxDefinition name="JavaScript" extensions=".js;.jsx;.mjs;.cjs" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
|
||||
<Color name="Digits" foreground="#FFb5cea8" fontStyle="normal" fontWeight="normal" exampleText="3.14"/>
|
||||
<Color name="Comment" foreground="#FF57A64A" exampleText="// comment"/>
|
||||
<Color name="String" foreground="#FFD69D85" exampleText="var text = "Hello, World!";" />
|
||||
|
@@ -0,0 +1,164 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<SyntaxDefinition name="Makefile" extensions=".makefile;.mk;.mak">
|
||||
|
||||
<Environment>
|
||||
<Default color="#D4D4D4" bgcolor="#1E1E1E"/>
|
||||
<Selection color="#1E1E1E" bgcolor="#264F78"/>
|
||||
<LineNumbers color="#858585" bgcolor="#1E1E1E"/>
|
||||
<CaretMarker color="#AEAFAD"/>
|
||||
<VRuler color="#333337"/>
|
||||
|
||||
<FoldLine color="#858585" bgcolor="#1E1E1E"/>
|
||||
<FoldMarker color="#D4D4D4" bgcolor="#2D2D2D"/>
|
||||
<SelectedFoldLine color="#D4D4D4" bgcolor="#23272E"/>
|
||||
|
||||
<EOLMarkers color="#404040"/>
|
||||
<SpaceMarkers color="#404040"/>
|
||||
<TabMarkers color="#404040"/>
|
||||
<InvalidLines color="#F44747"/>
|
||||
</Environment>
|
||||
|
||||
<Properties>
|
||||
<Property name="LineCommentBegin" value="#"/>
|
||||
</Properties>
|
||||
|
||||
<Digits name="Digits" color="#B5CEA8"/>
|
||||
|
||||
<RuleSets>
|
||||
<RuleSet ignorecase="false">
|
||||
|
||||
<Delimiters>:=(){}[]$@%*?</Delimiters>
|
||||
|
||||
<!-- Line comments starting with # -->
|
||||
<Span name="LineComment" stopateol="true" color="#6A9955" bold="false" italic="false">
|
||||
<Begin>#</Begin>
|
||||
</Span>
|
||||
|
||||
<!-- Variables (pattern: $(VAR) or ${VAR}) -->
|
||||
<Span name="Variable" color="#DCDCAA" bold="false" italic="false">
|
||||
<Begin>$(</Begin>
|
||||
<End>)</End>
|
||||
</Span>
|
||||
|
||||
<Span name="Variable" color="#DCDCAA" bold="false" italic="false">
|
||||
<Begin>${</Begin>
|
||||
<End>}</End>
|
||||
</Span>
|
||||
|
||||
<!-- String literals -->
|
||||
<Span name="String" color="#CE9178" stopateol="true" bold="false" italic="false">
|
||||
<Begin>"</Begin>
|
||||
<End>"</End>
|
||||
</Span>
|
||||
|
||||
<Span name="String" color="#CE9178" stopateol="true" bold="false" italic="false">
|
||||
<Begin>'</Begin>
|
||||
<End>'</End>
|
||||
</Span>
|
||||
|
||||
<!-- Special characters and operators -->
|
||||
<MarkFollowing markmarker="true" color="#D7BA7D" bold="false" italic="false">@</MarkFollowing>
|
||||
<MarkFollowing markmarker="true" color="#FF6B6B" bold="false" italic="false">-</MarkFollowing>
|
||||
<MarkFollowing markmarker="true" color="#C586C0" bold="false" italic="false">+</MarkFollowing>
|
||||
|
||||
<!-- Keywords for common make functions and directives -->
|
||||
<KeyWords name="Keywords" color="#C586C0" bold="false" italic="false">
|
||||
<Key word="include"/>
|
||||
<Key word="ifdef"/>
|
||||
<Key word="ifndef"/>
|
||||
<Key word="ifeq"/>
|
||||
<Key word="ifneq"/>
|
||||
<Key word="else"/>
|
||||
<Key word="endif"/>
|
||||
<Key word="define"/>
|
||||
<Key word="endef"/>
|
||||
<Key word="export"/>
|
||||
<Key word="unexport"/>
|
||||
<Key word="override"/>
|
||||
</KeyWords>
|
||||
|
||||
<!-- Make functions -->
|
||||
<KeyWords name="Functions" color="#4EC9B0" bold="false" italic="false">
|
||||
<Key word="patsubst"/>
|
||||
<Key word="subst"/>
|
||||
<Key word="strip"/>
|
||||
<Key word="findstring"/>
|
||||
<Key word="filter"/>
|
||||
<Key word="filter-out"/>
|
||||
<Key word="sort"/>
|
||||
<Key word="word"/>
|
||||
<Key word="wordlist"/>
|
||||
<Key word="words"/>
|
||||
<Key word="firstword"/>
|
||||
<Key word="lastword"/>
|
||||
<Key word="dir"/>
|
||||
<Key word="notdir"/>
|
||||
<Key word="suffix"/>
|
||||
<Key word="basename"/>
|
||||
<Key word="addsuffix"/>
|
||||
<Key word="addprefix"/>
|
||||
<Key word="join"/>
|
||||
<Key word="wildcard"/>
|
||||
<Key word="realpath"/>
|
||||
<Key word="abspath"/>
|
||||
<Key word="if"/>
|
||||
<Key word="or"/>
|
||||
<Key word="and"/>
|
||||
<Key word="foreach"/>
|
||||
<Key word="call"/>
|
||||
<Key word="value"/>
|
||||
<Key word="eval"/>
|
||||
<Key word="origin"/>
|
||||
<Key word="flavor"/>
|
||||
<Key word="shell"/>
|
||||
<Key word="error"/>
|
||||
<Key word="warning"/>
|
||||
<Key word="info"/>
|
||||
</KeyWords>
|
||||
|
||||
<!-- Built-in variables -->
|
||||
<KeyWords name="BuiltinVars" color="#9CDCFE" bold="false" italic="false">
|
||||
<Key word="CC"/>
|
||||
<Key word="CXX"/>
|
||||
<Key word="CFLAGS"/>
|
||||
<Key word="CXXFLAGS"/>
|
||||
<Key word="LDFLAGS"/>
|
||||
<Key word="MAKE"/>
|
||||
<Key word="MAKEFILE_LIST"/>
|
||||
<Key word="CURDIR"/>
|
||||
<Key word="SHELL"/>
|
||||
<Key word="AR"/>
|
||||
<Key word="AS"/>
|
||||
<Key word="LD"/>
|
||||
<Key word="YACC"/>
|
||||
<Key word="LEX"/>
|
||||
</KeyWords>
|
||||
|
||||
<!-- Automatic variables -->
|
||||
<KeyWords name="AutoVars" color="#FFD700" bold="true" italic="false">
|
||||
<Key word="$@"/>
|
||||
<Key word="$%"/>
|
||||
<Key word="$<"/>
|
||||
<Key word="$?"/>
|
||||
<Key word="$^"/>
|
||||
<Key word="$+"/>
|
||||
<Key word="$*"/>
|
||||
<Key word="$(@D)"/>
|
||||
<Key word="$(@F)"/>
|
||||
<Key word="$(*D)"/>
|
||||
<Key word="$(*F)"/>
|
||||
<Key word="$(%D)"/>
|
||||
<Key word="$(%F)"/>
|
||||
<Key word="$(<D)"/>
|
||||
<Key word="$(<F)"/>
|
||||
<Key word="$(^D)"/>
|
||||
<Key word="$(^F)"/>
|
||||
<Key word="$(+D)"/>
|
||||
<Key word="$(+F)"/>
|
||||
<Key word="$(?D)"/>
|
||||
<Key word="$(?F)"/>
|
||||
</KeyWords>
|
||||
</RuleSet>
|
||||
</RuleSets>
|
||||
</SyntaxDefinition>
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<SyntaxDefinition name="Text" extensions=".txt;">
|
||||
<SyntaxDefinition name="Text" extensions=".txt">
|
||||
<Environment />
|
||||
<Properties />
|
||||
<Digits />
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<SyntaxDefinition name="TypeScript" extensions=".ts;.tsx;.uts;">
|
||||
<SyntaxDefinition name="TypeScript" extensions=".ts;.tsx;.uts">
|
||||
|
||||
<Environment>
|
||||
<Default color="#D4D4D4" bgcolor="#1E1E1E"/>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<SyntaxDefinition name="JavaScript" extensions=".js;.jsx;.mjs;.cjs;">
|
||||
<SyntaxDefinition name="JavaScript" extensions=".js;.jsx;.mjs;.cjs">
|
||||
|
||||
<Environment>
|
||||
<Default color="Black" bgcolor="#FFFFFF"/>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<SyntaxDefinition name="Text" extensions=".txt;">
|
||||
<SyntaxDefinition name="Text" extensions=".txt">
|
||||
<Environment />
|
||||
<Properties />
|
||||
<Digits />
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<SyntaxDefinition name="TypeScript" extensions=".ts;.tsx;.uts;">
|
||||
<SyntaxDefinition name="TypeScript" extensions=".ts;.tsx;.uts">
|
||||
|
||||
<Environment>
|
||||
<Default color="Black" bgcolor="#FFFFFF"/>
|
||||
|
@@ -220,7 +220,7 @@ public partial class TextViewerPanel : TextEditor, IDisposable
|
||||
Dispatcher.BeginInvoke(() =>
|
||||
{
|
||||
var extension = Path.GetExtension(path);
|
||||
var highlighting = HighlightingThemeManager.GetHighlightingByExtensionOrDetector(extension, text);
|
||||
var highlighting = HighlightingThemeManager.GetHighlightingByExtensionOrDetector(path, extension, text);
|
||||
|
||||
Encoding = encoding;
|
||||
SyntaxHighlighting = bufferCopy.Length > maxHighlightingLength
|
||||
|
@@ -42,7 +42,7 @@ public class HighlightingThemeManager
|
||||
InitCustomHighlighting();
|
||||
}
|
||||
|
||||
public static HighlightingTheme GetHighlightingByExtensionOrDetector(string extension, string text = null)
|
||||
public static HighlightingTheme GetHighlightingByExtensionOrDetector(string path, string extension, string text = null)
|
||||
{
|
||||
if (Light is null || Dark is null) return HighlightingTheme.Default;
|
||||
|
||||
@@ -56,7 +56,7 @@ public class HighlightingThemeManager
|
||||
{
|
||||
var useFormatDetector = SettingHelper.Get("UseFormatDetector", true, "QuickLook.Plugin.TextViewer");
|
||||
|
||||
if (useFormatDetector && FormatDetector.Detect(text)?.Extension is string detectExtension)
|
||||
if (useFormatDetector && FormatDetector.Detect(path, text)?.Extension is string detectExtension)
|
||||
{
|
||||
highlightingTheme = GetDefinitionByExtension(nameof(Dark), detectExtension)
|
||||
?? GetDefinitionByExtension(nameof(Light), detectExtension);
|
||||
|
Reference in New Issue
Block a user