[ create a new paste ] login | about

Link: http://codepad.org/2sth8vhu    [ raw code | output | fork ]

Ruby, pasted on Jan 20:
s="if for each map class def module times lambda do".split.inject "" do |a , m|
#   a + "\\s?.*#{m}{\\s?.*|\(}" + "|"
#   a + "[\\s?.*|^\\s.?]#{m}[\\s?.*|\(|\"|\'|\`|\~|\?|\{]" + "|"   
   a + "\\s?.*#{m}[\\s?.*|\(|\"|\'|\`|\~|\?|\{]" + "|"
#   a + m + "|"
end
do_yoyakugo = /#{s.chop}/
#do_yoyakugo = /if|for|each|class|def|times/

#exit

sp  = []
kp  = []
out = ""
src = DATA.read + "\n__END__"

#ダブルクオーテーション関係
sstk = Hash.new
instance_exec src.clone do | srct |
  srct.scan(/\"(.*)\"/).each_with_index do | ( s )  , i |
   i = i.to_s
   src.sub!( sstk.store( 255.chr + i ,  s ) , 255.chr + i )
  end
end
# p sstk

src.each_line do | s |
  s.chomp!
  # 半角スペース数える
  s.each_byte.each_with_index do | c , i |
    if c.chr != "\s"
      sp.push i
      # 予約語見つけたら半角スペースの数をメモ
      if s =~ do_yoyakugo
        kp.push i
      end
      break
    end # if
  end # injct
  
  endf = nil
  # end を装飾する
  if ( sp[-2] and sp[-1] ) and ( sp[-2] > sp[-1] )
    loop do
      m = kp.pop
      if (endf and m == endf) || (m.nil? || sp.last > m)
        kp.push m
#        print:bre
#        p s        
        endf = nil
        break
      end
      endf = m
      tmp = "end".rjust(3+m," ")
      out << tmp+"\n"
    end
  end
  #既にendが書かれていたらそのendをスルーする
  if s =~ /\s?.*?(.*end)\s?.*/
  # todo
#    endf = $1.size-3
  else
    out << s+"\n"
  end
end # each

#p sp
#p kp

sstk.each do | k , v |
  out.sub!( k  , v )
end

puts out

eval out


__END__


class A
  def func
    for i in 1..3
      for n in 1..3
        printf "%02d " % ( i * n )
      puts

A.new.func

[4,5,6].map do |x|
  puts x
  3.times do |n|
    print "_"
puts
print "if  for each map class def module times lambda do"


Output:
1
2
3
4
Line 21: syntax error, unexpected ',', expecting tCOLON2 or '[' or '.'
  srct.scan(/\"(.*)\"/).each_with_index do | ( s )  , i |
                                                     ^
Line 25: syntax error, unexpected kEND, expecting $end


Create a new paste based on this one


Comments: