module Lolcode::Translator

Public Instance Methods

translate(line) click to toggle source

Translate to Ruby

# File lib/lolcode/translator.rb, line 5
def translate(line)
  line = line.dup

  line.gsub!(/\bBTW\b/, ' # ')         # BTW comments
  # line.gsub!(/\bOBTW\b/, '\n=begin\n') # multiline comments begin
  # multiline comments begin
  line.gsub!(/\bOBTW\b/) do |s|
    self.block_level += 1
    "\n=begin\n"
  end
  # multiline comments end
  line.gsub!(/\bTLDR\b/) do |s|
    self.block_level -= 1
    "\n=end\n"
  end

  line.gsub!(/\bVISIBLE\s+([\"\w]+)/) do |s|
    m = /\bVISIBLE\s+([\"\w]+)/.match s
    case type_of(m[1])
    when :symbol
      "puts @#{m[1]}"
    else
      "puts #{m[1]}"
    end
  end
  line.gsub!(/\bINVISIBLE\s+([\"\w]+)/) do |s|
    m = /\bINVISIBLE\s+([\"\w]+)/.match s
    case type_of(m[1])
    when :symbol
      "warn @#{m[1]}"
    else
      "warn #{m[1]}"
    end
  end

  # Varible assignment
  line.gsub!(/\bI\s+HAS\s+A\s+(\w+)\s+ITZ\s+([\"\w]+)/) do |s|
    m = /\bI\s+HAS\s+A\s+(\w+)\s+ITZ\s+([\"\w]+)/.match s
    case type_of(m[2])
    when :symbol
      "@#{m[1]} = @#{m[2]}"
    else
      "@#{m[1]} = #{m[2]}"
    end
  end
  line.gsub!(/\bI\s+HAS\s+A\s+(\w+)/, '@\1 = nil')

  # TODO: Library
  line.gsub!(/\bCAN\s+HAS\s+(\w+)/, '# require \'\1\'')

  return line
end