class Dramaturg::Parser
Public Class Methods
call(cmd)
click to toggle source
# File lib/dramaturg/parser.rb, line 4 def call(cmd) tokens = tokenize(cmd.to_s) tokens.each do |t| case t when /^\{(\w+):(.+)\}$/ add_named_value(cmd, $1.to_sym, $2) when /^\{([^\$].*)\}$/ add_anon_value(cmd, $1) when /^\{(\$.+)\}/ add_var_value(cmd, $1) else cmd << Value::Fixed.new(t) end end if cmd.allow_suffix suffix = Value::OrDefault.new("") cmd[:_suffix] = suffix cmd << suffix end if cmd.save_to_file cmd << Value::Silent.new(" | tee #{cmd.save_to_file}") end end
Private Class Methods
add_anon_value(cmd, expression)
click to toggle source
# File lib/dramaturg/parser.rb, line 36 def add_anon_value(cmd, expression) cmd << Value::OrDefault.new(expression) end
add_named_value(cmd, name, value)
click to toggle source
# File lib/dramaturg/parser.rb, line 40 def add_named_value(cmd, name, value) value = Value::OrDefault.new(value) cmd[name] = value cmd << value end
add_var_value(cmd, var)
click to toggle source
# File lib/dramaturg/parser.rb, line 46 def add_var_value(cmd, var) exists = eval("defined? #{var}") key = var.to_sym if exists == 'global-variable' value = eval(var) value = Value::Fixed(value) unless value.is_a? Value::Base value.display = var if value.respond_to? :display= cmd << value else $stderr.puts "WARN: Reference to undefined global #{$1} at #{caller(7).join("\n\t")}" end end
tokenize(s)
click to toggle source
# File lib/dramaturg/parser.rb, line 32 def tokenize(s) s.split /(?=\{)|(?<=\})/ end