Skip to content

Commit

Permalink
Add AppleScript support
Browse files Browse the repository at this point in the history
Closes #7
  • Loading branch information
samuelmeuli committed May 17, 2020
1 parent 7d3499f commit 719be1d
Show file tree
Hide file tree
Showing 15 changed files with 119 additions and 4 deletions.
4 changes: 4 additions & 0 deletions Glance.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
7E022BEE245253B3000EFCD3 /* OutlinePreviewVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7E022BEC245253B3000EFCD3 /* OutlinePreviewVC.xib */; };
7E08A50F2454372200B7FF53 /* TablePreviewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E08A50D2454372200B7FF53 /* TablePreviewVC.swift */; };
7E08A5102454372200B7FF53 /* TablePreviewVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7E08A50E2454372200B7FF53 /* TablePreviewVC.xib */; };
7E0DC237247163C7003AA589 /* AppleScriptPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E0DC236247163C7003AA589 /* AppleScriptPreview.swift */; };
7E1B16922455D93E00E2B84D /* HTMLRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1B16912455D93E00E2B84D /* HTMLRenderer.swift */; };
7E1DC51F240E6CE300D0A061 /* PreviewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1DC51E240E6CE300D0A061 /* PreviewVC.swift */; };
7E1DC521240E6D8000D0A061 /* MarkdownPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1DC520240E6D8000D0A061 /* MarkdownPreview.swift */; };
Expand Down Expand Up @@ -172,6 +173,7 @@
7E022BEC245253B3000EFCD3 /* OutlinePreviewVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = OutlinePreviewVC.xib; sourceTree = "<group>"; };
7E08A50D2454372200B7FF53 /* TablePreviewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TablePreviewVC.swift; sourceTree = "<group>"; };
7E08A50E2454372200B7FF53 /* TablePreviewVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TablePreviewVC.xib; sourceTree = "<group>"; };
7E0DC236247163C7003AA589 /* AppleScriptPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleScriptPreview.swift; sourceTree = "<group>"; };
7E1B16902455D8DB00E2B84D /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
7E1B16912455D93E00E2B84D /* HTMLRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTMLRenderer.swift; sourceTree = "<group>"; };
7E1DC51E240E6CE300D0A061 /* PreviewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewVC.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -351,6 +353,7 @@
7E1DC52C240E9A3700D0A061 /* Previews */ = {
isa = PBXGroup;
children = (
7E0DC236247163C7003AA589 /* AppleScriptPreview.swift */,
7E1DC529240E6FDE00D0A061 /* CodePreview.swift */,
7EB7491824228549007265A4 /* JupyterPreview.swift */,
7E1DC520240E6D8000D0A061 /* MarkdownPreview.swift */,
Expand Down Expand Up @@ -868,6 +871,7 @@
7E413F802418DD6200CFBB1D /* TSVPreview.swift in Sources */,
7E1DC52A240E6FDE00D0A061 /* CodePreview.swift in Sources */,
7E022BED245253B3000EFCD3 /* OutlinePreviewVC.swift in Sources */,
7E0DC237247163C7003AA589 /* AppleScriptPreview.swift in Sources */,
7E9F0D7E24168870007F1008 /* Script.swift in Sources */,
7EB3648A244B665700D7F96F /* ZIPPreview.swift in Sources */,
7E9F0D7D24168870007F1008 /* Stylesheet.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- This is a comment
display alert "Alert!"
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http:https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.ScriptEditor.id.example-applescript</string>
<key>CFBundleName</key>
<string>Untitled</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>WindowState</key>
<dict>
<key>bundleDividerCollapsed</key>
<true/>
<key>bundlePositionOfDivider</key>
<real>0.0</real>
<key>dividerCollapsed</key>
<false/>
<key>eventLogLevel</key>
<integer>2</integer>
<key>name</key>
<string>ScriptWindowState</string>
<key>positionOfDivider</key>
<real>421</real>
<key>savedFrame</key>
<string>69 157 700 672 0 0 1440 877 </string>
<key>selectedTab</key>
<string>result</string>
</dict>
</dict>
</plist>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{\rtf1\ansi\ansicpg1252\cocoartf2512
\cocoatextscaling0\cocoaplatform0{\fonttbl}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
}
4 changes: 4 additions & 0 deletions GlanceTests/TestFiles/apple-script/example-jxa.applescript
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// This is a comment
const app = Application.currentApplication();
app.includeStandardAdditions = true;
app.displayAlert("Alert!");
Binary file added GlanceTests/TestFiles/apple-script/example-jxa.scpt
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http:https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.ScriptEditor.id.example-jxa</string>
<key>CFBundleName</key>
<string>example-jxa</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>WindowState</key>
<dict>
<key>bundleDividerCollapsed</key>
<true/>
<key>bundlePositionOfDivider</key>
<real>0.0</real>
<key>dividerCollapsed</key>
<false/>
<key>eventLogLevel</key>
<integer>2</integer>
<key>name</key>
<string>ScriptWindowState</string>
<key>positionOfDivider</key>
<real>395</real>
<key>savedFrame</key>
<string>69 157 700 672 0 0 1440 877 </string>
<key>selectedTab</key>
<string>result</string>
</dict>
</dict>
</plist>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{\rtf1\ansi\ansicpg1252\cocoartf2512
\cocoatextscaling0\cocoaplatform0{\fonttbl}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
}
6 changes: 3 additions & 3 deletions QLPlugin/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@
<string>com.adobe.actionscript</string>
<string>com.adobe.coldfusion</string>
<string>com.adobe.jsx</string>
<string>com.apple.applescript.script</string>
<string>com.apple.applescript.text</string>
<string>com.apple.applescript.script-bundle</string> <!-- .scptd (AppleScript bundle) -->
<string>com.apple.applescript.script</string> <!-- .scpt (AppleScript binary) -->
<string>com.apple.applescript.text</string> <!-- .applescript (AppleScript text file) -->
<string>com.apple.property-list</string> <!-- .plist -->
<string>com.apple.rez-source</string>
<string>com.apple.xcode.entitlements-property-list</string> <!-- .entitlements -->
Expand Down Expand Up @@ -109,7 +110,6 @@
<string>dyn.ah62d4rv4ge81g6pq</string> <!-- .sql -->
<string>dyn.ah62d4rv4ge81k55rru</string> <!-- .toml -->
<string>dyn.ah62d4rv4ge81k652</string> <!-- .tsx -->
<string>org.applescript.source</string>
<string>org.arduino.ino-source</string>
<string>org.arduino.source</string>
<string>org.asm.source</string>
Expand Down
2 changes: 2 additions & 0 deletions QLPlugin/Views/PreviewVCFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import Foundation
class PreviewVCFactory {
static func getPreviewInitializer(fileURL: URL) -> Preview.Type? {
switch fileURL.pathExtension.lowercased() {
case "applescript", "scpt", "scptd":
return AppleScriptPreview.self
case "gz":
// `gzip` is only supported for tarballs
return fileURL.path.hasSuffix(".tar.gz") ? TARPreview.self : nil
Expand Down
25 changes: 25 additions & 0 deletions QLPlugin/Views/Previews/AppleScriptPreview.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import SwiftExec

/// View controller for previewing AppleScript files:
///
/// - `.applescript`: AppleScript text file (can be read directly)
/// - `.scpt`: AppleScript binary (needs to be decompiled)
/// - `.scptd`: AppleScript bundle (includes a binary, which needs to be decompiled)
///
/// The class extends `CodePreview` so syntax highlighting is applied after the script's content has
/// been determined.
///
// TODO: Scripts can also be written in JavaScript (JXA). This language needs to be detected and
// passed to Chroma to get correct syntax highlighting.
class AppleScriptPreview: CodePreview {
override func getSource(file: File) throws -> String {
if file.url.pathExtension == "scpt" || file.url.pathExtension == "scptd" {
let result = try! exec(
program: "/usr/bin/osadecompile",
arguments: [file.path]
)
return result.stdout ?? ""
}
return try! file.read()
}
}
8 changes: 7 additions & 1 deletion QLPlugin/Views/Previews/CodePreview.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ let fileExtensionLexers = [
"iml": "xml",
"plist": "xml",
"resolved": "json", // Swift Package Manager lockfile (Package.resolved)
"scpt": "applescript", // AppleScript binary
"scptd": "applescript", // AppleScript bundle
"sty": "tex", // LaTeX styles file
]

Expand All @@ -39,10 +41,14 @@ class CodePreview: Preview {
}
}

func getSource(file: File) throws -> String {
try! file.read()
}

private func getHTML(file: File) throws -> String {
var source: String
do {
source = try file.read()
source = try getSource(file: file)
} catch {
os_log(
"Could not read code file: %{public}s",
Expand Down

0 comments on commit 719be1d

Please sign in to comment.