Class: Rbind::GeneratorRuby
- Inherits:
-
Object
- Object
- Rbind::GeneratorRuby
show all
- Defined in:
- lib/rbind/generator_ruby.rb
Defined Under Namespace
Classes: HelperBase, RBindHelper, RTypeHelper
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(root, module_name = "Rbind", library_name = "rbind_lib") ⇒ GeneratorRuby
Returns a new instance of GeneratorRuby.
338
339
340
341
342
343
|
# File 'lib/rbind/generator_ruby.rb', line 338
def initialize(root,module_name ="Rbind",library_name="rbind_lib")
@root = root
@rbind_wrapper = ERB.new(File.open(File.join(File.dirname(__FILE__),"templates","ruby","rbind.rb")).read)
@module_name = module_name
@library_name = library_name
end
|
Instance Attribute Details
#library_name ⇒ Object
Returns the value of attribute library_name.
335
336
337
|
# File 'lib/rbind/generator_ruby.rb', line 335
def library_name
@library_name
end
|
#module_name ⇒ Object
Returns the value of attribute module_name.
334
335
336
|
# File 'lib/rbind/generator_ruby.rb', line 334
def module_name
@module_name
end
|
Class Method Details
.keyword?(name) ⇒ Boolean
7
8
9
|
# File 'lib/rbind/generator_ruby.rb', line 7
def self.keyword?(name)
%w{__FILE__ __LINE__ alias and begin BEGIN break case class def defined? do else elsif end END ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield}.include? name
end
|
.normalize_arg_name(name) ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/rbind/generator_ruby.rb', line 11
def self.normalize_arg_name(name)
name = name.to_s.sub(/\A#{RBase.cprefix}?/, "").gsub(/(?<!\A)\p{Lu}/u, '_\0').downcase
name = if keyword?(name)
"#{name}_"
else
name
end
if name =~/\d(.*)/
"_#{name}"
else
name
end
end
|
.normalize_basic_type_name(name) ⇒ Object
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/rbind/generator_ruby.rb', line 67
def self.normalize_basic_type_name(name)
@@basic_type_map ||= {"char *" => "string","unsigned char" => "uchar" ,"const char *" => "string" }
n = @@basic_type_map[name]
n ||= name
if n =~ /\*/
"pointer"
else
n
end
end
|
.normalize_default_value(parameter) ⇒ Object
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
|
# File 'lib/rbind/generator_ruby.rb', line 26
def self.normalize_default_value(parameter)
return nil unless parameter.default_value
val = if parameter.type.basic_type? || parameter.type.ptr?
if parameter.type.name == "float"
parameter.default_value.gsub("f","")
elsif parameter.type.name == "double"
parameter.default_value.gsub(/\.$/,".0")
else
parameter.default_value
end
else
if(parameter.default_value =~ /(\w*)\((.*)\)/)
t = parameter.owner.owner.type($1,false)
if t
"#{normalize_type_name(t.full_name)}.new(#{$2})"
else
ns = RBase.namespace($1)
t = parameter.owner.owner.type(ns,false) if ns
ops = Array(t.operation($1,false)) if t
"#{normalize_method_name(ops.first.full_name)}(#{$2})" if ops && !ops.empy?
end
else
parameter.default_value
end
end
if val
val
else
raise "cannot parse default parameter value #{parameter.default_value} for #{parameter.owner.signature}"
end
end
|
.normalize_method_name(name) ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/rbind/generator_ruby.rb', line 78
def self.normalize_method_name(name)
name = name.to_s.sub(/\A#{RBase.cprefix}?/, "").gsub(/(?<!\A)\p{Lu}/u, '_\0').downcase
str = ""
name.split("_").each_with_index do |n,i|
if n.empty?
str += "_"
next
end
if n.size == 1 && i > 1
str += n
else
str += "_#{n}"
end
end
name = str[1,str.size-1]
name = if name =~/^operator(.*)/
n = $1
if n =~ /\(\)/
raise "forbbiden method name #{name}"
elsif n=~ /(.*)(\d)/
if $1 == "[]"
"array_operator#{$2}"
elsif $1 == "+"
"plus_operator#{$2}"
elsif $1 == "-"
"minus_operator#{$2}"
elsif $1 == "*"
"mul_operator#{$2}"
elsif $1 == "/"
"div_operator#{$2}"
else
raise "forbbiden method name #{name}"
end
else
n
end
else
name
end
end
|
.normalize_type_name(name) ⇒ Object
59
60
61
62
63
64
65
|
# File 'lib/rbind/generator_ruby.rb', line 59
def self.normalize_type_name(name)
name.split("::").map do |n|
n.gsub(/^(\w)(.*)/) do
$1.upcase+$2
end
end.join("::")
end
|
Instance Method Details
#generate(path = nil) ⇒ Object
345
346
347
348
349
350
351
352
353
354
355
|
# File 'lib/rbind/generator_ruby.rb', line 345
def generate(path=nil)
FileUtils.mkdir_p(path) if path && !File.directory?(path)
file_rbind = File.new(File.join(path,"opencv.rb"),"w")
file_types = File.new(File.join(path,"opencv_types.rb"),"w")
types = RTypeHelper.new(@module_name,@root)
file_types.write types.result
rbind = RBindHelper.new(@module_name,@root)
rbind.library_name = @library_name
file_rbind.write @rbind_wrapper.result(rbind.binding)
end
|