From 2f324c432695d2c5080a1091576a0a1ae6aac996 Mon Sep 17 00:00:00 2001 From: Samuel Meuli Date: Sat, 21 Mar 2020 21:09:17 +0100 Subject: [PATCH] Add support for more UTIs and file extensions --- QLPlugin/Info.plist | 19 ++++++++++- .../FileTypeRenderers/CodeRenderer.swift | 32 ++++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/QLPlugin/Info.plist b/QLPlugin/Info.plist index 840d282..838948a 100644 --- a/QLPlugin/Info.plist +++ b/QLPlugin/Info.plist @@ -28,6 +28,18 @@ QLSupportedContentTypes + + + + public.data + dyn.ah62d4rv4ge81k2pc public.comma-separated-values-text @@ -45,8 +57,9 @@ com.adobe.jsx com.apple.applescript.script com.apple.applescript.text - com.apple.property-list + com.apple.property-list com.apple.rez-source + com.apple.xcode.entitlements-property-list com.barebones.bbedit.scss-source com.barebones.bbedit.verilog-hdl-source com.barebones.bbedit.vhdl-source @@ -70,6 +83,7 @@ com.sun.javafx com.sun.java-class com.sun.manifest + com.vallettaventures.texpadm.tex com.unknown.lhs org.applescript.source org.arduino.ino-source @@ -120,6 +134,7 @@ org.ocaml.ocaml-source org.omg.ecore org.rdf.source + com.runningwithcrayons.alfred.appearance org.rust-lang.source org.sbarex.conf org.sbarex.dart @@ -155,6 +170,7 @@ tk.tcl.tcl tk.tcl.tcl-source dyn.ah62d4rv4ge8007a + dyn.ah62d4rv4ge80255drq dyn.ah62d4rv4ge80c75p dyn.ah62d4rv4ge80g55sq2 dyn.ah62d4rv4ge80g62 @@ -162,6 +178,7 @@ dyn.ah62d4rv4ge80s6xbqv0gn dyn.ah62d4rv4ge80w5pq dyn.ah62d4rv4ge80y652 + dyn.ah62d4rv4ge81e3pxr70hq3pe dyn.ah62d4rv4ge81g22 dyn.ah62d4rv4ge81g25brvuu dyn.ah62d4rv4ge81g25xsq diff --git a/QLPlugin/Renderers/FileTypeRenderers/CodeRenderer.swift b/QLPlugin/Renderers/FileTypeRenderers/CodeRenderer.swift index 9196825..418c2d0 100644 --- a/QLPlugin/Renderers/FileTypeRenderers/CodeRenderer.swift +++ b/QLPlugin/Renderers/FileTypeRenderers/CodeRenderer.swift @@ -1,9 +1,39 @@ import Foundation import os.log +let dotfileLexers = [ + ".dockerignore": "bash", + ".editorconfig": "ini", + ".gitattributes": "bash", + ".gitignore": "bash", + ".npmignore": "bash", +] + +let fileExtensionLexers = [ + "alfredappearance": "json", // Alfred theme + "cls": "tex", // LaTeX classes file + "entitlements": "xml", + "iml": "xml", + "plist": "xml", + "resolved": "json", // Swift Package Manager lockfile (Package.resolved) + "sty": "tex", // LaTeX styles file +] + class CodeRenderer: Renderer { private let chromaBinUrl = Bundle.main.url(forAuxiliaryExecutable: "chroma-v0.7.0") + /// Returns the name of the Chroma lexer to use for the file. This is determined based on the + /// file name/extension + private func getLexer() -> String { + if fileExtension.isEmpty { + // Dotfile + return dotfileLexers[fileUrl.lastPathComponent, default: "autodetect"] + } else { + // File with extension + return fileExtensionLexers[fileExtension, default: "autodetect"] + } + } + override func getStylesheets() -> [Stylesheet] { var stylesheets = super.getStylesheets() if let cssUrl = chromaCssUrl { @@ -22,7 +52,7 @@ class CodeRenderer: Renderer { let (status, stdout, stderr) = Shell.run( url: binaryUrlResolved, - arguments: [fileUrl.path, "--html", "--html-only"] + arguments: [fileUrl.path, "--html", "--html-only", "--lexer", getLexer()] ) guard status == 0 else {