aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/llgcode/ps/procedure.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/llgcode/ps/procedure.go')
-rw-r--r--vendor/github.com/llgcode/ps/procedure.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/vendor/github.com/llgcode/ps/procedure.go b/vendor/github.com/llgcode/ps/procedure.go
new file mode 100644
index 0000000..f6f5454
--- /dev/null
+++ b/vendor/github.com/llgcode/ps/procedure.go
@@ -0,0 +1,46 @@
+// Copyright 2010 The postscript-go Authors. All rights reserved.
+// created: 13/12/2010 by Laurent Le Goff
+
+package ps
+
+type ProcedureDefinition struct {
+ Values []Value
+}
+
+func NewProcedureDefinition() *ProcedureDefinition {
+ proceduredef := new(ProcedureDefinition)
+ proceduredef.Values = make([]Value, 0, 100)
+ return proceduredef
+}
+
+func (p *ProcedureDefinition) Add(value Value) {
+ p.Values = append(p.Values, value)
+}
+
+type Procedure struct {
+ def *ProcedureDefinition
+}
+
+func NewProcedure(def *ProcedureDefinition) *Procedure {
+ return &Procedure{def}
+}
+
+func (p *Procedure) Execute(interpreter *Interpreter) {
+ for _, value := range p.def.Values {
+ if s, ok := value.(string); ok {
+ firstChar := s[0]
+ if firstChar != '(' && firstChar != '/' {
+ interpreter.computeReference(s)
+ } else {
+ interpreter.Push(value)
+ }
+ } else {
+ operator, isOperator := value.(Operator)
+ if isOperator {
+ operator.Execute(interpreter)
+ } else {
+ interpreter.Push(value)
+ }
+ }
+ }
+}