Newer
Older
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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
118
119
120
121
#!/bin/env ruby
$special_stubclasses = ["FXGLSHAPE", "FXICONITEM", "FXTABLE", "FXTABLEITEM", "FXTREEITEM"]
class Processor
def initialize
@inside_class = false
end
def inside_class?
@inside_class
end
def getBaseClassName(klass)
klass.sub(/FXRb/, "FX")
end
def start_class(classname, baseclass)
end
def end_class
end
def process(filename)
begin
File.open(filename, "rb") do |f|
@inside_class = false
f.readlines.each do |line|
if inside_class?
if line =~ /^ \};/
@inside_class = false
end_class
else
process_line(line)
end
else
if line =~ /^class/
classname = line.split.at(1)
start_class(classname, getBaseClassName(classname))
@inside_class = true
end
end
end
end
ensure
@inside_class = false
end
end
end
class MyProcessor < Processor
def initialize(fcpp, finc)
@fcpp = fcpp
@finc = finc
@classname = nil
@baseclass = nil
end
def start_class(classname, baseclass)
@classname = classname
@baseclass = baseclass
if classname == "FXRbScintilla"
@fcpp.puts "#ifdef WITH_FXSCINTILLA\n\n"
@finc.puts "#ifdef WITH_FXSCINTILLA\n\n"
end
@fcpp.printf("/* Start stub implementations for class %s */\n", classname)
@finc.printf("/* Start stub declarations for class %s */\n", classname)
end
def implement_overrides(filename)
stubclass = filename.gsub('"', '').sub("FXRb", "FX")
stubclass = stubclass.sub(/Virtuals\.h/, "").upcase
unless $special_stubclasses.include? stubclass
@fcpp.printf("IMPLEMENT_%s_STUBS(%s)\n", stubclass, @classname)
else
@fcpp.printf("IMPLEMENT_%s_STUBS(%s,%s)\n", stubclass, @classname, @baseclass)
end
end
def implement_stubs(filename)
stubclass = filename.gsub('"', '').sub("FXRb", "FX")
stubclass = stubclass.sub(/Virtuals\.h/, "").upcase
unless $special_stubclasses.include? stubclass
@finc.printf("DECLARE_%s_STUBS(%s)\n", stubclass, @baseclass)
else
@finc.printf("DECLARE_%s_STUBS(%s,%s)\n", stubclass, @baseclass, @classname)
end
end
def process_line(line)
if line =~ /^#include/
words = line.split()
incfile = words[1]
implement_overrides(incfile)
implement_stubs(incfile)
end
end
def end_class
if @classname == "FXRbScintilla"
@fcpp.puts "\n#endif"
@finc.puts "\n#endif"
end
@fcpp.puts ""
@finc.puts ""
@classname = nil
@baseclass = nil
end
end
fcpp = File.new('impl.cpp', 'wb')
finc = File.new('./include/inlinestubs.h', 'wb')
fcpp.puts '#include "FXRbCommon.h"'
Dir.glob("./include/FX*.h").sort.each do |file|
unless file =~ /BitmapView/
MyProcessor.new(fcpp, finc).process(file)
end
end
finc.close
fcpp.close