class Hsss::COutput

Constants

EXT

Attributes

count_name[RW]
hashes_struct[RW]
iter_macro_name[RW]
names_struct[RW]
row_struct_name[RW]
scripts_struct[RW]
struct_name[RW]

Public Class Methods

new(files, opt={}) click to toggle source
# File lib/hsss.rb, line 29
def initialize(files, opt={})
  @scripts={}
  names = { struct_name: DEFAULT_STRUCT_NAME, 
    row_struct_name: DEFAULT_ROW_STRUCT_NAME,
    hashes_struct: DEFAULT_HASHES_NAME,
    names_struct: DEFAULT_NAMES_NAME,
    scripts_struct: DEFAULT_SCRIPTS_NAME,
    count_name: DEFAULT_COUNT_NAME,
    iter_macro_name: DEFAULT_ITER_MACRO_NAME}
  
  names.each do |var, default|
    send "#{var}=", opt[var]!=false ? opt[var] || cased_prefix(opt[:prefix], default) : false
  end
  @static=opt[:no_static] ? "" : "static "
  @header_only = opt[:header_only]
  @data_only = opt[:data_only]
  @include_count = !opt[:skip_count]
  @include_iter_macro = !opt[:skip_each]
  @header_guard = opt[:header_guard] || "LUA_SCRIPTS_H"
  @header_guard = false if @header_guard.length == 0
  @include_hash = !!hashes_struct
  
  (Array === files ? files : [ files ]).each do |f|
    begin
      file_contents = IO.read f
      if opt[:no_luac] or check_script(f)
        @scripts[File.basename(f, ".#{EXT}") .to_sym]=file_contents
      end
    rescue Errno::ENOENT => e
      STDERR.puts "Failed to open file #{f}"
      @failed = true
    end
  end
  
  @struct=[]
  @name_table=[]
  @script_table=[]
  @hashed_table=[]
  
  @scripts.sort_by {|k,v| k}.each do |v| 
    name=v.first
    script=v.last
    
    @name_table << name
    
    str=[]
    for l in script.lines do
      cmt=l.match /^--(.*)/
      break unless cmt
      str << "  //#{cmt[1]}"
    end
    str << "  #{script_name_line(name)}\n"
    @struct << str.join("\n")
    
    @script_table << script_string(name, script)
    
    @hashed_table << Digest::SHA1.hexdigest(script) if @include_hash
  end
end

Public Instance Methods

cased_prefix(prefix, name) click to toggle source
# File lib/hsss.rb, line 18
def cased_prefix(prefix, name)
  if name
    if name.upcase == name and name.downcase != name
      name = "#{(prefix || DEFAULT_PREFIX).upcase}#{name}"
    else
      name = "#{(prefix || DEFAULT_PREFIX)}#{name}"
    end
  end
  name
end
check_script(path) click to toggle source
# File lib/hsss.rb, line 89
def check_script(path)
  ret = system "luac -p #{path}"
  @failed = true unless ret
  ret
end
cquote(str, line_start="") click to toggle source
# File lib/hsss.rb, line 95
def cquote(str, line_start="")
  out=[]
  if str.length == 0
    return "#{line_start}\"\"" #empty string
  end
  str.each_line do |l|
    l.gsub!("\\", '\\\\\\') #escape backslashes
    l.sub! "\n", "\\n"
    l.gsub! '"', '\"'
    l.gsub! /^(.*)$/, "#{line_start}\"\\1\""
    out << l
  end
  out.join "\n"
end
failed?() click to toggle source
# File lib/hsss.rb, line 110
def failed?
  @failed
end