aboutsummaryrefslogtreecommitdiff
path: root/model/doc.go
diff options
context:
space:
mode:
Diffstat (limited to 'model/doc.go')
-rw-r--r--model/doc.go43
1 files changed, 33 insertions, 10 deletions
diff --git a/model/doc.go b/model/doc.go
index 76f03e4..9c13a4c 100644
--- a/model/doc.go
+++ b/model/doc.go
@@ -1,18 +1,41 @@
package model
-type Doc []any
+type Doc struct {
+ items []any
+ vars map[string]Values
+ commands map[string]Commands
+}
-type Assignment struct {
- Key string
- Value []Value
+func New(cap int) *Doc {
+ return &Doc{
+ items: make([]any, 0, cap),
+ vars: make(map[string]Values, cap),
+ commands: make(map[string]Commands, cap),
+ }
}
-type Command struct {
- Name string
- Arguments []Value
- Body Doc
+func (d *Doc) AppendAssignment(e *Assignment) {
+ d.items = append(d.items, e)
+ d.vars[e.Key] = append(d.vars[e.Key], e.Value...)
}
-type Value any
+func (d *Doc) AppendCommand(c *Command) {
+ d.items = append(d.items, c)
+ d.commands[c.Name] = append(d.commands[c.Name], c)
+}
-type Word string
+func (d *Doc) Vars() map[string]Values {
+ return d.vars
+}
+
+func (d *Doc) Get(key string) Values {
+ return d.vars[key]
+}
+
+func (d *Doc) Commands(name string) Commands {
+ return d.commands[name]
+}
+
+func (d *Doc) Items() []any {
+ return d.items
+}