def get_numbers_until_end_block(table) while gets break if /\};/ =~ $_ next if /^\/\// =~ $_ split(/,/).each do |number| n = number.strip table.push(n.to_i) unless n == "" end end table end while gets break if /protected static final short\[\] yyTable = \{/ =~ $_ print $_ end # A little hacky...gets before ARGV to shift off and open file yytable_prefix = ARGV.shift || '' table4 = get_numbers_until_end_block([]) puts " protected static final short[] yyTable = #{yytable_prefix}YyTables.yyTable();" while gets break if /protected static final short\[\] yyCheck = \{/ =~ $_ print $_ end check4 = get_numbers_until_end_block([]) puts " protected static final short[] yyCheck = #{yytable_prefix}YyTables.yyCheck();" while gets print $_ end table2 = table4.slice!(0, table4.size / 2) table3 = table4.slice!(0, table4.size / 2) table1 = table2.slice!(0, table2.size / 2) check2 = check4.slice!(0, check4.size / 2) check3 = check4.slice!(0, check4.size / 2) check1 = check2.slice!(0, check2.size / 2) def printShortArray(table, f) table.each_with_index { |e, i| f.print "\n " if (i % 10 == 0) begin f.printf "%4d, ", e rescue ArgumentError => a $stderr.puts "Trouble printing '#{e}' on index #{i}" end } end def printShortMethod(f, table, name) f.puts " private static final short[] yy#{name}() {" f.puts " return new short[] {" printShortArray table, f f.puts f.puts " };" f.puts " }" f.puts end open("#{yytable_prefix}YyTables.java", "w") { |f| f.print <