Sha256: 55092e47b1581dd3259749159bfdd71e3f13183efae26b2696459ccc9c45ac05
Contents?: true
Size: 1.86 KB
Versions: 2
Compression:
Stored size: 1.86 KB
Contents
require 'rubygems' require 'bundler/setup' require 'pry' require 'pp' input_paths = if ARGV.empty? Dir.glob("#{File.dirname(__FILE__)}/*.in.rb") else ARGV end.map { |p| File.expand_path p } input_paths.each_with_index do |input_path, i| pid = fork do require_relative 'init.rb' begin output_path = input_path.gsub /\.in\.rb$/, '.out.rb' input = File.readlines(input_path) chunks = [] line = '' while !input.empty? line += input.shift if Pry::Code.complete_expression? line chunks << line line = '' end end raise unless line.empty? chunks.map! { |chunk| [chunk, [chunk.split($/).size, 1].max] } environment = Module.new.send :binding evaluate = ->(code, line) do eval(code, environment, input_path, line) end indent = 50 line_count = 1 output = '' chunks.each do |chunk, lines| result = evaluate.(chunk, line_count) unless chunk.strip.empty? || chunk =~ /\A *#/ pre_lines = chunk.lines.to_a last_line = pre_lines.pop output << pre_lines.join if last_line =~ /\#$/ output << last_line.gsub(/\#$/, '') else if last_line.size < indent && result.inspect.size < indent output << "%-#{indent}s %s" % [last_line.chomp, "# => #{result.inspect}\n"] else output << last_line << " # => #{result.inspect}\n" end end else output << chunk end line_count += lines end puts "#{input_path}\n -> #{output_path}" #puts output File.write(output_path, output) rescue => ex puts "#{ex} (#{ex.class})\n#{ex.backtrace * "\n"}" end end Process.wait pid end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
algebrick-0.7.0 | doc/format.rb |
algebrick-0.5.0 | doc/format.rb |