$aFile = File.open("riddle.rb", "r") $strings = [] $comments = [] $body = "" $escapeTable = { "a" => 0x07, # Bell "b" => 0x08, # Backspace "e" => 0x1b, # Escape "f" => 0x0c, # Formfeed "n" => 0x0a, # New Line "r" => 0x0d, # Carriage Return "s" => 0x20, # Space "t" => 0x09, # Tab "v" => 0x0b, # Vertical Tab "\\" => "\\" # BackSlash } def escapeInHex(c) return $escapeTable[c] end def comment(input) return input.gets end def parseString(stopAt, extra) str = "" while (c2 = $aFile.getc) c = c2.chr if(c == stopAt) break elsif(c == "\\") c2 = $aFile.getc if(!c2) break elsif(c2.chr =~ /[abefnrstv]|\\/) str << escapeInHex(c2.chr) elsif(extra && c2.chr =~ /[0-7]/) print "octal parsing not yet implemented" str << c + c2.chr elsif(extra && c2.chr =~ /[xX]/) print "hex parsing not yet implemented" str << c + c2.chr elsif(extra && c2.chr =~ "[cC]") print "control parsing not yet implemented" str << c + c2.chr elsif(extra && c2.chr == "M") print "Meta parsing not yet implemented" str << c + c2.chr elsif(extra && c2.chr == "M") print "Meta-control parsing not yet implemented" str << c + c2.chr elsif(extra && c2.chr == "{") print "expression parsing not yet implemented" str << c + c2.chr else str << c + c2.chr end else str << c end end return str end while (ch = $aFile.getc) case ch.chr when "#" $body << "#comments[#{$comments.size}]\n" $comments << comment($aFile) when "'" $body << "strings[#{$strings.size}]" $strings << parseString("'", false) when '"' $body << "strings[#{$strings.size}]" $strings << parseString('"', true) else $body << ch end # case end # while print "\nstrings: #{$strings.size}\n", $strings.inspect print "\ncomments: #{$comments.size}\n", $comments.inspect, "\n" print $body print "\n"