class Cucumber::Parser::NaturalLanguage

def and_keywords

def and_keywords
  @keywords['and'].split('|')
end

def but_keywords

def but_keywords
  @keywords['but'].split('|')
end

def get(step_mother, lang)

def get(step_mother, lang)
  languages[lang] ||= new(step_mother, lang)
end

def incomplete?

def incomplete?
  KEYWORD_KEYS.detect{|key| @keywords[key].nil?}
end

def initialize(step_mother, lang)

def initialize(step_mother, lang)
  @keywords = Cucumber::LANGUAGES[lang]
  raise "Language not supported: #{lang.inspect}" if @keywords.nil?
  @keywords['grammar_name'] = @keywords['name'].gsub(/\s/, '')
  register_adverbs(step_mother) if step_mother
end

def keywords(key, raw=false)

def keywords(key, raw=false)
  return @keywords[key] if raw
  return nil unless @keywords[key]
  values = @keywords[key].split('|')
  values.map{|value| "'#{value}'"}.join(" / ")
end

def languages

def languages
  @languages ||= {}
end

def parse(source, path, filter)

def parse(source, path, filter)
  feature = parser.parse_or_fail(source, path, filter)
  feature.language = self if feature
  feature
end

def parser

def parser
  return @parser if @parser
  i18n_tt = File.expand_path(File.dirname(__FILE__) + '/i18n.tt')
  template = File.open(i18n_tt, Cucumber.file_mode('r')).read
  erb = ERB.new(template)
  grammar = erb.result(binding)
  Treetop.load_from_string(grammar)
  @parser = Parser::I18n.const_get("#{@keywords['grammar_name']}Parser").new
  def @parser.inspect
    "#<#{self.class.name}>"
  end
  @parser
end

def register_adverbs(step_mother)

def register_adverbs(step_mother)
  adverbs = %w{given when then and but}.map{|keyword| @keywords[keyword].split('|').map{|w| w.gsub(/\s/, '')}}.flatten
  step_mother.register_adverbs(adverbs) if step_mother
end

def scenario_keyword

def scenario_keyword
  @keywords['scenario'].split('|')[0] + ':'
end