Method: RGSS.scripts_to_text

Defined in:
lib/RGSS/serialize.rb

.scripts_to_text(dirs, src, dest, options) ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/RGSS/serialize.rb', line 167

def self.scripts_to_text(dirs, src, dest, options)
  formatador = Formatador.new
  src_file = File.join(dirs[:data], src)
  dest_file = File.join(dirs[:yaml], dest)
  raise "Missing #{src}" unless File.exist?(src_file)
  script_entries = load(:load_data_file, src_file)
  check_time = !options[:force] && File.exist?(dest_file)
  oldest_time = File.mtime(dest_file) if check_time

  file_map, script_index, script_code = Hash.new(-1), [], {}

  idx = 0
  script_entries.each do |script|
    idx += 1
    magic_number, script_name, code = idx, script[1], inflate(script[2])
    script_name.force_encoding("UTF-8")

    if code.length > 0
      filename = script_name.empty? ? 'blank' : sanitize_filename(script_name)
      key = filename.upcase
      value = (file_map[key] += 1)
      actual_filename = filename + (value == 0 ? "" : ".#{value}") + RUBY_EXT
      script_index.push([magic_number, script_name, actual_filename])
      full_filename = File.join(dirs[:script], actual_filename)
      script_code[full_filename] = code
      check_time = false unless File.exist?(full_filename)
      oldest_time = [File.mtime(full_filename), oldest_time].min if check_time
    else
      script_index.push([magic_number, script_name, nil])
    end
  end

  src_time = File.mtime(src_file)
  if check_time && (src_time - 1) < oldest_time
    formatador.display_line("[yellow]Skipping scripts to text[/]") if $VERBOSE
  else
    formatador.display_line("[green]Converting scripts to text[/]") if $VERBOSE
    dump(:dump_yaml_file, dest_file, script_index, src_time, options)
    script_code.each { |file, code| dump(:dump_raw_file, file, code, src_time, options) }
  end
end