4 changed files with 93 additions and 2 deletions
@ -0,0 +1,80 @@ |
|||
# scpt |
|||
|
|||
scpt is an applescript-inspired scripting language written for fun and to see if I could. |
|||
|
|||
[](https://pkg.go.dev/gitea.arsenm.dev/Arsen6331/scpt) |
|||
|
|||
--- |
|||
|
|||
### Usage |
|||
|
|||
scpt is to be used as a library imported into Go. A basic interpreter with no extra functionality would look like this: |
|||
|
|||
```go |
|||
package main |
|||
|
|||
import ( |
|||
"gitea.arsenm.dev/Arsen6331/scpt" |
|||
"log" |
|||
"os" |
|||
"path/filepath" |
|||
) |
|||
|
|||
func main() { |
|||
filename := os.Args[1] |
|||
file, err := os.Open(filepath.Clean(filename)) |
|||
if err != nil { |
|||
log.Fatalln(err) |
|||
} |
|||
ast, err := scpt.Parse(file) |
|||
if err != nil { |
|||
log.Fatalln(err) |
|||
} |
|||
err = ast.Execute() |
|||
if err != nil { |
|||
log.Fatalln(err) |
|||
} |
|||
} |
|||
``` |
|||
|
|||
--- |
|||
|
|||
### Basic Syntax |
|||
|
|||
The basic syntax of scpt can be learned from the test.scpt file. |
|||
|
|||
--- |
|||
|
|||
### Default Functions |
|||
|
|||
scpt comes with the following default functions: |
|||
|
|||
- `str`: Convert value to string |
|||
- `num`: Parse string to number (`float64`) |
|||
- `bool`: Parse string to boolean |
|||
- `break`: Break out of loop (Errors if not in loop) |
|||
- `append`: Return an array with given items appended |
|||
- `exit`: Exit with given exit code |
|||
- `return`: Return value in function (Errors if not within function) |
|||
- `print`: Print using `fmt.Println()` |
|||
|
|||
--- |
|||
|
|||
### Adding functionality: |
|||
|
|||
Adding functionality is simple and requires a call to `scpt.AddFuncs()` or `scpt.AddVars()`. Here are some examples: |
|||
|
|||
```go |
|||
scpt.AddFuncs(scpt.FuncMap{ |
|||
"my-function": myFunction |
|||
}) |
|||
``` |
|||
Where `myFunction` is: |
|||
```go |
|||
func myFunction(args map[string]interface{}) (interface{}, error) { |
|||
fmt.Println(args) |
|||
return nil, nil |
|||
} |
|||
``` |
|||
|
|||
After the call to `scpt.AddFuncs()`, `my-function` can be used to run the function from within an scpt script. Variables work similarly. |
Loading…
Reference in new issue