diff --git a/ast.go b/ast.go index 46d338f..e545006 100644 --- a/ast.go +++ b/ast.go @@ -138,6 +138,7 @@ type If struct { InnerCmds []*Command `@@* "}"` } +// RptLoop stores any repeat loops encountered while parsing a script type RptLoop struct { Pos lexer.Position Times *int `"repeat" @Number "times" "{"` diff --git a/cmd/scpt/main.go b/cmd/scpt/main.go index 795da4c..4f72e4b 100644 --- a/cmd/scpt/main.go +++ b/cmd/scpt/main.go @@ -27,6 +27,8 @@ func main() { } scpt.AddFuncs(scpt.FuncMap{ "print": scptPrint, + "display-dialog": displayDialog, + "do-shell-script": doShellScript, }) err = ast.Execute() if err != nil { diff --git a/defaults.go b/defaults.go index 016ed1f..b6aa992 100644 --- a/defaults.go +++ b/defaults.go @@ -17,75 +17,29 @@ package scpt import ( "errors" "fmt" - "github.com/gen2brain/dlgs" - "os" - "os/exec" + "strconv" ) -// Default function to display a dialog -func displayDialog(args map[string]interface{}) (interface{}, error) { - // Get title - title, ok := args["title"] - if !ok { - return nil, errors.New("title not provided") - } - // Get unnamed argument as text - text, ok := args[""] - if !ok { - return nil, errors.New("text not provided") - } - // Display correct dialog based on given type - switch args["type"] { - case "yesno": - // Display yes or no dialog, returning bool based on user input - return dlgs.Question(fmt.Sprint(title), fmt.Sprint(text), true) - case "info": - // Display info dialog, returning bool based on success - return dlgs.Info(fmt.Sprint(title), fmt.Sprint(text)) - case "error": - // Display error dialog, returning bool based on success - return dlgs.Error(fmt.Sprint(title), fmt.Sprint(text)) - case "entry": - // Check if default text given - defaultText, ok := args["default"] - if !ok { - // Set to empty if not given - defaultText = "" - } - // Display entry dialog - input, _, err := dlgs.Entry(fmt.Sprint(title), fmt.Sprint(text), fmt.Sprint(defaultText)) - // Return user input - return input, err - default: - // If type unknown, return error - return nil, fmt.Errorf("unknown dialog type: %v", args["type"]) - } -} - -// Default function to run a shell script using `sh -c` -func doShellScript(args map[string]interface{}) (interface{}, error) { - // Get unnamed argument and assert its type as string - script, ok := args[""].(string) - // If assertion successful - if ok { - // Create new exec.Cmd containing `sh -c