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