From 6f2d0a9a6cd4a2ae68ef0e5c0ab924ee03279eeb Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 22 Jun 2023 09:48:08 -0600 Subject: [PATCH] full auto conversion --- tct-vscode-editor/package.json | 9 +++++++++ tct-vscode-editor/src/EditorProvider.kiss | 11 ++++++++++- tct-vscode-editor/src/Main.kiss | 7 +++++++ tct/src/tct/FileConversionProject.kiss | 11 ++++++++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tct-vscode-editor/package.json b/tct-vscode-editor/package.json index ba27270..c19a552 100644 --- a/tct-vscode-editor/package.json +++ b/tct-vscode-editor/package.json @@ -19,6 +19,11 @@ "command": "tct-vscode-editor.importTCTInputFile", "mac": "Cmd+; Cmd+i", "key": "Ctrl+; Ctrl+i" + }, + { + "command": "tct-vscode-editor.fullAutoConvert", + "mac": "Cmd+; Cmd+a", + "key": "Ctrl+; Ctrl+a" } ], "customEditors": [ @@ -37,6 +42,10 @@ { "title": "tct-vscode-editor: Import a file to a new TCT file", "command": "tct-vscode-editor.importTCTInputFile" + }, + { + "title": "tct-vscode-editor: Convert as many blocks as possible automatically", + "command": "tct-vscode-editor.fullAutoConvert" } ], "configuration": { diff --git a/tct-vscode-editor/src/EditorProvider.kiss b/tct-vscode-editor/src/EditorProvider.kiss index c1da052..5e532ba 100644 --- a/tct-vscode-editor/src/EditorProvider.kiss +++ b/tct-vscode-editor/src/EditorProvider.kiss @@ -7,9 +7,14 @@ (let [provider (new EditorProvider context)] (Vscode.window.registerCustomEditorProvider "tct.splitView" provider))) +(var &mut :String currentFilename null) +(var :Map conversionProjects (new Map)) +(var :MapVoid> fullUpdateFunctions (new Map)) + (defNew [&prop :ExtensionContext context]) (method :Promise resolveCustomTextEditor [:TextDocument document :WebviewPanel webviewPanel :CancellationToken _token] + (set currentFilename document.fileName) (set webviewPanel.webview.options (object enableScripts true)) (set webviewPanel.webview.html (htmlForWebview webviewPanel.webview)) @@ -17,7 +22,11 @@ (let [project (FileConversionProject.loadDirectory (document.fileName.directory)) postMessage ->[:Message message] (webviewPanel.webview.postMessage (Json.stringify message)) + requestFullUpdate ->:Void (postMessage (Initialize project.blocks)) reportRequest ->:Void [:Bool result] (postMessage (if result RequestSuccess RequestFailure))] + + (dictSet conversionProjects document.fileName project) + (dictSet fullUpdateFunctions document.fileName requestFullUpdate) (localFunction :Void chooseConversion [blockIdx] (let [validConversions (project.validConversions blockIdx ->m (errorMessage m))] @@ -73,7 +82,7 @@ (RequestRedo (reportRequest (project.redoChange))) (RequestFullUpdate - (postMessage (Initialize project.blocks))) + (requestFullUpdate)) (otherwise (errorMessage "Unhandled message from editor: $message"))))) diff --git a/tct-vscode-editor/src/Main.kiss b/tct-vscode-editor/src/Main.kiss index 25b5306..04501ed 100644 --- a/tct-vscode-editor/src/Main.kiss +++ b/tct-vscode-editor/src/Main.kiss @@ -26,6 +26,13 @@ (let [project (FileConversionProject.importFile file outputType splitBy outBlockTerminator)] (executeCommand "workbench.action.quickOpen" "${dir}/${project.tctFile}")))))))) + (defCommand context fullAutoConvert "Convert as many blocks as possible automatically" "C-; C-a" [] + (let [filename EditorProvider.currentFilename + project (dictGet EditorProvider.conversionProjects filename) + requestFullUpdate (dictGet EditorProvider.fullUpdateFunctions filename)] + (project.fullAutoConvert ->message (errorMessage message)) + (requestFullUpdate))) + // Add your extension's configuration here with (defConfiguration <...>): (defConfiguration :Array nameExceptions diff --git a/tct/src/tct/FileConversionProject.kiss b/tct/src/tct/FileConversionProject.kiss index 704c719..1d3a510 100644 --- a/tct/src/tct/FileConversionProject.kiss +++ b/tct/src/tct/FileConversionProject.kiss @@ -219,4 +219,13 @@ (try (convert source) (catch [e] (reportError "Conversion error: $e") "Conversion error: $e")))) (otherwise))) - validMap)) \ No newline at end of file + validMap)) + +(method :Void fullAutoConvert [:String->Dynamic reportError] + (doFor [idx block] (enumerate blocks) + (print "Converting block $(+ idx 1)/${blocks.length}") + (when block.locked (continue)) + (let [vc (validConversions idx reportError)] + (when (= 1 (count vc)) + (doFor =>conversionName text vc + (editBlock idx null text null)))))) \ No newline at end of file