From 3669b04955d57828de61e8bb95864c2492ea28c7 Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 13:30:36 +0100 Subject: [PATCH 01/40] add support for racket programming language --- CHANGELOG.md | 3 +++ README.md | 12 ++++++++- src/main.ts | 6 +++++ src/settings/Settings.ts | 4 +++ src/settings/SettingsTab.ts | 4 +++ src/settings/languageDisplayName.ts | 3 ++- src/settings/per-lang/makeRacketSettings.ts | 27 +++++++++++++++++++++ 7 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/settings/per-lang/makeRacketSettings.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e2b50874..a3195238 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +## [1.5.0] +### Added +- Support for Racket ## [1.4.0] ### Added diff --git a/README.md b/README.md index 622d338d..18d02e9e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The result is shown only after the execution is finished. It is not possible to ![Video that shows how the plugin works.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/execute_code_example.gif?raw=true) -The following [languages are supported](#supported-programming-languages): CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. +The following [languages are supported](#supported-programming-languages): CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Racket, Shell & Powershell. Python and Rust support embedded plots. All languages support ["magic" commands](#magic-commands) that help you to access paths in obsidian or show images in your notes. @@ -303,6 +303,16 @@ println("Hello, World!") ``` +
+Racket + +- Requirements: Racket is installed and the correct path is set in the settings. + +```racket +"Hello, world!" +``` +
+ Squiggle: For Squiggle support take a look at the [Obsidian Squiggle plugin](https://github.com/jqhoogland/obsidian-squiggle) by @jqhoogland. Support for the following is planned: diff --git a/src/main.ts b/src/main.ts index e9843adc..39f12109 100644 --- a/src/main.ts +++ b/src/main.ts @@ -330,6 +330,12 @@ export default class ExecuteCodePlugin extends Plugin { const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); this.runCodeInShell(transformedCode, out, button, this.settings.scalaPath, this.settings.scalaArgs, this.settings.scalaFileExtension, language, file); }); + } else if (language === "racket") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.racketPath, this.settings.racketArgs, this.settings.racketFileExtension, language, file); + }); } } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 6ad35c54..3a724aab 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -41,6 +41,10 @@ export interface ExecutorSettings { javaArgs: string, javaFileExtension: string, javaInject: string; + racketPath: string, + racketArgs: string, + racketFileExtension: string, + racketInject: string; maxPrologAnswers: number; prologInject: string; powershellPath: string; diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index de7a544a..810a2fb0 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -17,6 +17,7 @@ import makePythonSettings from "./per-lang/makePythonSettings"; import makeRSettings from "./per-lang/makeRSettings"; import makeRustSettings from "./per-lang/makeRustSettings"; import makeScalaSettings from "./per-lang/makeScalaSettings.js"; +import makeRacketSettings from "./per-lang/makeRacketSettings.js"; import makeShellSettings from "./per-lang/makeShellSettings"; import makeTsSettings from "./per-lang/makeTsSettings"; import {ExecutorSettings} from "./Settings"; @@ -175,6 +176,9 @@ export class SettingsTab extends PluginSettingTab { // ========== Scala =========== makeScalaSettings(this, this.makeContainerFor("scala")); + // ========== Racket =========== + makeRacketSettings(this, this.makeContainerFor("racket")); + this.focusContainer(this.plugin.settings.lastOpenLanguageTab || canonicalLanguages[0]); } diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index bdbbffca..9e20c9a1 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -18,5 +18,6 @@ export const DISPLAY_NAMES: Record = { rust: "Rust", shell: "Shell", ts: "Typescript", - scala: "Scala" + scala: "Scala", + racket: "Racket" } as const; \ No newline at end of file diff --git a/src/settings/per-lang/makeRacketSettings.ts b/src/settings/per-lang/makeRacketSettings.ts new file mode 100644 index 00000000..7a04f661 --- /dev/null +++ b/src/settings/per-lang/makeRacketSettings.ts @@ -0,0 +1,27 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'Racket Settings' }); + new Setting(containerEl) + .setName('racket path') + .setDesc("Path to your racket installation") + .addText(text => text + .setValue(tab.plugin.settings.tsPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.tsPath = sanitized; + console.log('racket path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('Racket arguments') + .addText(text => text + .setValue(tab.plugin.settings.tsArgs) + .onChange(async (value) => { + tab.plugin.settings.tsArgs = value; + console.log('Racket args set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "racket"); +} From 09dcb5a6aab6727cbb06b7c98290372f7ead102f Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 13:36:05 +0100 Subject: [PATCH 02/40] add racket to list of canonical language --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 39f12109..f15a330b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,7 +18,7 @@ import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", - "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala"] as const; + "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "racket"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; From 6b524c2613c1421c36b3a5617f21283361188e47 Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 14:20:33 +0100 Subject: [PATCH 03/40] fix racket settings and provide defaults --- src/settings/Settings.ts | 16 +++++++++++----- src/settings/per-lang/makeRacketSettings.ts | 8 ++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 3a724aab..c6da3e09 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -41,10 +41,6 @@ export interface ExecutorSettings { javaArgs: string, javaFileExtension: string, javaInject: string; - racketPath: string, - racketArgs: string, - racketFileExtension: string, - racketInject: string; maxPrologAnswers: number; prologInject: string; powershellPath: string; @@ -82,6 +78,10 @@ export interface ExecutorSettings { scalaArgs: string; scalaFileExtension: string; scalaInject: string; + racketPath: string; + racketArgs: string; + racketFileExtension: string; + racketInject: string; jsInteractive: boolean; tsInteractive: boolean; @@ -102,6 +102,7 @@ export interface ExecutorSettings { mathematicaInteractive: boolean; haskellInteractive: boolean; scalaInteractive: boolean; + racketInteractive: boolean; } @@ -183,6 +184,10 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { scalaArgs: "", scalaFileExtension: "scala", scalaInject: "", + racketPath: "racket", + racketArgs: "", + racketFileExtension: "rkt", + racketInject: "", jsInteractive: true, tsInteractive: false, @@ -202,5 +207,6 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { kotlinInteractive: false, mathematicaInteractive: false, haskellInteractive: false, - scalaInteractive: false + scalaInteractive: false, + racketInteractive: false, } diff --git a/src/settings/per-lang/makeRacketSettings.ts b/src/settings/per-lang/makeRacketSettings.ts index 7a04f661..0e00ba15 100644 --- a/src/settings/per-lang/makeRacketSettings.ts +++ b/src/settings/per-lang/makeRacketSettings.ts @@ -7,19 +7,19 @@ export default (tab: SettingsTab, containerEl: HTMLElement) => { .setName('racket path') .setDesc("Path to your racket installation") .addText(text => text - .setValue(tab.plugin.settings.tsPath) + .setValue(tab.plugin.settings.racketPath) .onChange(async (value) => { const sanitized = tab.sanitizePath(value); - tab.plugin.settings.tsPath = sanitized; + tab.plugin.settings.racketPath = sanitized; console.log('racket path set to: ' + sanitized); await tab.plugin.saveSettings(); })); new Setting(containerEl) .setName('Racket arguments') .addText(text => text - .setValue(tab.plugin.settings.tsArgs) + .setValue(tab.plugin.settings.racketArgs) .onChange(async (value) => { - tab.plugin.settings.tsArgs = value; + tab.plugin.settings.racketArgs = value; console.log('Racket args set to: ' + value); await tab.plugin.saveSettings(); })); From bd349f43bfcbef899392a9ee11ba673776937c47 Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 14:25:36 +0100 Subject: [PATCH 04/40] add required prefix for executing racket files --- src/settings/Settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index c6da3e09..edf6e556 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -187,7 +187,7 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { racketPath: "racket", racketArgs: "", racketFileExtension: "rkt", - racketInject: "", + racketInject: "#lang racket", jsInteractive: true, tsInteractive: false, From 595d2083d7ac0967dd19cef704ea1a8e377cfe1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Meireles?= Date: Sun, 13 Nov 2022 20:51:29 -0300 Subject: [PATCH 05/40] Add dart support --- CHANGELOG.md | 4 ++++ README.md | 10 ++++++++- src/main.ts | 9 +++++++- src/settings/Settings.ts | 8 +++++++ src/settings/SettingsTab.ts | 4 ++++ src/settings/languageDisplayName.ts | 3 ++- src/settings/per-lang/makeDartSettings.ts | 26 +++++++++++++++++++++++ 7 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/settings/per-lang/makeDartSettings.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e2b50874..36bd605f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +## [1.5.0] +### Added +- Support for Dart + ## [1.4.0] ### Added - Notebook mode for R (Thanks to @chlohal) diff --git a/README.md b/README.md index 622d338d..7852b54b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The result is shown only after the execution is finished. It is not possible to ![Video that shows how the plugin works.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/execute_code_example.gif?raw=true) -The following [languages are supported](#supported-programming-languages): CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. +The following [languages are supported](#supported-programming-languages): CPP, Dart, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. Python and Rust support embedded plots. All languages support ["magic" commands](#magic-commands) that help you to access paths in obsidian or show images in your notes. @@ -58,6 +58,14 @@ Console.WriteLine("Hello, World!"); ``` +
+```dart +void main() { + print("Hello World"); +} +``` +
+
Python diff --git a/src/main.ts b/src/main.ts index e9843adc..636b5f62 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,7 +18,7 @@ import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", - "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala"] as const; + "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "dart"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; @@ -304,6 +304,13 @@ export default class ExecuteCodePlugin extends Plugin { this.runCodeInShell(transformedCode, out, button, this.settings.luaPath, this.settings.luaArgs, "lua", language, file); }); + } else if (language === "dart") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.dartPath, this.settings.dartArgs, "dart", language, file); + }); + } else if (language === "cs") { button.addEventListener("click", async () => { button.className = runButtonDisabledClass; diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 6ad35c54..c5a15c45 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -18,6 +18,9 @@ export interface ExecutorSettings { luaPath: string; luaArgs: string; luaInject: string; + dartPath: string; + dartArgs: string; + dartInject: string; csPath: string; csArgs: string; csInject: string; @@ -83,6 +86,7 @@ export interface ExecutorSettings { tsInteractive: boolean; csInteractive: boolean; luaInteractive: boolean; + dartInteractive: boolean; pythonInteractive: boolean; cppInteractive: boolean; prologInteractive: boolean; @@ -119,6 +123,9 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { luaPath: "lua", luaArgs: "", luaInject: "", + dartPath: "dart", + dartArgs: "", + dartInject: "", csPath: "dotnet-script", csArgs: "", csInject: "", @@ -184,6 +191,7 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { tsInteractive: false, csInteractive: false, luaInteractive: false, + dartInteractive: false, pythonInteractive: true, cppInteractive: false, prologInteractive: false, diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index de7a544a..b4b222f6 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -10,6 +10,7 @@ import makeJavaSettings from "./per-lang/makeJavaSettings"; import makeJsSettings from "./per-lang/makeJsSettings"; import makeKotlinSettings from "./per-lang/makeKotlinSettings"; import makeLuaSettings from "./per-lang/makeLuaSettings"; +import makeDartSettings from "./per-lang/makeDartSettings"; import makeMathematicaSettings from "./per-lang/makeMathematicaSettings"; import makePowershellSettings from "./per-lang/makePowershellSettings"; import makePrologSettings from "./per-lang/makePrologSettings"; @@ -119,6 +120,9 @@ export class SettingsTab extends PluginSettingTab { // ========== Lua ========== makeLuaSettings(this, this.makeContainerFor("lua")); + // ========== Dart ========== + makeDartSettings(this, this.makeContainerFor("dart")); + // ========== CSharp ========== makeCsSettings(this, this.makeContainerFor("cs")); diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index bdbbffca..c81ddfe7 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -3,6 +3,7 @@ import { LanguageId } from "src/main"; export const DISPLAY_NAMES: Record = { cpp: "C++", cs: "C#", + dart: "Dart", go: "Golang", groovy: "Groovy", haskell: "Haskell", @@ -19,4 +20,4 @@ export const DISPLAY_NAMES: Record = { shell: "Shell", ts: "Typescript", scala: "Scala" -} as const; \ No newline at end of file +} as const; diff --git a/src/settings/per-lang/makeDartSettings.ts b/src/settings/per-lang/makeDartSettings.ts new file mode 100644 index 00000000..def8ef5a --- /dev/null +++ b/src/settings/per-lang/makeDartSettings.ts @@ -0,0 +1,26 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'Dart Settings' }); + new Setting(containerEl) + .setName('dart path') + .addText(text => text + .setValue(tab.plugin.settings.dartPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.dartPath = sanitized; + console.log('dart path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('Dart arguments') + .addText(text => text + .setValue(tab.plugin.settings.dartArgs) + .onChange(async (value) => { + tab.plugin.settings.dartArgs = value; + console.log('Dart args set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "dart"); +} From 51a08fa5b432ead5058bdcfd1b6fc1516852d0a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Meireles?= Date: Sun, 13 Nov 2022 22:46:49 -0300 Subject: [PATCH 06/40] Fix typo in readme file in dart summary. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7852b54b..772d01b8 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,8 @@ Console.WriteLine("Hello, World!");
+Dart + ```dart void main() { print("Hello World"); From f95dd0c6034d20602877ff0a68466b6a21d61cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Meireles?= Date: Sun, 13 Nov 2022 22:54:48 -0300 Subject: [PATCH 07/40] Add requirements note in readme file. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 772d01b8..39886f20 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ Console.WriteLine("Hello, World!");
Dart +- Requirements: dart sdk is installed and the correct path is set in the settings. + ```dart void main() { print("Hello World"); From 8736d1abf30afb3023832843f4fb349cde80b37e Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Tue, 15 Nov 2022 10:10:46 +0100 Subject: [PATCH 08/40] fix changelog version --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3195238..54fd08b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -## [1.5.0] +## [Unreleased] ### Added - Support for Racket From c7c8e7e1526df0ed7a6930019036611861f84a72 Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 13:30:36 +0100 Subject: [PATCH 09/40] add support for racket programming language --- CHANGELOG.md | 3 +++ README.md | 12 ++++++++- src/main.ts | 6 +++++ src/settings/Settings.ts | 4 +++ src/settings/SettingsTab.ts | 5 ++++ src/settings/languageDisplayName.ts | 3 ++- src/settings/per-lang/makeRacketSettings.ts | 27 +++++++++++++++++++++ 7 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/settings/per-lang/makeRacketSettings.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index b1338cbb..f99d99cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +## [1.5.0] +### Added +- Support for Racket ## [1.5.0] ### Added diff --git a/README.md b/README.md index d273fc53..b1698011 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The result is shown only after the execution is finished. It is not possible to ![Video that shows how the plugin works.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/execute_code_example.gif?raw=true) -The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. +The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Racket, Shell & Powershell. Python and Rust support embedded plots. All languages support ["magic" commands](#magic-commands) that help you to access paths in obsidian or show images in your notes. @@ -328,6 +328,16 @@ println("Hello, World!") ```
+
+Racket + +- Requirements: Racket is installed and the correct path is set in the settings. + +```racket +"Hello, world!" +``` +
+ Squiggle: For Squiggle support take a look at the [Obsidian Squiggle plugin](https://github.com/jqhoogland/obsidian-squiggle) by @jqhoogland. Support for the following is planned: diff --git a/src/main.ts b/src/main.ts index 12903c0b..adc08621 100644 --- a/src/main.ts +++ b/src/main.ts @@ -336,6 +336,12 @@ export default class ExecuteCodePlugin extends Plugin { const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); this.runCodeInShell(transformedCode, out, button, this.settings.clingPath, this.settings.clingArgs, "c", language, file); }) + } else if (language === "racket") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.racketPath, this.settings.racketArgs, this.settings.racketFileExtension, language, file); + }); } } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index f4cbfe7e..d6227521 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -41,6 +41,10 @@ export interface ExecutorSettings { javaArgs: string, javaFileExtension: string, javaInject: string; + racketPath: string, + racketArgs: string, + racketFileExtension: string, + racketInject: string; maxPrologAnswers: number; prologInject: string; powershellPath: string; diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 7f252c75..8f440d03 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -18,6 +18,7 @@ import makePythonSettings from "./per-lang/makePythonSettings"; import makeRSettings from "./per-lang/makeRSettings"; import makeRustSettings from "./per-lang/makeRustSettings"; import makeScalaSettings from "./per-lang/makeScalaSettings.js"; +import makeRacketSettings from "./per-lang/makeRacketSettings.js"; import makeShellSettings from "./per-lang/makeShellSettings"; import makeTsSettings from "./per-lang/makeTsSettings"; import {ExecutorSettings} from "./Settings"; @@ -179,6 +180,10 @@ export class SettingsTab extends PluginSettingTab { // ========== Scala =========== makeScalaSettings(this, this.makeContainerFor("scala")); + + // ========== Racket =========== + makeRacketSettings(this, this.makeContainerFor("racket")); + this.focusContainer(this.plugin.settings.lastOpenLanguageTab || canonicalLanguages[0]); } diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index f90dfbd5..edbe5bd5 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -19,5 +19,6 @@ export const DISPLAY_NAMES: Record = { shell: "Shell", ts: "Typescript", scala: "Scala", - c: "C" + racket: "Racket", + c: "C", } as const; \ No newline at end of file diff --git a/src/settings/per-lang/makeRacketSettings.ts b/src/settings/per-lang/makeRacketSettings.ts new file mode 100644 index 00000000..7a04f661 --- /dev/null +++ b/src/settings/per-lang/makeRacketSettings.ts @@ -0,0 +1,27 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'Racket Settings' }); + new Setting(containerEl) + .setName('racket path') + .setDesc("Path to your racket installation") + .addText(text => text + .setValue(tab.plugin.settings.tsPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.tsPath = sanitized; + console.log('racket path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('Racket arguments') + .addText(text => text + .setValue(tab.plugin.settings.tsArgs) + .onChange(async (value) => { + tab.plugin.settings.tsArgs = value; + console.log('Racket args set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "racket"); +} From e05022722486fe4fab3bd3be6c700459db2f1726 Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 13:36:05 +0100 Subject: [PATCH 10/40] add racket to list of canonical language --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index adc08621..ef88b930 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,7 +18,7 @@ import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", - "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "c"] as const; + "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "racket", "c"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; From a16807fa253de69c0e3afd45f664ad598cfe7b6a Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 14:20:33 +0100 Subject: [PATCH 11/40] fix racket settings and provide defaults --- src/settings/Settings.ts | 16 +++++++++++----- src/settings/per-lang/makeRacketSettings.ts | 8 ++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index d6227521..8cd7ba11 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -41,10 +41,6 @@ export interface ExecutorSettings { javaArgs: string, javaFileExtension: string, javaInject: string; - racketPath: string, - racketArgs: string, - racketFileExtension: string, - racketInject: string; maxPrologAnswers: number; prologInject: string; powershellPath: string; @@ -83,6 +79,10 @@ export interface ExecutorSettings { scalaArgs: string; scalaFileExtension: string; scalaInject: string; + racketPath: string; + racketArgs: string; + racketFileExtension: string; + racketInject: string; cArgs: string; cUseMain: boolean; cInject: string; @@ -106,6 +106,7 @@ export interface ExecutorSettings { mathematicaInteractive: boolean; haskellInteractive: boolean; scalaInteractive: boolean; + racketInteractive: boolean; cInteractive: boolean; } @@ -189,6 +190,10 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { scalaArgs: "", scalaFileExtension: "scala", scalaInject: "", + racketPath: "racket", + racketArgs: "", + racketFileExtension: "rkt", + racketInject: "", cArgs: "", cUseMain: true, cInject: "", @@ -212,5 +217,6 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { mathematicaInteractive: false, haskellInteractive: false, scalaInteractive: false, - cInteractive: false + cInteractive: false, + racketInteractive: false, } diff --git a/src/settings/per-lang/makeRacketSettings.ts b/src/settings/per-lang/makeRacketSettings.ts index 7a04f661..0e00ba15 100644 --- a/src/settings/per-lang/makeRacketSettings.ts +++ b/src/settings/per-lang/makeRacketSettings.ts @@ -7,19 +7,19 @@ export default (tab: SettingsTab, containerEl: HTMLElement) => { .setName('racket path') .setDesc("Path to your racket installation") .addText(text => text - .setValue(tab.plugin.settings.tsPath) + .setValue(tab.plugin.settings.racketPath) .onChange(async (value) => { const sanitized = tab.sanitizePath(value); - tab.plugin.settings.tsPath = sanitized; + tab.plugin.settings.racketPath = sanitized; console.log('racket path set to: ' + sanitized); await tab.plugin.saveSettings(); })); new Setting(containerEl) .setName('Racket arguments') .addText(text => text - .setValue(tab.plugin.settings.tsArgs) + .setValue(tab.plugin.settings.racketArgs) .onChange(async (value) => { - tab.plugin.settings.tsArgs = value; + tab.plugin.settings.racketArgs = value; console.log('Racket args set to: ' + value); await tab.plugin.saveSettings(); })); From f59644f71ee456de843e5c9ad86b8d52fe0e20ce Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Mon, 7 Nov 2022 14:25:36 +0100 Subject: [PATCH 12/40] add required prefix for executing racket files --- src/settings/Settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 8cd7ba11..242a2a51 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -193,7 +193,7 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { racketPath: "racket", racketArgs: "", racketFileExtension: "rkt", - racketInject: "", + racketInject: "#lang racket", cArgs: "", cUseMain: true, cInject: "", From 7349e1be988e3d60c9878dce25a849b15d48c29b Mon Sep 17 00:00:00 2001 From: Marvin Janssen Date: Tue, 15 Nov 2022 10:10:46 +0100 Subject: [PATCH 13/40] fix changelog version --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f99d99cd..11a8572f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -## [1.5.0] +## [Unreleased] ### Added - Support for Racket From 863b011b4c3eaa198143a2aba325f3a383a810df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Meireles=20Barbosa?= Date: Tue, 15 Nov 2022 13:23:32 -0300 Subject: [PATCH 14/40] format dart snippet Tab is 2 spaces. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cca93c57..df4447b9 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Console.WriteLine("Hello, World!"); ```dart void main() { - print("Hello World"); + print("Hello World"); } ```
From abec36e7d5493ac24f5524afc5f87582e613dd2b Mon Sep 17 00:00:00 2001 From: chlohal Date: Mon, 21 Nov 2022 09:21:50 -0500 Subject: [PATCH 15/40] feat: add f# support --- src/main.ts | 8 ++++- src/settings/Settings.ts | 12 ++++++- src/settings/SettingsTab.ts | 4 +++ src/settings/languageDisplayName.ts | 3 +- src/settings/per-lang/makeFSharpSettings.ts | 37 +++++++++++++++++++++ 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/settings/per-lang/makeFSharpSettings.ts diff --git a/src/main.ts b/src/main.ts index e9843adc..c742863d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,7 +18,7 @@ import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", - "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala"] as const; + "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "fsharp"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; @@ -330,6 +330,12 @@ export default class ExecuteCodePlugin extends Plugin { const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); this.runCodeInShell(transformedCode, out, button, this.settings.scalaPath, this.settings.scalaArgs, this.settings.scalaFileExtension, language, file); }); + } else if(language === "fsharp") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.fsharpPath, this.settings.fsharpArgs, this.settings.fsharpFileExtension, language, file); + }); } } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 6ad35c54..828508af 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -78,6 +78,10 @@ export interface ExecutorSettings { scalaArgs: string; scalaFileExtension: string; scalaInject: string; + fsharpPath: string; + fsharpArgs: string; + fsharpInject: ""; + fsharpFileExtension: string; jsInteractive: boolean; tsInteractive: boolean; @@ -98,6 +102,7 @@ export interface ExecutorSettings { mathematicaInteractive: boolean; haskellInteractive: boolean; scalaInteractive: boolean; + fsharpInteractive: boolean; } @@ -179,6 +184,10 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { scalaArgs: "", scalaFileExtension: "scala", scalaInject: "", + fsharpPath: "dotnet", + fsharpArgs: "", + fsharpInject: "", + fsharpFileExtension: "fsx", jsInteractive: true, tsInteractive: false, @@ -198,5 +207,6 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { kotlinInteractive: false, mathematicaInteractive: false, haskellInteractive: false, - scalaInteractive: false + scalaInteractive: false, + fsharpInteractive: false, } diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index de7a544a..4d7b5d5c 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -3,6 +3,7 @@ import ExecuteCodePlugin, {canonicalLanguages, LanguageId} from "src/main"; import { DISPLAY_NAMES } from "./languageDisplayName"; import makeCppSettings from "./per-lang/makeCppSettings"; import makeCsSettings from "./per-lang/makeCsSettings"; +import makeFSharpSettings from "./per-lang/makeFSharpSettings"; import makeGoSettings from "./per-lang/makeGoSettings"; import makeGroovySettings from "./per-lang/makeGroovySettings"; import makeHaskellSettings from "./per-lang/makeHaskellSettings"; @@ -174,6 +175,9 @@ export class SettingsTab extends PluginSettingTab { // ========== Scala =========== makeScalaSettings(this, this.makeContainerFor("scala")); + + // ========== FSharp =========== + makeFSharpSettings(this, this.makeContainerFor("fsharp")); this.focusContainer(this.plugin.settings.lastOpenLanguageTab || canonicalLanguages[0]); } diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index bdbbffca..70eddca8 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -18,5 +18,6 @@ export const DISPLAY_NAMES: Record = { rust: "Rust", shell: "Shell", ts: "Typescript", - scala: "Scala" + scala: "Scala", + fsharp: "F#" } as const; \ No newline at end of file diff --git a/src/settings/per-lang/makeFSharpSettings.ts b/src/settings/per-lang/makeFSharpSettings.ts new file mode 100644 index 00000000..b45f4205 --- /dev/null +++ b/src/settings/per-lang/makeFSharpSettings.ts @@ -0,0 +1,37 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'F# Settings' }); + new Setting(containerEl) + .setName('F# path') + .setDesc('The path to dotnet.') + .addText(text => text + .setValue(tab.plugin.settings.fsharpPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.fsharpPath = sanitized; + console.log('F# path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('F# arguments') + .addText(text => text + .setValue(tab.plugin.settings.fsharpArgs) + .onChange(async (value) => { + tab.plugin.settings.fsharpArgs = value; + console.log('F# args set to: ' + value); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('F# file extension') + .setDesc('Changes the file extension for generated F# scripts.') + .addText(text => text + .setValue(tab.plugin.settings.fsharpFileExtension) + .onChange(async (value) => { + tab.plugin.settings.fsharpFileExtension = value; + console.log('F# file extension set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "fsharp"); +} \ No newline at end of file From 87b0d3703d61b8df97a9f941b04dd658004aa801 Mon Sep 17 00:00:00 2001 From: chlohal Date: Mon, 21 Nov 2022 09:33:56 -0500 Subject: [PATCH 16/40] fix: add executor for f# to append fsi argument --- src/ExecutorContainer.ts | 4 +++- src/executors/FSharpExecutor.ts | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/executors/FSharpExecutor.ts diff --git a/src/ExecutorContainer.ts b/src/ExecutorContainer.ts index 880829d3..59698969 100644 --- a/src/ExecutorContainer.ts +++ b/src/ExecutorContainer.ts @@ -8,6 +8,7 @@ import CppExecutor from './executors/CppExecutor'; import ExecuteCodePlugin, {LanguageId} from "./main"; import RExecutor from "./executors/RExecutor.js"; import CExecutor from "./executors/CExecutor"; +import FSharpExecutor from "./executors/FSharpExecutor"; const interactiveExecutors: Partial> = { "js": NodeJSExecutor, @@ -18,7 +19,8 @@ const interactiveExecutors: Partial> = { const nonInteractiveExecutors: Partial> = { "prolog": PrologExecutor, "cpp": CppExecutor, - "c": CExecutor + "c": CExecutor, + "fsharp": FSharpExecutor }; export default class ExecutorContainer extends EventEmitter implements Iterable { diff --git a/src/executors/FSharpExecutor.ts b/src/executors/FSharpExecutor.ts new file mode 100644 index 00000000..7438904b --- /dev/null +++ b/src/executors/FSharpExecutor.ts @@ -0,0 +1,13 @@ +import NonInteractiveCodeExecutor from './NonInteractiveCodeExecutor'; +import type {Outputter} from "src/Outputter"; +import type {ExecutorSettings} from "src/settings/Settings"; + +export default class FSharpExecutor extends NonInteractiveCodeExecutor { + constructor(settings: ExecutorSettings, file: string) { + super(settings, false, file, "fsharp"); + } + + override run(codeBlockContent: string, outputter: Outputter, cmd: string, args: string, ext: string) { + return super.run(codeBlockContent, outputter, cmd, `fsi ${args}`, "cpp"); + } +} From 83ed3f97050674cfac37a0f70abcd10468cbac7b Mon Sep 17 00:00:00 2001 From: latenitecoding Date: Mon, 28 Nov 2022 18:35:51 -0600 Subject: [PATCH 17/40] adds (basic, non-interactive) Lean support --- README.md | 15 ++++++++++++- src/main.ts | 9 +++++++- src/settings/Settings.ts | 8 +++++++ src/settings/SettingsTab.ts | 4 ++++ src/settings/languageDisplayName.ts | 3 ++- src/settings/per-lang/makeLeanSettings.ts | 26 +++++++++++++++++++++++ 6 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/settings/per-lang/makeLeanSettings.ts diff --git a/README.md b/README.md index d273fc53..1f1a0470 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The result is shown only after the execution is finished. It is not possible to ![Video that shows how the plugin works.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/execute_code_example.gif?raw=true) -The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. +The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lean, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. Python and Rust support embedded plots. All languages support ["magic" commands](#magic-commands) that help you to access paths in obsidian or show images in your notes. @@ -134,6 +134,19 @@ print('Hello, World!') ``` +
+Lean + +- Requirements: install lean and config lean path. + +```lean +def main : IO Unit := + IO.println s!"Hello, World!" + +#eval main +``` +
+
C++ diff --git a/src/main.ts b/src/main.ts index 12903c0b..1712f9de 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ import ExecutorManagerView, { import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; -export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", +export const canonicalLanguages = ["js", "ts", "cs", "lean", "lua", "python", "cpp", "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "c"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; @@ -297,6 +297,13 @@ export default class ExecuteCodePlugin extends Plugin { this.runCodeInShell(transformedCode, out, button, this.settings.tsPath, this.settings.tsArgs, "ts", language, file); }); + } else if (language === "lean") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.leanPath, this.settings.leanArgs, "lean", language, file); + }); + } else if (language === "lua") { button.addEventListener("click", async () => { button.className = runButtonDisabledClass; diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index f4cbfe7e..7614df40 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -15,6 +15,9 @@ export interface ExecutorSettings { tsPath: string; tsArgs: string; tsInject: string; + leanPath: string; + leanArgs: string; + leanInject: string; luaPath: string; luaArgs: string; luaInject: string; @@ -86,6 +89,7 @@ export interface ExecutorSettings { jsInteractive: boolean; tsInteractive: boolean; csInteractive: boolean; + leanInteractive: boolean; luaInteractive: boolean; pythonInteractive: boolean; cppInteractive: boolean; @@ -121,6 +125,9 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { tsPath: "ts-node", tsArgs: "", tsInject: "", + leanPath: "lean", + leanArgs: "", + leanInject: "", luaPath: "lua", luaArgs: "", luaInject: "", @@ -192,6 +199,7 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { jsInteractive: true, tsInteractive: false, csInteractive: false, + leanInteractive: false, luaInteractive: false, pythonInteractive: true, cppInteractive: false, diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 7f252c75..0c3fe160 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -10,6 +10,7 @@ import makeHaskellSettings from "./per-lang/makeHaskellSettings"; import makeJavaSettings from "./per-lang/makeJavaSettings"; import makeJsSettings from "./per-lang/makeJsSettings"; import makeKotlinSettings from "./per-lang/makeKotlinSettings"; +import makeLeanSettings from "./per-lang/makeLeanSettings"; import makeLuaSettings from "./per-lang/makeLuaSettings"; import makeMathematicaSettings from "./per-lang/makeMathematicaSettings"; import makePowershellSettings from "./per-lang/makePowershellSettings"; @@ -117,6 +118,9 @@ export class SettingsTab extends PluginSettingTab { // ========== TypeScript ========== makeTsSettings(this, this.makeContainerFor("ts")); + // ========== Lean ========== + makeLeanSettings(this, this.makeContainerFor("lean")); + // ========== Lua ========== makeLuaSettings(this, this.makeContainerFor("lua")); diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index f90dfbd5..6e776f48 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -9,6 +9,7 @@ export const DISPLAY_NAMES: Record = { java: "Java", js: "Javascript", kotlin: "Kotlin", + lean: "Lean", lua: "Lua", mathematica: "Mathematica", powershell: "Powershell", @@ -20,4 +21,4 @@ export const DISPLAY_NAMES: Record = { ts: "Typescript", scala: "Scala", c: "C" -} as const; \ No newline at end of file +} as const; diff --git a/src/settings/per-lang/makeLeanSettings.ts b/src/settings/per-lang/makeLeanSettings.ts new file mode 100644 index 00000000..e1d8101a --- /dev/null +++ b/src/settings/per-lang/makeLeanSettings.ts @@ -0,0 +1,26 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'Lean Settings' }); + new Setting(containerEl) + .setName('lean path') + .addText(text => text + .setValue(tab.plugin.settings.leanPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.leanPath = sanitized; + console.log('lean path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('Lean arguments') + .addText(text => text + .setValue(tab.plugin.settings.leanArgs) + .onChange(async (value) => { + tab.plugin.settings.leanArgs = value; + console.log('Lean args set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "lean"); +} From b1b9d922517e99cc9f194b4697de6e3ed66e87d1 Mon Sep 17 00:00:00 2001 From: chlohal Date: Sun, 4 Dec 2022 15:22:36 -0500 Subject: [PATCH 18/40] feat: add a magic command for light/dark theme --- src/Vault.ts | 3 +++ src/transforms/Magic.ts | 11 +++++++++++ src/transforms/TransformCode.ts | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Vault.ts b/src/Vault.ts index c50d3e87..f2d2264d 100644 --- a/src/Vault.ts +++ b/src/Vault.ts @@ -21,10 +21,13 @@ export function getVaultVariables(app: App) { const fileName = activeView.file.name const filePath = activeView.file.path + const theme = document.body.classList.contains("theme-light") ? "light" : "dark"; + return { vaultPath: vaultPath, folder: folder, fileName: fileName, filePath: filePath, + theme: theme } } diff --git a/src/transforms/Magic.ts b/src/transforms/Magic.ts index c17d63b3..e6b8ed34 100644 --- a/src/transforms/Magic.ts +++ b/src/transforms/Magic.ts @@ -19,6 +19,7 @@ const HTML_REGEX = /@html\((?[^)]+)\)/g; const VAULT_REGEX = /@vault/g const CURRENT_NOTE_REGEX = /@note/g; const NOTE_TITLE_REGEX = /@title/g; +const COLOR_THEME_REGEX = /@theme/g; // Regex that are only used by one language. const PYTHON_PLOT_REGEX = /^(plt|matplotlib.pyplot|pyplot)\.show\(\)/gm; @@ -63,6 +64,16 @@ export function insertNoteTitle(source: string, noteTitle: string): string { return source.replace(NOTE_TITLE_REGEX, `"${t}"`); } +/** + * Parses the source code for the @theme command and replaces it with the colour theme. + * + * @param source The source code to parse. + * @param noteTitle The current colour theme. + * @returns The transformed source code. + */ +export function insertColorTheme(source: string, theme: string): string { + return source.replace(COLOR_THEME_REGEX, `"${theme}"`); +} /** * Add the @show command to python. @show is only supported in python and javascript. diff --git a/src/transforms/TransformCode.ts b/src/transforms/TransformCode.ts index ad4377a1..c5cf527e 100644 --- a/src/transforms/TransformCode.ts +++ b/src/transforms/TransformCode.ts @@ -1,4 +1,4 @@ -import {insertNotePath, insertNoteTitle, insertVaultPath} from "./Magic"; +import {insertColorTheme, insertNotePath, insertNoteTitle, insertVaultPath} from "./Magic"; import {getVaultVariables} from "src/Vault"; import {canonicalLanguages} from 'src/main'; import type {App} from "obsidian"; @@ -42,6 +42,7 @@ export function transformMagicCommands(app: App, srcCode: string) { ret = insertVaultPath(ret, vars.vaultPath); ret = insertNotePath(ret, vars.filePath); ret = insertNoteTitle(ret, vars.fileName); + ret = insertColorTheme(ret, vars.theme); } else { console.warn(`Could not load all Vault variables! ${vars}`) } From e3d21479b70f60055565badac7ec733d79b8d43a Mon Sep 17 00:00:00 2001 From: chlohal Date: Sun, 4 Dec 2022 15:23:03 -0500 Subject: [PATCH 19/40] add documentation for @theme magic --- README.md | 1 + src/transforms/Magic.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index d273fc53..f295e556 100644 --- a/README.md +++ b/README.md @@ -350,6 +350,7 @@ The following magic commands are supported: - `@show(ImagePath, Width, Height)`: Displays an image at the given path in the note. - `@show(ImagePath, Width, Height, Alignment[center|left|right])`: Displays an image at the given path in the note. - `@html(HtmlSource)`: Displays HTML in the note +- `@theme`: Inserts the color theme; either `"light"` or `"dark"`. For use with images, inline plots, and `@html()`. (`@show(...)` and `@html(...)` are only supported for JavaScript and Python yet.) diff --git a/src/transforms/Magic.ts b/src/transforms/Magic.ts index e6b8ed34..2b967ce1 100644 --- a/src/transforms/Magic.ts +++ b/src/transforms/Magic.ts @@ -8,6 +8,7 @@ * - `@vault`: Inserts the vault path as string. * - `@note`: Inserts the note path as string. * - `@title`: Inserts the note title as string. + * - `@theme`: Inserts the color theme; either `"light"` or `"dark"`. For use with images, inline plots, and `@html()`. */ import * as os from "os"; From 77e553925015ae05357a9111bdd1cf694bafe342 Mon Sep 17 00:00:00 2001 From: Zanets Date: Thu, 22 Dec 2022 01:32:58 +0800 Subject: [PATCH 20/40] fix: WSL always activate once turned on --- src/main.ts | 3 + yarn.lock | 575 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 578 insertions(+) create mode 100644 yarn.lock diff --git a/src/main.ts b/src/main.ts index 12903c0b..28aed7f3 100644 --- a/src/main.ts +++ b/src/main.ts @@ -119,6 +119,9 @@ export default class ExecuteCodePlugin extends Plugin { */ async loadSettings() { this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + if (process.platform !== "win32") { + this.settings.wslMode = false; + } } /** diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..c2fbf03b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,575 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@esbuild/android-arm@0.15.8": + version "0.15.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.8.tgz#52b094c98e415ec72fab39827c12f2051ac9c550" + integrity sha512-CyEWALmn+no/lbgbAJsbuuhT8s2J19EJGHkeyAwjbFJMrj80KJ9zuYsoAvidPTU7BgBf87r/sgae8Tw0dbOc4Q== + dependencies: + esbuild-wasm "0.15.8" + +"@esbuild/linux-loong64@0.15.8": + version "0.15.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.8.tgz#d64575fc46bf4eb689352aa9f8a139271b6e1647" + integrity sha512-pE5RQsOTSERCtfZdfCT25wzo7dfhOSlhAXcsZmuvRYhendOv7djcdvtINdnDp2DAjP17WXlBB4nBO6sHLczmsg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@types/codemirror@0.0.108": + version "0.0.108" + resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.108.tgz#e640422b666bf49251b384c390cdeb2362585bde" + integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== + dependencies: + "@types/tern" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@^18.7.18": + version "18.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.17.tgz#5c009e1d9c38f4a2a9d45c0b0c493fe6cdb4bcb5" + integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/tern@*": + version "0.23.4" + resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" + integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== + dependencies: + "@types/estree" "*" + +"@typescript-eslint/eslint-plugin@^5.38.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.0.tgz#dadb79df3b0499699b155839fd6792f16897d910" + integrity sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ== + dependencies: + "@typescript-eslint/scope-manager" "5.47.0" + "@typescript-eslint/type-utils" "5.47.0" + "@typescript-eslint/utils" "5.47.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.38.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.47.0.tgz#62e83de93499bf4b500528f74bf2e0554e3a6c8d" + integrity sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw== + dependencies: + "@typescript-eslint/scope-manager" "5.47.0" + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/typescript-estree" "5.47.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz#f58144a6b0ff58b996f92172c488813aee9b09df" + integrity sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw== + dependencies: + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/visitor-keys" "5.47.0" + +"@typescript-eslint/type-utils@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.47.0.tgz#2b440979c574e317d3473225ae781f292c99e55d" + integrity sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg== + dependencies: + "@typescript-eslint/typescript-estree" "5.47.0" + "@typescript-eslint/utils" "5.47.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.47.0.tgz#67490def406eaa023dbbd8da42ee0d0c9b5229d3" + integrity sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg== + +"@typescript-eslint/typescript-estree@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz#ed971a11c5c928646d6ba7fc9dfdd6e997649aca" + integrity sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q== + dependencies: + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/visitor-keys" "5.47.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.47.0.tgz#b5005f7d2696769a1fdc1e00897005a25b3a0ec7" + integrity sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.47.0" + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/typescript-estree" "5.47.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz#4aca4efbdf6209c154df1f7599852d571b80bb45" + integrity sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg== + dependencies: + "@typescript-eslint/types" "5.47.0" + eslint-visitor-keys "^3.3.0" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +esbuild-android-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.8.tgz#625863e705d4ed32a3b4c0b997dbf9454d50a455" + integrity sha512-bVh8FIKOolF7/d4AMzt7xHlL0Ljr+mYKSHI39TJWDkybVWHdn6+4ODL3xZGHOxPpdRpitemXA1WwMKYBsw8dGw== + dependencies: + esbuild-wasm "0.15.8" + +esbuild-android-arm64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.8.tgz#cd62afe08652ac146014386d3adbe7a9d33db1b0" + integrity sha512-ReAMDAHuo0H1h9LxRabI6gwYPn8k6WiUeyxuMvx17yTrJO+SCnIfNc/TSPFvDwtK9MiyiKG/2dBYHouT/M0BXQ== + +esbuild-darwin-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.8.tgz#eb668dc973165f85aefecdca8aa60231acb2f705" + integrity sha512-KaKcGfJ+yto7Fo5gAj3xwxHMd1fBIKatpCHK8znTJLVv+9+NN2/tIPBqA4w5rBwjX0UqXDeIE2v1xJP+nGEXgA== + +esbuild-darwin-arm64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.8.tgz#91c110daa46074fdfc18f411247ca0d1228aacc3" + integrity sha512-8tjEaBgAKnXCkP7bhEJmEqdG9HEV6oLkF36BrMzpfW2rgaw0c48Zrxe+9RlfeGvs6gDF4w+agXyTjikzsS3izw== + +esbuild-freebsd-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.8.tgz#22270945a9bf9107c340eb73922e122bbe84f8ad" + integrity sha512-jaxcsGHYzn2L0/lffON2WfH4Nc+d/EwozVTP5K2v016zxMb5UQMhLoJzvLgBqHT1SG0B/mO+a+THnJCMVg15zw== + +esbuild-freebsd-arm64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.8.tgz#0efe2741fbcaa2cfd31b9f94bd3ca7385b68c469" + integrity sha512-2xp2UlljMvX8HExtcg7VHaeQk8OBU0CSl1j18B5CcZmSDkLF9p3utuMXIopG3a08fr9Hv+Dz6+seSXUow/G51w== + +esbuild-linux-32@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.8.tgz#6fc98659105da5c0d1fedfce3b7b9fa24ebee0d4" + integrity sha512-9u1E54BRz1FQMl86iaHK146+4ID2KYNxL3trLZT4QLLx3M7Q9n4lGG3lrzqUatGR2cKy8c33b0iaCzsItZWkFg== + +esbuild-linux-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.8.tgz#8e738c926d145cdd4e9bcb2febc96d89dc27dc09" + integrity sha512-4HxrsN9eUzJXdVGMTYA5Xler82FuZUu21bXKN42zcLHHNKCAMPUzD62I+GwDhsdgUBAUj0tRXDdsQHgaP6v0HA== + +esbuild-linux-arm64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.8.tgz#a12675e5a56e8ef08dea49da8eed51a87b0e60d6" + integrity sha512-1OCm7Aq0tEJT70PbxmHSGYDLYP8DKH8r4Nk7/XbVzWaduo9beCjGBB+tGZIHK6DdTQ3h00/4Tb/70YMH/bOtKg== + +esbuild-linux-arm@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.8.tgz#6424da1e8a3ece78681ebee4a70477b40c36ab35" + integrity sha512-7DVBU9SFjX4+vBwt8tHsUCbE6Vvl6y6FQWHAgyw1lybC5gULqn/WnjHYHN2/LJaZRsDBvxWT4msEgwLGq1Wd3Q== + +esbuild-linux-mips64le@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.8.tgz#5b39a16272cb4eaaad1f24938c057b19fb5a0ee5" + integrity sha512-yeFoNPVFPEzZvFYBfUQNG2TjGRaCyV1E27OcOg4LOtnGrxb2wA+mkW3luckyv1CEyd00mpAg7UdHx8nlx3ghgA== + +esbuild-linux-ppc64le@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.8.tgz#98ea8cfae8227180b45b2d952b2cbb072900944f" + integrity sha512-CEyMMUUNabXibw8OSNmBXhOIGhnjNVl5Lpseiuf00iKN0V47oqDrbo4dsHz1wH62m49AR8iG8wpDlTqfYgKbtg== + +esbuild-linux-riscv64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.8.tgz#6334607025eb449d8dd402d7810721dc15a6210f" + integrity sha512-OCGSOaspMUjexSCU8ZiA0UnV/NiRU+s2vIfEcAQWQ6u32R+2luyfh/4ZaY6jFbylJE07Esc/yRvb9Q5fXuClXA== + +esbuild-linux-s390x@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.8.tgz#874f1a3507c32cce1d2ce0d2f28ac1496c094eab" + integrity sha512-RHdpdfxRTSrZXZJlFSLazFU4YwXLB5Rgf6Zr5rffqSsO4y9JybgtKO38bFwxZNlDXliYISXN/YROKrG9s7mZQA== + +esbuild-netbsd-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.8.tgz#2e03d87ed811400d5d1fa8c7629b9fd97a574231" + integrity sha512-VolFFRatBH09T5QMWhiohAWCOien1R1Uz9K0BRVVTBgBaVBt7eArsXTKxVhUgRf2vwu2c2SXkuP0r7HLG0eozw== + +esbuild-openbsd-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.8.tgz#8fdbc6399563ac61ff546449e2226a2b1477216c" + integrity sha512-HTAPlg+n4kUeE/isQxlCfsOz0xJGNoT5LJ9oYZWFKABfVf4Ycu7Zlf5ITgOnrdheTkz8JeL/gISIOCFAoOXrSA== + +esbuild-sunos-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.8.tgz#db657b5c09c0c0161d67ddafca1b710a2e7ce96b" + integrity sha512-qMP/jR/FzcIOwKj+W+Lb+8Cfr8GZHbHUJxAPi7DUhNZMQ/6y7sOgRzlOSpRrbbUntrRZh0MqOyDhJ3Gpo6L1QA== + +esbuild-wasm@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.15.8.tgz#60fb8c5dc1a5538421857a2fa5fbb9eab908dcbb" + integrity sha512-Y7uCl5RNO4URjlemjdx++ukVHEMt5s5AfMWYUnMiK4Sry+pPCvQIctzXq6r6FKCyGKjX6/NGMCqR2OX6aLxj0w== + +esbuild-windows-32@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.8.tgz#bbb9fe20a8b6bba4428642cacf45a0fb7b2f3783" + integrity sha512-RKR1QHh4iWzjUhkP8Yqi75PPz/KS+b8zw3wUrzw6oAkj+iU5Qtyj61ZDaSG3Qf2vc6hTIUiPqVTqBH0NpXFNwg== + +esbuild-windows-64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.8.tgz#cedee65505209c8d371d7228b60785c08f43e04d" + integrity sha512-ag9ptYrsizgsR+PQE8QKeMqnosLvAMonQREpLw4evA4FFgOBMLEat/dY/9txbpozTw9eEOYyD3a4cE9yTu20FA== + +esbuild-windows-arm64@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.8.tgz#1d75235290bf23a111e6c0b03febd324af115cb1" + integrity sha512-dbpAb0VyPaUs9mgw65KRfQ9rqiWCHpNzrJusoPu+LpEoswosjt/tFxN7cd2l68AT4qWdBkzAjDLRon7uqMeWcg== + +esbuild@0.15.8: + version "0.15.8" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.8.tgz#75daa25d03f6dd9cc9355030eba2b93555b42cd4" + integrity sha512-Remsk2dmr1Ia65sU+QasE6svJbsHe62lzR+CnjpUvbZ+uSYo1SitiOWPRfZQkCu82YWZBBKXiD/j0i//XWMZ+Q== + optionalDependencies: + "@esbuild/android-arm" "0.15.8" + "@esbuild/linux-loong64" "0.15.8" + esbuild-android-64 "0.15.8" + esbuild-android-arm64 "0.15.8" + esbuild-darwin-64 "0.15.8" + esbuild-darwin-arm64 "0.15.8" + esbuild-freebsd-64 "0.15.8" + esbuild-freebsd-arm64 "0.15.8" + esbuild-linux-32 "0.15.8" + esbuild-linux-64 "0.15.8" + esbuild-linux-arm "0.15.8" + esbuild-linux-arm64 "0.15.8" + esbuild-linux-mips64le "0.15.8" + esbuild-linux-ppc64le "0.15.8" + esbuild-linux-riscv64 "0.15.8" + esbuild-linux-s390x "0.15.8" + esbuild-netbsd-64 "0.15.8" + esbuild-openbsd-64 "0.15.8" + esbuild-sunos-64 "0.15.8" + esbuild-windows-32 "0.15.8" + esbuild-windows-64 "0.15.8" + esbuild-windows-arm64 "0.15.8" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +g@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/g/-/g-2.0.1.tgz#0b5963ebd0ca70e3bc8c6766934a021821c8b857" + integrity sha512-Fi6Ng5fZ/ANLQ15H11hCe+09sgUoNvDEBevVgx3KoYOhsH5iLNPn54hx0jPZ+3oSWr+xajnp2Qau9VmPsc7hTA== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +json5@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" + integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +moment@2.29.4, moment@>=2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +obsidian@latest: + version "1.1.1" + resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-1.1.1.tgz#7cce6f19a6dd1cc5ec7e9f7dff8ea3ceacf2e2c3" + integrity sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg== + dependencies: + "@types/codemirror" "0.0.108" + moment "2.29.4" + +original-fs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/original-fs/-/original-fs-1.2.0.tgz#ea6c5117ee71fe6a9f809130de0590676370b5e8" + integrity sha512-IGo+qFumpIV65oDchJrqL0BOk9kr82fObnTesNJt8t3YgP6vfqcmRs0ofPzg3D9PKMeBHt7lrg1k/6L+oFdS8g== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readline-sync@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" + integrity sha512-mp5h1N39kuKbCRGebLPIKTBOhuDw55GaNg5S+K9TW9uDAS1wIHpGUc2YokdUMZJb8GqS49sWmWEDijaESYh0Hg== + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +tau-prolog@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/tau-prolog/-/tau-prolog-0.3.4.tgz#74be37aa3927ea99aba7cf9bad113e5889d909da" + integrity sha512-CEEa6C3IRPGN5GuXptBjLWOrF2x7aE06CP/p54oXJciBBfokkPom30uRNhKgbBAz1+AeuM1KtK2JMa0R3u+pRA== + dependencies: + readline-sync "1.4.9" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +typescript@^4.8.3: + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 6fc64b81f871f2b231c6e62d3071669a52044523 Mon Sep 17 00:00:00 2001 From: zanets Date: Thu, 22 Dec 2022 01:45:06 +0800 Subject: [PATCH 21/40] Delete yarn.lock --- yarn.lock | 575 ------------------------------------------------------ 1 file changed, 575 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index c2fbf03b..00000000 --- a/yarn.lock +++ /dev/null @@ -1,575 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/android-arm@0.15.8": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.8.tgz#52b094c98e415ec72fab39827c12f2051ac9c550" - integrity sha512-CyEWALmn+no/lbgbAJsbuuhT8s2J19EJGHkeyAwjbFJMrj80KJ9zuYsoAvidPTU7BgBf87r/sgae8Tw0dbOc4Q== - dependencies: - esbuild-wasm "0.15.8" - -"@esbuild/linux-loong64@0.15.8": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.8.tgz#d64575fc46bf4eb689352aa9f8a139271b6e1647" - integrity sha512-pE5RQsOTSERCtfZdfCT25wzo7dfhOSlhAXcsZmuvRYhendOv7djcdvtINdnDp2DAjP17WXlBB4nBO6sHLczmsg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@types/codemirror@0.0.108": - version "0.0.108" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.108.tgz#e640422b666bf49251b384c390cdeb2362585bde" - integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== - dependencies: - "@types/tern" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/node@^18.7.18": - version "18.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.17.tgz#5c009e1d9c38f4a2a9d45c0b0c493fe6cdb4bcb5" - integrity sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng== - -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== - -"@types/tern@*": - version "0.23.4" - resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" - integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== - dependencies: - "@types/estree" "*" - -"@typescript-eslint/eslint-plugin@^5.38.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.0.tgz#dadb79df3b0499699b155839fd6792f16897d910" - integrity sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ== - dependencies: - "@typescript-eslint/scope-manager" "5.47.0" - "@typescript-eslint/type-utils" "5.47.0" - "@typescript-eslint/utils" "5.47.0" - debug "^4.3.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.38.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.47.0.tgz#62e83de93499bf4b500528f74bf2e0554e3a6c8d" - integrity sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw== - dependencies: - "@typescript-eslint/scope-manager" "5.47.0" - "@typescript-eslint/types" "5.47.0" - "@typescript-eslint/typescript-estree" "5.47.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.47.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz#f58144a6b0ff58b996f92172c488813aee9b09df" - integrity sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw== - dependencies: - "@typescript-eslint/types" "5.47.0" - "@typescript-eslint/visitor-keys" "5.47.0" - -"@typescript-eslint/type-utils@5.47.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.47.0.tgz#2b440979c574e317d3473225ae781f292c99e55d" - integrity sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg== - dependencies: - "@typescript-eslint/typescript-estree" "5.47.0" - "@typescript-eslint/utils" "5.47.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.47.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.47.0.tgz#67490def406eaa023dbbd8da42ee0d0c9b5229d3" - integrity sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg== - -"@typescript-eslint/typescript-estree@5.47.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz#ed971a11c5c928646d6ba7fc9dfdd6e997649aca" - integrity sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q== - dependencies: - "@typescript-eslint/types" "5.47.0" - "@typescript-eslint/visitor-keys" "5.47.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.47.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.47.0.tgz#b5005f7d2696769a1fdc1e00897005a25b3a0ec7" - integrity sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw== - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.47.0" - "@typescript-eslint/types" "5.47.0" - "@typescript-eslint/typescript-estree" "5.47.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.47.0": - version "5.47.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz#4aca4efbdf6209c154df1f7599852d571b80bb45" - integrity sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg== - dependencies: - "@typescript-eslint/types" "5.47.0" - eslint-visitor-keys "^3.3.0" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -esbuild-android-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.8.tgz#625863e705d4ed32a3b4c0b997dbf9454d50a455" - integrity sha512-bVh8FIKOolF7/d4AMzt7xHlL0Ljr+mYKSHI39TJWDkybVWHdn6+4ODL3xZGHOxPpdRpitemXA1WwMKYBsw8dGw== - dependencies: - esbuild-wasm "0.15.8" - -esbuild-android-arm64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.8.tgz#cd62afe08652ac146014386d3adbe7a9d33db1b0" - integrity sha512-ReAMDAHuo0H1h9LxRabI6gwYPn8k6WiUeyxuMvx17yTrJO+SCnIfNc/TSPFvDwtK9MiyiKG/2dBYHouT/M0BXQ== - -esbuild-darwin-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.8.tgz#eb668dc973165f85aefecdca8aa60231acb2f705" - integrity sha512-KaKcGfJ+yto7Fo5gAj3xwxHMd1fBIKatpCHK8znTJLVv+9+NN2/tIPBqA4w5rBwjX0UqXDeIE2v1xJP+nGEXgA== - -esbuild-darwin-arm64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.8.tgz#91c110daa46074fdfc18f411247ca0d1228aacc3" - integrity sha512-8tjEaBgAKnXCkP7bhEJmEqdG9HEV6oLkF36BrMzpfW2rgaw0c48Zrxe+9RlfeGvs6gDF4w+agXyTjikzsS3izw== - -esbuild-freebsd-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.8.tgz#22270945a9bf9107c340eb73922e122bbe84f8ad" - integrity sha512-jaxcsGHYzn2L0/lffON2WfH4Nc+d/EwozVTP5K2v016zxMb5UQMhLoJzvLgBqHT1SG0B/mO+a+THnJCMVg15zw== - -esbuild-freebsd-arm64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.8.tgz#0efe2741fbcaa2cfd31b9f94bd3ca7385b68c469" - integrity sha512-2xp2UlljMvX8HExtcg7VHaeQk8OBU0CSl1j18B5CcZmSDkLF9p3utuMXIopG3a08fr9Hv+Dz6+seSXUow/G51w== - -esbuild-linux-32@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.8.tgz#6fc98659105da5c0d1fedfce3b7b9fa24ebee0d4" - integrity sha512-9u1E54BRz1FQMl86iaHK146+4ID2KYNxL3trLZT4QLLx3M7Q9n4lGG3lrzqUatGR2cKy8c33b0iaCzsItZWkFg== - -esbuild-linux-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.8.tgz#8e738c926d145cdd4e9bcb2febc96d89dc27dc09" - integrity sha512-4HxrsN9eUzJXdVGMTYA5Xler82FuZUu21bXKN42zcLHHNKCAMPUzD62I+GwDhsdgUBAUj0tRXDdsQHgaP6v0HA== - -esbuild-linux-arm64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.8.tgz#a12675e5a56e8ef08dea49da8eed51a87b0e60d6" - integrity sha512-1OCm7Aq0tEJT70PbxmHSGYDLYP8DKH8r4Nk7/XbVzWaduo9beCjGBB+tGZIHK6DdTQ3h00/4Tb/70YMH/bOtKg== - -esbuild-linux-arm@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.8.tgz#6424da1e8a3ece78681ebee4a70477b40c36ab35" - integrity sha512-7DVBU9SFjX4+vBwt8tHsUCbE6Vvl6y6FQWHAgyw1lybC5gULqn/WnjHYHN2/LJaZRsDBvxWT4msEgwLGq1Wd3Q== - -esbuild-linux-mips64le@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.8.tgz#5b39a16272cb4eaaad1f24938c057b19fb5a0ee5" - integrity sha512-yeFoNPVFPEzZvFYBfUQNG2TjGRaCyV1E27OcOg4LOtnGrxb2wA+mkW3luckyv1CEyd00mpAg7UdHx8nlx3ghgA== - -esbuild-linux-ppc64le@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.8.tgz#98ea8cfae8227180b45b2d952b2cbb072900944f" - integrity sha512-CEyMMUUNabXibw8OSNmBXhOIGhnjNVl5Lpseiuf00iKN0V47oqDrbo4dsHz1wH62m49AR8iG8wpDlTqfYgKbtg== - -esbuild-linux-riscv64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.8.tgz#6334607025eb449d8dd402d7810721dc15a6210f" - integrity sha512-OCGSOaspMUjexSCU8ZiA0UnV/NiRU+s2vIfEcAQWQ6u32R+2luyfh/4ZaY6jFbylJE07Esc/yRvb9Q5fXuClXA== - -esbuild-linux-s390x@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.8.tgz#874f1a3507c32cce1d2ce0d2f28ac1496c094eab" - integrity sha512-RHdpdfxRTSrZXZJlFSLazFU4YwXLB5Rgf6Zr5rffqSsO4y9JybgtKO38bFwxZNlDXliYISXN/YROKrG9s7mZQA== - -esbuild-netbsd-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.8.tgz#2e03d87ed811400d5d1fa8c7629b9fd97a574231" - integrity sha512-VolFFRatBH09T5QMWhiohAWCOien1R1Uz9K0BRVVTBgBaVBt7eArsXTKxVhUgRf2vwu2c2SXkuP0r7HLG0eozw== - -esbuild-openbsd-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.8.tgz#8fdbc6399563ac61ff546449e2226a2b1477216c" - integrity sha512-HTAPlg+n4kUeE/isQxlCfsOz0xJGNoT5LJ9oYZWFKABfVf4Ycu7Zlf5ITgOnrdheTkz8JeL/gISIOCFAoOXrSA== - -esbuild-sunos-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.8.tgz#db657b5c09c0c0161d67ddafca1b710a2e7ce96b" - integrity sha512-qMP/jR/FzcIOwKj+W+Lb+8Cfr8GZHbHUJxAPi7DUhNZMQ/6y7sOgRzlOSpRrbbUntrRZh0MqOyDhJ3Gpo6L1QA== - -esbuild-wasm@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.15.8.tgz#60fb8c5dc1a5538421857a2fa5fbb9eab908dcbb" - integrity sha512-Y7uCl5RNO4URjlemjdx++ukVHEMt5s5AfMWYUnMiK4Sry+pPCvQIctzXq6r6FKCyGKjX6/NGMCqR2OX6aLxj0w== - -esbuild-windows-32@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.8.tgz#bbb9fe20a8b6bba4428642cacf45a0fb7b2f3783" - integrity sha512-RKR1QHh4iWzjUhkP8Yqi75PPz/KS+b8zw3wUrzw6oAkj+iU5Qtyj61ZDaSG3Qf2vc6hTIUiPqVTqBH0NpXFNwg== - -esbuild-windows-64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.8.tgz#cedee65505209c8d371d7228b60785c08f43e04d" - integrity sha512-ag9ptYrsizgsR+PQE8QKeMqnosLvAMonQREpLw4evA4FFgOBMLEat/dY/9txbpozTw9eEOYyD3a4cE9yTu20FA== - -esbuild-windows-arm64@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.8.tgz#1d75235290bf23a111e6c0b03febd324af115cb1" - integrity sha512-dbpAb0VyPaUs9mgw65KRfQ9rqiWCHpNzrJusoPu+LpEoswosjt/tFxN7cd2l68AT4qWdBkzAjDLRon7uqMeWcg== - -esbuild@0.15.8: - version "0.15.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.8.tgz#75daa25d03f6dd9cc9355030eba2b93555b42cd4" - integrity sha512-Remsk2dmr1Ia65sU+QasE6svJbsHe62lzR+CnjpUvbZ+uSYo1SitiOWPRfZQkCu82YWZBBKXiD/j0i//XWMZ+Q== - optionalDependencies: - "@esbuild/android-arm" "0.15.8" - "@esbuild/linux-loong64" "0.15.8" - esbuild-android-64 "0.15.8" - esbuild-android-arm64 "0.15.8" - esbuild-darwin-64 "0.15.8" - esbuild-darwin-arm64 "0.15.8" - esbuild-freebsd-64 "0.15.8" - esbuild-freebsd-arm64 "0.15.8" - esbuild-linux-32 "0.15.8" - esbuild-linux-64 "0.15.8" - esbuild-linux-arm "0.15.8" - esbuild-linux-arm64 "0.15.8" - esbuild-linux-mips64le "0.15.8" - esbuild-linux-ppc64le "0.15.8" - esbuild-linux-riscv64 "0.15.8" - esbuild-linux-s390x "0.15.8" - esbuild-netbsd-64 "0.15.8" - esbuild-openbsd-64 "0.15.8" - esbuild-sunos-64 "0.15.8" - esbuild-windows-32 "0.15.8" - esbuild-windows-64 "0.15.8" - esbuild-windows-arm64 "0.15.8" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" - integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== - dependencies: - reusify "^1.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -g@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/g/-/g-2.0.1.tgz#0b5963ebd0ca70e3bc8c6766934a021821c8b857" - integrity sha512-Fi6Ng5fZ/ANLQ15H11hCe+09sgUoNvDEBevVgx3KoYOhsH5iLNPn54hx0jPZ+3oSWr+xajnp2Qau9VmPsc7hTA== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -json5@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" - integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -moment@2.29.4, moment@>=2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -obsidian@latest: - version "1.1.1" - resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-1.1.1.tgz#7cce6f19a6dd1cc5ec7e9f7dff8ea3ceacf2e2c3" - integrity sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg== - dependencies: - "@types/codemirror" "0.0.108" - moment "2.29.4" - -original-fs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/original-fs/-/original-fs-1.2.0.tgz#ea6c5117ee71fe6a9f809130de0590676370b5e8" - integrity sha512-IGo+qFumpIV65oDchJrqL0BOk9kr82fObnTesNJt8t3YgP6vfqcmRs0ofPzg3D9PKMeBHt7lrg1k/6L+oFdS8g== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -readline-sync@1.4.9: - version "1.4.9" - resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" - integrity sha512-mp5h1N39kuKbCRGebLPIKTBOhuDw55GaNg5S+K9TW9uDAS1wIHpGUc2YokdUMZJb8GqS49sWmWEDijaESYh0Hg== - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -tau-prolog@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/tau-prolog/-/tau-prolog-0.3.4.tgz#74be37aa3927ea99aba7cf9bad113e5889d909da" - integrity sha512-CEEa6C3IRPGN5GuXptBjLWOrF2x7aE06CP/p54oXJciBBfokkPom30uRNhKgbBAz1+AeuM1KtK2JMa0R3u+pRA== - dependencies: - readline-sync "1.4.9" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -typescript@^4.8.3: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 923f65cefad6c7967001ceeaae8610164880dd27 Mon Sep 17 00:00:00 2001 From: Sean Santry Date: Wed, 21 Dec 2022 14:34:18 -0500 Subject: [PATCH 22/40] Add Ruby language support --- CHANGELOG.md | 4 ++++ README.md | 12 +++++++++- src/main.ts | 8 ++++++- src/settings/Settings.ts | 10 ++++++++- src/settings/SettingsTab.ts | 6 ++++- src/settings/languageDisplayName.ts | 5 +++-- src/settings/per-lang/makeRubySettings.ts | 27 +++++++++++++++++++++++ 7 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/settings/per-lang/makeRubySettings.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index b1338cbb..ce1d59c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +## [Unreleased] + +### Added +- Support for Ruby (Thanks to @santry) ## [1.5.0] ### Added diff --git a/README.md b/README.md index d273fc53..a5e3f5ec 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The result is shown only after the execution is finished. It is not possible to ![Video that shows how the plugin works.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/execute_code_example.gif?raw=true) -The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. +The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Ruby, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. Python and Rust support embedded plots. All languages support ["magic" commands](#magic-commands) that help you to access paths in obsidian or show images in your notes. @@ -328,6 +328,16 @@ println("Hello, World!") ```
+
+Ruby + +- Requirements: Ruby is installed and the correct path is set in the settings. + +```ruby +puts "Hello, World!" +``` +
+ Squiggle: For Squiggle support take a look at the [Obsidian Squiggle plugin](https://github.com/jqhoogland/obsidian-squiggle) by @jqhoogland. Support for the following is planned: diff --git a/src/main.ts b/src/main.ts index 12903c0b..c95afeab 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,7 +18,7 @@ import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", - "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "c"] as const; + "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "c", "ruby"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; @@ -336,6 +336,12 @@ export default class ExecuteCodePlugin extends Plugin { const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); this.runCodeInShell(transformedCode, out, button, this.settings.clingPath, this.settings.clingArgs, "c", language, file); }) + } else if(language ==="ruby") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.rubyPath, this.settings.rubyArgs, "rb", language, file); + }) } } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index f4cbfe7e..1be89814 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -82,6 +82,9 @@ export interface ExecutorSettings { cArgs: string; cUseMain: boolean; cInject: string; + rubyPath: string; + rubyArgs: string; + rubyInject: string; jsInteractive: boolean; tsInteractive: boolean; @@ -103,6 +106,7 @@ export interface ExecutorSettings { haskellInteractive: boolean; scalaInteractive: boolean; cInteractive: boolean; + rubyInteractive: boolean; } @@ -188,6 +192,9 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { cArgs: "", cUseMain: true, cInject: "", + rubyPath: "ruby", + rubyArgs: "", + rubyInject: "", jsInteractive: true, tsInteractive: false, @@ -208,5 +215,6 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { mathematicaInteractive: false, haskellInteractive: false, scalaInteractive: false, - cInteractive: false + cInteractive: false, + rubyInteractive: false } diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 7f252c75..183e735e 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -16,6 +16,7 @@ import makePowershellSettings from "./per-lang/makePowershellSettings"; import makePrologSettings from "./per-lang/makePrologSettings"; import makePythonSettings from "./per-lang/makePythonSettings"; import makeRSettings from "./per-lang/makeRSettings"; +import makeRubySettings from "./per-lang/makeRubySettings"; import makeRustSettings from "./per-lang/makeRustSettings"; import makeScalaSettings from "./per-lang/makeScalaSettings.js"; import makeShellSettings from "./per-lang/makeShellSettings"; @@ -178,7 +179,10 @@ export class SettingsTab extends PluginSettingTab { // ========== Scala =========== makeScalaSettings(this, this.makeContainerFor("scala")); - + + // ========== Ruby ============ + makeRubySettings(this, this.makeContainerFor("ruby")); + this.focusContainer(this.plugin.settings.lastOpenLanguageTab || canonicalLanguages[0]); } diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index f90dfbd5..31926fd7 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -19,5 +19,6 @@ export const DISPLAY_NAMES: Record = { shell: "Shell", ts: "Typescript", scala: "Scala", - c: "C" -} as const; \ No newline at end of file + c: "C", + ruby: "Ruby" +} as const; diff --git a/src/settings/per-lang/makeRubySettings.ts b/src/settings/per-lang/makeRubySettings.ts new file mode 100644 index 00000000..094ae343 --- /dev/null +++ b/src/settings/per-lang/makeRubySettings.ts @@ -0,0 +1,27 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'Ruby Settings' }); + new Setting(containerEl) + .setName('ruby path') + .setDesc("Path to your ruby installation") + .addText(text => text + .setValue(tab.plugin.settings.rubyPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.rubyPath = sanitized; + console.log('ruby path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('ruby arguments') + .addText(text => text + .setValue(tab.plugin.settings.rubyArgs) + .onChange(async (value) => { + tab.plugin.settings.rubyArgs = value; + console.log('ruby args set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "ruby"); +} From 23e3c0f104484073001edfc624c1655f1eb2f40a Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Mon, 26 Dec 2022 20:50:48 +0100 Subject: [PATCH 23/40] docu: Fix wrong release note --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index be3780de..ae6558e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), + ## [Unreleased] ### Added - Support for Racket + + +## [1.5.0] +### Added - Support for C (Thanks to @chlohal) ### Changed From 067c44f14b6b3173b8fb7ba27c5f86947382e463 Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Mon, 26 Dec 2022 21:44:25 +0100 Subject: [PATCH 24/40] docu: update release notes --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae6558e1..775a04f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] ### Added -- Support for Racket +- Support for Racket (Thanks to @Ghexor) +- Support for F# (Thanks to @chlohal) ## [1.5.0] From 25b34eac40f810c33e27202f3310f12eec0d34c2 Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Mon, 26 Dec 2022 22:16:02 +0100 Subject: [PATCH 25/40] docu: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 775a04f5..1a0a30de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - Support for Racket (Thanks to @Ghexor) - Support for F# (Thanks to @chlohal) +- New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) ## [1.5.0] From 4aa3ecd7282c4f08c1080cd5f35a8315e9e4244c Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Mon, 26 Dec 2022 22:43:40 +0100 Subject: [PATCH 26/40] docu: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a0a30de..6540dd58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - Support for Racket (Thanks to @Ghexor) - Support for F# (Thanks to @chlohal) +- Support for Dart (Thanks to @andremeireles) - New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) From d04ddf269161e4853476469a55589409ae54abc3 Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Mon, 26 Dec 2022 22:55:17 +0100 Subject: [PATCH 27/40] docu: add more info on the use of batch --- README.md | 3 +++ images/batch_settings.png | Bin 0 -> 39784 bytes 2 files changed, 3 insertions(+) create mode 100644 images/batch_settings.png diff --git a/README.md b/README.md index 48091896..82a61394 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,9 @@ ls -la ```powershell echo "Hello World!" ``` + +- If you prefer batch: change the path settings in the menu for powershell +![Example how to use the magic commands.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/batch_settings.png?raw=true)
diff --git a/images/batch_settings.png b/images/batch_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..d165bb8775e2bfdea9dd97c90a1ee5f3d735112c GIT binary patch literal 39784 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 Date: Mon, 26 Dec 2022 23:23:35 +0100 Subject: [PATCH 28/40] docu: update changelog --- CHANGELOG.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0c7d0b6..d0a93f22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,18 +4,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -## [Unreleased] - -### Added -- Support for Ruby (Thanks to @santry) ## [Unreleased] ### Added +- New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) - Support for Racket (Thanks to @Ghexor) - Support for F# (Thanks to @chlohal) - Support for Dart (Thanks to @andremeireles) -- New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) - +- Support for Ruby (Thanks to @santry) ## [1.5.0] ### Added From 558c2def1935c53c86bb403b53c3030fd1d4bea1 Mon Sep 17 00:00:00 2001 From: hannes Date: Mon, 26 Dec 2022 22:25:30 +0000 Subject: [PATCH 29/40] add to readme suggest to list "The following [languages are supported](#supported-programming-languages): " on sep line for eacier merging? --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d273fc53..b6b55672 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The result is shown only after the execution is finished. It is not possible to ![Video that shows how the plugin works.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/execute_code_example.gif?raw=true) -The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Shell & Powershell. +The following [languages are supported](#supported-programming-languages): C, CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Prolog, Rust, Python, R, Wolfram Mathematica, Haskell, Scala, Batch, Shell & Powershell. Python and Rust support embedded plots. All languages support ["magic" commands](#magic-commands) that help you to access paths in obsidian or show images in your notes. @@ -211,6 +211,18 @@ echo "Hello World!" ```
+ +
+Batch + +- Requirements: Used to execute batch commands on Windows (also known as BAT or CMD). Default is command prompt, but can be set to your preferred shell in the settings. + +```batch +ECHO Hello World! +``` +
+ +
Prolog From fe47ed0bd1170a774772f0bdbb764ba42caca58c Mon Sep 17 00:00:00 2001 From: hannes Date: Mon, 26 Dec 2022 22:31:55 +0000 Subject: [PATCH 30/40] add main --- src/main.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 12903c0b..57e7ae6f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ import ExecutorManagerView, { import runAllCodeBlocks from './runAllCodeBlocks'; export const languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"] as const; -export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", +export const canonicalLanguages = ["js", "ts", "cs", "lua", "python", "cpp", "batch", "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "c"] as const; export const supportedLanguages = [...languageAliases, ...canonicalLanguages] as const; @@ -227,6 +227,13 @@ export default class ExecuteCodePlugin extends Plugin { this.runCodeInShell(transformedCode, out, button, this.settings.shellPath, this.settings.shellArgs, this.settings.shellFileExtension, language, file); }); + } else if (language === "batch") { + button.addEventListener("click", async () => { + button.className = runButtonDisabledClass; + const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInBatch(transformedCode, out, button, this.settings.batchPath, this.settings.batchArgs, this.settings.batchFileExtension, language, file); + }); + } else if (language === "powershell") { button.addEventListener("click", async () => { button.className = runButtonDisabledClass; From 7fab49f72a3ce271bfd4b82d860251244d691610 Mon Sep 17 00:00:00 2001 From: hannes Date: Mon, 26 Dec 2022 22:34:25 +0000 Subject: [PATCH 31/40] add settings --- src/settings/Settings.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index f4cbfe7e..b6bc63fb 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -29,6 +29,10 @@ export interface ExecutorSettings { shellArgs: string; shellFileExtension: string; shellInject: string; + batchPath: string; + batchArgs: string; + batchFileExtension: string; + batchInject: string; groovyPath: string; groovyArgs: string; groovyFileExtension: string; @@ -91,6 +95,7 @@ export interface ExecutorSettings { cppInteractive: boolean; prologInteractive: boolean; shellInteractive: boolean; + batchInteractive: boolean; bashInteractive: boolean; groovyInteractive: boolean; rInteractive: boolean; @@ -135,6 +140,10 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { shellArgs: "", shellFileExtension: "sh", shellInject: "", + batchPath: "cmd", + batchArgs: "", + batchFileExtension: "bat", + batchInject: "", groovyPath: "groovy", groovyArgs: "", groovyFileExtension: "groovy", @@ -197,6 +206,7 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { cppInteractive: false, prologInteractive: false, shellInteractive: false, + batchInteractive: false, bashInteractive: false, groovyInteractive: false, rInteractive: false, From bc5d1cd2f69bf01a2d46aca382f046297a1b6202 Mon Sep 17 00:00:00 2001 From: hannes Date: Mon, 26 Dec 2022 22:36:02 +0000 Subject: [PATCH 32/40] add setting tab --- src/settings/SettingsTab.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 7f252c75..653fa144 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -19,6 +19,7 @@ import makeRSettings from "./per-lang/makeRSettings"; import makeRustSettings from "./per-lang/makeRustSettings"; import makeScalaSettings from "./per-lang/makeScalaSettings.js"; import makeShellSettings from "./per-lang/makeShellSettings"; +import makeBatchSettings from "./per-lang/makeBatchSettings"; import makeTsSettings from "./per-lang/makeTsSettings"; import {ExecutorSettings} from "./Settings"; @@ -145,6 +146,8 @@ export class SettingsTab extends PluginSettingTab { // ========== C =========== makeCSettings(this, this.makeContainerFor("c")); + // ========== Batch ========== + makeBatchSettings(this, this.makeContainerFor("batch")); // ========== Shell ========== makeShellSettings(this, this.makeContainerFor("shell")); From 02b9a8079c60d209b18660c1e4988b24efc5099c Mon Sep 17 00:00:00 2001 From: hannes Date: Mon, 26 Dec 2022 22:36:56 +0000 Subject: [PATCH 33/40] language display --- src/settings/languageDisplayName.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index f90dfbd5..2cb95726 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -17,6 +17,7 @@ export const DISPLAY_NAMES: Record = { r: "R", rust: "Rust", shell: "Shell", + batch: "Batch", ts: "Typescript", scala: "Scala", c: "C" From e2b6e19ccd68e7ce04d96942404bf6a899dba152 Mon Sep 17 00:00:00 2001 From: hannes Date: Mon, 26 Dec 2022 22:42:08 +0000 Subject: [PATCH 34/40] add makebBatchSettings --- src/settings/per-lang/makeBatchSettings.ts | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/settings/per-lang/makeBatchSettings.ts diff --git a/src/settings/per-lang/makeBatchSettings.ts b/src/settings/per-lang/makeBatchSettings.ts new file mode 100644 index 00000000..fc0d49cf --- /dev/null +++ b/src/settings/per-lang/makeBatchSettings.ts @@ -0,0 +1,37 @@ +import { Setting } from "obsidian"; +import { SettingsTab } from "../SettingsTab"; + +export default (tab: SettingsTab, containerEl: HTMLElement) => { + containerEl.createEl('h3', { text: 'Batch Settings' }); + new Setting(containerEl) + .setName('Batch path') + .setDesc('The path to the terminal. Default is command prompt.') + .addText(text => text + .setValue(tab.plugin.settings.batchPath) + .onChange(async (value) => { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.batchPath = sanitized; + console.log('Batch path set to: ' + sanitized); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('Batch arguments') + .addText(text => text + .setValue(tab.plugin.settings.batchArgs) + .onChange(async (value) => { + tab.plugin.settings.batchArgs = value; + console.log('Batch args set to: ' + value); + await tab.plugin.saveSettings(); + })); + new Setting(containerEl) + .setName('Batch file extension') + .setDesc('Changes the file extension for generated batch scripts. Default is .bat') + .addText(text => text + .setValue(tab.plugin.settings.batchFileExtension) + .onChange(async (value) => { + tab.plugin.settings.batchFileExtension = value; + console.log('Batch file extension set to: ' + value); + await tab.plugin.saveSettings(); + })); + tab.makeInjectSetting(containerEl, "batch"); +} From e8116baed197123176f07657929a7f1e63e5e0ce Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Tue, 27 Dec 2022 00:09:06 +0100 Subject: [PATCH 35/40] fix: add missing languages --- src/settings/languageDisplayName.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/settings/languageDisplayName.ts b/src/settings/languageDisplayName.ts index af14ee83..88c8a1d2 100644 --- a/src/settings/languageDisplayName.ts +++ b/src/settings/languageDisplayName.ts @@ -1,4 +1,4 @@ -import { LanguageId } from "src/main"; +import {LanguageId} from "src/main"; export const DISPLAY_NAMES: Record = { cpp: "C++", @@ -23,5 +23,7 @@ export const DISPLAY_NAMES: Record = { racket: "Racket", c: "C", fsharp: "F#", - ruby: "Ruby" + ruby: "Ruby", + dart: "Dart", + lean: "Lean" } as const; From b3a9dad091925f053db90c8d561e65edc3a23944 Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Tue, 27 Dec 2022 00:12:32 +0100 Subject: [PATCH 36/40] fix: change settings and method call --- src/main.ts | 2 +- src/settings/Settings.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index 7109efa4..ea64aca9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -235,7 +235,7 @@ export default class ExecuteCodePlugin extends Plugin { button.addEventListener("click", async () => { button.className = runButtonDisabledClass; const transformedCode = await new CodeInjector(this.app, this.settings, language).injectCode(srcCode); - this.runCodeInBatch(transformedCode, out, button, this.settings.batchPath, this.settings.batchArgs, this.settings.batchFileExtension, language, file); + this.runCodeInShell(transformedCode, out, button, this.settings.batchPath, this.settings.batchArgs, this.settings.batchFileExtension, language, file); }); } else if (language === "powershell") { diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 78c3a152..9eca8f95 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -168,7 +168,7 @@ export const DEFAULT_SETTINGS: ExecutorSettings = { shellArgs: "", shellFileExtension: "sh", shellInject: "", - batchPath: "cmd", + batchPath: "call", batchArgs: "", batchFileExtension: "bat", batchInject: "", From d0d2f067aaa3c1742537ceaaab7b4b28d35001b0 Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Tue, 27 Dec 2022 00:13:56 +0100 Subject: [PATCH 37/40] docu: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0a93f22..da3f1b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Support for F# (Thanks to @chlohal) - Support for Dart (Thanks to @andremeireles) - Support for Ruby (Thanks to @santry) +- Support for Batch scripts (Thanks to @hannesdelbeke) ## [1.5.0] ### Added From 939ca26019b7019613c41c906260af83041ee3cb Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Tue, 27 Dec 2022 00:23:54 +0100 Subject: [PATCH 38/40] feat: implement new magic commands that replace @vault and @note --- CHANGELOG.md | 1 + README.md | 7 +++++-- src/transforms/Magic.ts | 16 ++++++++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da3f1b8b..8218c2d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] ### Added - New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) +- New magic commands `@vault_path` and `@note_path` to get the path, and `@vault_url` and `@note_url` to get the url. They replace the old magic commands `@vault` and `@note`. - Support for Racket (Thanks to @Ghexor) - Support for F# (Thanks to @chlohal) - Support for Dart (Thanks to @andremeireles) diff --git a/README.md b/README.md index 8c7f0bc5..3d699456 100644 --- a/README.md +++ b/README.md @@ -403,8 +403,10 @@ Magic commands are some meta commands that can be used in the code block. They a The following magic commands are supported: -- `@vault`: Inserts the vault path as string. -- `@note`: Inserts the note path as string. +- `@vault_path`: Inserts the vault path as string (e.g. "/User/path/to/vault") +- `@vault_url`: Inserts the vault url as string. (e.g. "app://local/path/to/vault") +- `@note_path`: Inserts the vault path as string (e.g. "/User/path/to/vault/Note.md") +- `@note_url`: Inserts the vault url as string. (e.g. "app://local/path/to/vault/Note.md") - `@title`: Inserts the note title as string. - `@show(ImagePath)`: Displays an image at the given path in the note. - `@show(ImagePath, Width, Height)`: Displays an image at the given path in the note. @@ -412,6 +414,7 @@ The following magic commands are supported: - `@html(HtmlSource)`: Displays HTML in the note (`@show(...)` and `@html(...)` are only supported for JavaScript and Python yet.) +(The old commands `@note` and `@vault` are still supported, but may be removed in the future.) ![Example how to use the magic commands.](https://github.com/twibiral/obsidian-execute-code/blob/master/images/magic_example.png?raw=true) diff --git a/src/transforms/Magic.ts b/src/transforms/Magic.ts index 2b967ce1..e3352646 100644 --- a/src/transforms/Magic.ts +++ b/src/transforms/Magic.ts @@ -18,7 +18,11 @@ import { TOGGLE_HTML_SIGIL } from "src/Outputter"; const SHOW_REGEX = /@show\(["'](?[^<>?*=!\n#()\[\]{}]+)["'](,\s*(?\d+[\w%]+),?\s*(?\d+[\w%]+))?(,\s*(?left|center|right))?\)/g; const HTML_REGEX = /@html\((?[^)]+)\)/g; const VAULT_REGEX = /@vault/g +const VAULT_PATH_REGEX = /@vault_path/g +const VAULT_URL_REGEX = /@vault_url/g const CURRENT_NOTE_REGEX = /@note/g; +const CURRENT_NOTE_PATH_REGEX = /@note_path/g; +const CURRENT_NOTE_URL_REGEX = /@note_url/g; const NOTE_TITLE_REGEX = /@title/g; const COLOR_THEME_REGEX = /@theme/g; @@ -34,7 +38,11 @@ const R_PLOT_REGEX = /^plot\(.*\)/gm; * @returns The transformed source code. */ export function insertVaultPath(source: string, vaultPath: string): string { - return source.replace(VAULT_REGEX, `"app://local/${vaultPath.replace(/\\/g, "/")}"`); + source = source.replace(VAULT_REGEX, `"app://local/${vaultPath.replace(/\\/g, "/")}"`); + source = source.replace(VAULT_URL_REGEX, `"app://local/${vaultPath.replace(/\\/g, "/")}"`); + source = source.replace(VAULT_PATH_REGEX, `"${vaultPath.replace(/\\/g, "/")}"`); + + return source; } @@ -46,7 +54,11 @@ export function insertVaultPath(source: string, vaultPath: string): string { * @returns The transformed source code. */ export function insertNotePath(source: string, notePath: string): string { - return source.replace(CURRENT_NOTE_REGEX, `"app://local/${notePath.replace(/\\/g, "/")}"`); + source = source.replace(CURRENT_NOTE_REGEX, `"app://local/${notePath.replace(/\\/g, "/")}"`); + source = source.replace(CURRENT_NOTE_URL_REGEX, `"app://local/${notePath.replace(/\\/g, "/")}"`); + source = source.replace(CURRENT_NOTE_PATH_REGEX, `"${notePath.replace(/\\/g, "/")}"`); + + return source; } From c40228f05a9e920b0c545a5a496da7c3a10e467e Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Tue, 27 Dec 2022 00:25:43 +0100 Subject: [PATCH 39/40] chore: update version --- CHANGELOG.md | 2 +- manifest.json | 2 +- package-lock.json | 2 +- package.json | 2 +- versions.json | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8218c2d7..d596f776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -## [Unreleased] +## [1.5.0] ### Added - New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) - New magic commands `@vault_path` and `@note_path` to get the path, and `@vault_url` and `@note_url` to get the url. They replace the old magic commands `@vault` and `@note`. diff --git a/manifest.json b/manifest.json index 51d53066..4bee03e0 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "execute-code", "name": "Execute Code", - "version": "1.5.0", + "version": "1.6.0", "minAppVersion": "0.12.0", "description": "Allows to execute code snippets within a note.", "author": "twibiral", diff --git a/package-lock.json b/package-lock.json index ef12d6f0..340fcb98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "execute-code", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 820e82ee..24f5dfb7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "execute-code", - "version": "1.5.0", + "version": "1.6.0", "description": "This is a sample plugin for Obsidian (https://obsidian.md)", "main": "src/main.js", "scripts": { diff --git a/versions.json b/versions.json index ebd78511..d66bb797 100644 --- a/versions.json +++ b/versions.json @@ -34,5 +34,6 @@ "1.2.0": "0.12.0", "1.3.0": "0.12.0", "1.4.0": "0.12.0", - "1.5.0": "0.12.0" + "1.5.0": "0.12.0", + "1.6.0": "0.12.0" } \ No newline at end of file From 17cc72bad4f6c4b8247844410a10a342489aefb9 Mon Sep 17 00:00:00 2001 From: Tim Wibiral Date: Tue, 27 Dec 2022 00:26:59 +0100 Subject: [PATCH 40/40] fix: wrong version numbering in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d596f776..801cb672 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -## [1.5.0] +## [1.6.0] ### Added - New magic command `@theme` to get if obsidian is in dark or light mode (Thanks to @chlohal) - New magic commands `@vault_path` and `@note_path` to get the path, and `@vault_url` and `@note_url` to get the url. They replace the old magic commands `@vault` and `@note`.