# GTK3 for nimrod, fix this:
# proc gtk_image_menu_item_get_image*(image_menu_item: PImageMenuItem): PWidget {.
#
# and this also:
# proc gtk_image_menu_item_get_image*(
# image_menu_item: PImageMenuItem): PWidget {.
#
# also used for gdk_ and gtk_x11_ prefix
#
# http://stackoverflow.com/questions/1509915/converting-camel-case-to-underscore-case-in-ruby
class String
  def underscore
    self.gsub(/::/, '/').
    gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
    gsub(/([a-z\d])([A-Z])/,'\1_\2').
    tr("-", "_").
    downcase
  end
end
last_line = nil
arg0 = ARGV[0]
prefix = ARGV[1]
text = File.read(arg0)
text << "\n"
File.open(arg0, "w") {|file|
	text.lines{|line|
		if last_line
			long = last_line.chop + line
			#if not (/pack_((start)|(end))/.match(long))
				if m = /^\s*proc #{prefix}([a-z]+_)?([a-z]+_)?([a-z]+_)?([a-z]+_)?\w*\*\(\s*(\w+): (\w+)/.match(long)
					a, b, c, d, pp, dt = m[1..6]
					if a && pp && dt
						dt = dt[1..-1].underscore
						b ||= ''
						c ||= ''
						d ||= ''
						c1 = c2 = ''
						p = pp + '_'
						if (a + b + c + d == p) || (a + b + c == p) ||(a + b == p) || (a == p)
							c1 = pp
						end
						p = dt + '_'
						if (a + b + c + d == p) || (a + b + c == p) ||(a + b == p) || (a == p)
							c2 = dt
						end
						p = (c1.length > c2.length ? c1 : c2)
						if p.length > 0
							last_line.sub!(prefix + p + '_', '')
						end
					end
				end
			#end
			file.write(last_line)
		end
		last_line = line.dup
	}
}

