<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Stanton <charlie@shtanton.xyz>2023-04-26 11:57:37 +0100
committerCharlie Stanton <charlie@shtanton.xyz>2023-04-26 11:57:37 +0100
commit0da98a3d83b5aa6ccae73658ef0692c4023bc70f (patch)
treeb360581836295c21aef03efe5fb6f0d3aeb3f5fc
parentc6b1341fab071ab9d9419dace857b826ddf2acf1 (diff)
downloadstred-go-0da98a3d83b5aa6ccae73658ef0692c4023bc70f.tar
Add Y and Z registers
-rw-r--r--README.md8
-rw-r--r--main/command.go24
-rw-r--r--main/main.go2
-rw-r--r--main/parse.go8
4 files changed, 39 insertions, 3 deletions
diff --git a/README.md b/README.md
index 032a71d..668e645 100644
--- a/README.md
+++ b/README.md
@@ -18,9 +18,9 @@ I'm hoping it will be capable of nearly as much as jq, with comparable or better
## Usage
### Registers and Atoms
-Commands operate on data that is store in 'registers'. There are 3 registers: path, value and X.
+Commands operate on data that is store in 'registers'. There are 5 registers: path, value, X, Y and Z.
-The path register stores the global path from the root node to the current token, the value register stores the token itself and the X register is a general purpose register, good for keeping things for later.
+The path register stores the global path from the root node to the current token, the value register stores the token itself and the X, Y and Z registers are general purpose registers, good for keeping things for later.
With the following JSON being read:
```
@@ -162,5 +162,9 @@ With an understanding of subexes, we can look at the stred commands
| `o` | Do nothing |
| `x` | Swap the value register with the X register |
| `X` | Append the contents of the value register to the X register |
+| `y` | Swap the value register with the Y register |
+| `Y` | Append the contents of the value register to the Y register |
+| `z` | Swap the value register with the Z register |
+| `Z` | Append the contents of the value register to the Z register |
| `k` | Swap the value register with the path register |
| `K` | Append the contents of the value register to the path register |
diff --git a/main/command.go b/main/command.go
index 9403020..296ad69 100644
--- a/main/command.go
+++ b/main/command.go
@@ -107,6 +107,30 @@ func (cmd AppendXRegCommand) exec(state *ProgramState) {
state.xreg = append(state.xreg, state.value...)
}
+type SwapYRegCommand struct {}
+func (cmd SwapYRegCommand) exec(state *ProgramState) {
+ v := state.value
+ state.value = state.yreg
+ state.yreg = v
+}
+
+type AppendYRegCommand struct {}
+func (cmd AppendYRegCommand) exec(state *ProgramState) {
+ state.yreg = append(state.yreg, state.value...)
+}
+
+type SwapZRegCommand struct {}
+func (cmd SwapZRegCommand) exec(state *ProgramState) {
+ v := state.value
+ state.value = state.zreg
+ state.zreg = v
+}
+
+type AppendZRegCommand struct {}
+func (cmd AppendZRegCommand) exec(state *ProgramState) {
+ state.zreg = append(state.zreg, state.value...)
+}
+
type SwapPathCommand struct {}
func (cmd SwapPathCommand) exec(state *ProgramState) {
v := state.value
diff --git a/main/main.go b/main/main.go
index 0c7324b..2067920 100644
--- a/main/main.go
+++ b/main/main.go
@@ -9,7 +9,7 @@ import (
type Program []Command
type ProgramState struct {
- path, value, xreg []walk.Atom
+ path, value, xreg, yreg, zreg []walk.Atom
in walk.JSONIn
out walk.JSONOut
program []Command
diff --git a/main/parse.go b/main/parse.go
index d31687a..1972b66 100644
--- a/main/parse.go
+++ b/main/parse.go
@@ -142,6 +142,14 @@ func (p *parser) parseBasicCommand(commandChar rune) Command {
return SwapXRegCommand{}
case 'X':
return AppendXRegCommand{}
+ case 'y':
+ return SwapYRegCommand{}
+ case 'Y':
+ return AppendYRegCommand{}
+ case 'z':
+ return SwapZRegCommand{}
+ case 'Z':
+ return AppendZRegCommand{}
case 'k':
return SwapPathCommand{}
case 'K':