class EasySwig::Generator
Attributes
class_generator[RW]
hfile_generator[RW]
namespace_generator[RW]
Public Class Methods
create_instance(hfiles, api_namespace, config, log)
click to toggle source
# File lib/generators/generator.rb, line 10 def self.create_instance(hfiles, api_namespace, config, log) ret = case config.lang when 'csharp' EasySwig::Csharp::CsharpGenerator.new(hfiles, api_namespace, config, log) when 'java' EasySwig::Java::JavaGenerator.new(hfiles, api_namespace, config, log) else EasySwig::Generator.new(hfiles, api_namespace, config, log) end ret end
new(hfiles, api_namespace, config, log)
click to toggle source
# File lib/generators/generator.rb, line 22 def initialize(hfiles, api_namespace, config, log) @config = config @gen_dir = @config.generate_dir + '/' + @config.lang @log = log @hfiles = hfiles @api_namespace = api_namespace @target_name = api_namespace.target_name @native_name = api_namespace.basename @native_gen_dir = "#{@gen_dir}/#{@native_name}" @all_types = {} @all_innerclasses = {} @all_friends = {} if Dir.exists?(@native_gen_dir) FileUtils.rm_r @native_gen_dir end FileUtils.mkdir_p @native_gen_dir @log.info { "Created Generator directory for #{@native_name} in #{@native_gen_dir}" } init_generators end
Public Instance Methods
generate()
click to toggle source
# File lib/generators/generator.rb, line 44 def generate @log.info { 'Generating interface files...' } namespace_file = <<-IFILE.escape_heredoc %module #{@target_name} %include "standard_header.i" %include "#{@config.custom_file}" IFILE namespace_file << @namespace_generator.new(@api_namespace).generate() @hfiles.each { |hfile| generate_ifile(hfile) ifile = to_ifile(hfile.name) namespace_file << %Q{%include "#{@native_name}/#{ifile}"\n} } write_file("#{@gen_dir}/#{namespace_filename(@native_name)}.i", namespace_file) @log.info { "Interface file #{@gen_dir}/#{namespace_filename(@native_name)}.i created" } namespace_filename(@native_name) end
Protected Instance Methods
generate_ifile(hfile)
click to toggle source
# File lib/generators/generator.rb, line 79 def generate_ifile(hfile) swig_file = <<-IFILE.escape_heredoc %module #{@target_name} %include "standard_header.i" %include "custom_config.i" // Include headers: %{ #include "#{hfile.name}" %} // Rename and ignore members: IFILE @log.debug { "Generating renames for #{hfile.name} ..." } swig_file << @hfile_generator.new(hfile).generate class_generators = [] hfile.api_classes.each { |api_cls| class_gen_instance = @class_generator.new(api_cls, @all_types, @all_innerclasses, @all_friends) class_generators << class_gen_instance swig_file << class_gen_instance.process_types swig_file << class_gen_instance.gen_friends swig_file << class_gen_instance.gen_methods swig_file << class_gen_instance.gen_attributes swig_file << class_gen_instance.gen_enums swig_file << class_gen_instance.gen_innerclasses swig_file << class_gen_instance.gen_type_templates } swig_file << %Q{%include "#{hfile.name}"} ifile = to_ifile(hfile.name) write_file(%Q{#{@native_gen_dir}/#{ifile}}, swig_file) @log.info { "Interface file #{@native_name}/#{ifile} created" } end
init_generators()
click to toggle source
# File lib/generators/generator.rb, line 68 def init_generators @class_generator = EasySwig::ClassGenerator @namespace_generator = EasySwig::NamespaceGenerator @hfile_generator = EasySwig::HFileGenerator end
namespace_filename(native_name)
click to toggle source
# File lib/generators/generator.rb, line 119 def namespace_filename native_name "ns_#{native_name}" end
to_ifile(filename)
click to toggle source
# File lib/generators/generator.rb, line 74 def to_ifile(filename) extension = File.extname(filename) filename.gsub(extension, '.i') end