From edd5ca33049663a63422fc86f13d9763455b0ef9 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 26 Jun 2021 13:22:38 -0600 Subject: [PATCH] defcommand works for OneEntry arguments --- .../src/nat/ArchiveController.kiss | 35 ++++++++++--------- projects/nat-archive-tool/src/nat/CLI.kiss | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/projects/nat-archive-tool/src/nat/ArchiveController.kiss b/projects/nat-archive-tool/src/nat/ArchiveController.kiss index 542d7261..b0c8f38c 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveController.kiss +++ b/projects/nat-archive-tool/src/nat/ArchiveController.kiss @@ -89,30 +89,22 @@ (let [argPairs (groups (expList args) 2) methodArgs - ~(for [name type] argPairs + (for [name type] argPairs // TODO write a macroCase macro that simplifies this terrible mess, // and maybe adds back precise pattern matching instead of relying // on partial string matching (let [expAsStr (Std.string type)] (cond - ((< -1 ~(max (expAsStr.indexOf "SelectedEntry") (expAsStr.indexOf "OneEntry"))) (typed "Entry" name)) - ((< -1 ~(max (expAsStr.indexOf "SelectedEntries") (expAsStr.indexof "Entries"))) (typed "Array" name)) - ((< -1 ~(expAsStr.indexOf "Text")) (typed "String" name)) - ((< -1 ~(expAsStr.indexOf "Number")) (typed "Float" name))))) + ((< -1 (max (expAsStr.indexOf "SelectedEntry") (expAsStr.indexOf "OneEntry"))) `:nat.Entry ,name) + ((< -1 (max (expAsStr.indexOf "SelectedEntries") (expAsStr.indexof "Entries"))) `:Array ,name) + ((< -1 (expAsStr.indexOf "Text")) `:String ,name) + ((< -1 (expAsStr.indexOf "Number")) `:Float ,name)))) commandArgs (for [name type] argPairs - // TODO this is also a mess because for some reason quasiquote wouldn't work here - ~(call (symbol "object") [(symbol "name") (symbolNameExp name) (symbol "type") type]))] + ~`(object name ,(symbolName name) type ,type))] `{ - (defmethod ,name ,methodArgs ,body) - (dictSet commands ,(symbolNameExp name) (object args ,commandArgs handler ,name))})) - -(defmethod selectEntries [:Array e] - (set selectedEntries e)) - -(defmethod selectLastChangeSet [] - (set selectedEntries lastChangeSet)) - + (defmethod ,name [,@methodArgs] ,@body) + (dictSet commands ,(symbolName name) (object args [,@commandArgs] handler (the Function ,name)))})) (defnew [&prop :Archive archive &prop :ArchiveUI ui] @@ -123,4 +115,13 @@ (defcommand selectEntry [e OneEntry] (set selectedEntries [e])) - ) \ No newline at end of file + /* + (defcommand selectEntries [entries (Entries null null)] + (set selectedEntries entries)) + */ + + (defcommand selectLastChangeSet [] + (set selectedEntries lastChangeSet)) + + /*(defcommand createEntry [name (Text null null)] + ~name)*/) \ No newline at end of file diff --git a/projects/nat-archive-tool/src/nat/CLI.kiss b/projects/nat-archive-tool/src/nat/CLI.kiss index 08630011..e4a8d94a 100644 --- a/projects/nat-archive-tool/src/nat/CLI.kiss +++ b/projects/nat-archive-tool/src/nat/CLI.kiss @@ -4,7 +4,7 @@ (new ArchiveController (new Archive archiveDir) (new CLI))] - (controller.runCommand (object args [(object name "str" type (Text 3 55)) (object name "int" type (Number 0 5 1))] handler (lambda [fuck shit] ~"string $fuck number $shit"))))) + (controller.runCommand (dictGet controller.commands "selectEntry")))) (defnew [])