1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
$:.unshift File.join(File.dirname(__FILE__), ".")
require "code_templates.rb"
$GITCONFIG = ENV["GT_CODEGEN_CONFIG"] || "~/.gitconfig"
module CodeGen
def CodeGen.perror(msg)
STDERR.puts "#$0: error: #{msg}"
STDERR.puts "Use '#$0 help' to print usage instructions"
exit(1)
end
def CodeGen.find_user_data
configfile = File.expand_path($GITCONFIG)
if File.exist?(configfile)
name = nil
email = nil
File.open(configfile) do |f|
while (line = f.gets) && (!name||!email) do
name = $1 if !name && line =~ /\s*name\s*=\s*(.*)\s*\n/
email = $1 if !email && line =~ /\s*email\s*=\s*(.*)\s*\n/
end
end
return name, email
else
self.perror("#$GITCONFIG file not found")
exit
end
end
def CodeGen.create_license
name, email = CodeGen.find_user_data
year = Time.now.year
ERB.new($license).result(binding)
end
def CodeGen.filename2classname(filename)
"Gt" + File.basename(filename).gsub(/(^|_)(.)/){$2.upcase}
end
def CodeGen.extract_functions_from_rep(classN, repfile)
get_parameters=false
functions = Hash.new
repfile.each do |line|
if line.match /^typedef (\S+( \S+)* \*?)\(\*#{classN}(\w+)\)/
functions[$3] = [$1]
get_parameters = $3
end
if get_parameters
line.scan /(\w+(\s\w+)*[*]?)(,|\);)/ do |parameter|
functions[get_parameters].push parameter[0]
end
get_parameters = false if line.match /\);/
end
break if line.match /^struct #{classN}/
end
return functions
end
end
|