class NsMacroProcessor::Processor
Public Class Methods
new(params)
click to toggle source
# File lib/ns_macro_processor.rb, line 9 def initialize(params) @params = params end
Public Instance Methods
parse(text)
click to toggle source
# File lib/ns_macro_processor.rb, line 13 def parse(text) @tokens = Tokens.new(text) @tokens.advance result = words expect(Tokens::EOF) result end
Private Instance Methods
accept(s)
click to toggle source
# File lib/ns_macro_processor.rb, line 70 def accept(s) if (@tokens.peek == s) @tokens.advance true else false end end
execute(args)
click to toggle source
# File lib/ns_macro_processor.rb, line 51 def execute(args) case args[0] when 'define' raise SyntaxError.new('~{define name value}', args.join(' ')) unless args.length >= 2 @params[args[1]] = args[2..-1].join(' ') '' when 'include' lookup(:filestore).contents_of(args[1]) else lookup(args[0]) end end
expect(s)
click to toggle source
# File lib/ns_macro_processor.rb, line 79 def expect(s) return true if accept(s) raise SyntaxError.new(s, @tokens.peek) false end
lookup(field_name)
click to toggle source
# File lib/ns_macro_processor.rb, line 64 def lookup(field_name) value = @params[field_name] || @params[field_name.to_sym] raise ProcessorError.new(field_name) unless value value end
macro()
click to toggle source
# File lib/ns_macro_processor.rb, line 41 def macro args = [] loop do args << word break if @tokens.peek == '}' || @tokens.peek == Tokens::EOF end expect('}') execute(args.join.split(' ')) end
word()
click to toggle source
# File lib/ns_macro_processor.rb, line 31 def word result = @tokens.peek @tokens.advance if result == '~' and accept('{') @tokens.push_back(macro) result = word end result end
words()
click to toggle source
# File lib/ns_macro_processor.rb, line 23 def words result = [] while @tokens.peek != Tokens::EOF result << word end result.join end