neri 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b8b9f832233b4284f8fae7b0169f6d8e9f2bb2b309c9886cd93cdc8d84a73d4
4
- data.tar.gz: 3465c27fe19e8efbbd24aaf259eeb72cc5caa70c9c616c8b2e4df0a1e6736de7
3
+ metadata.gz: c9c11506aa1729506a8f2386ea1a37e45c6ef5f72cec65e3677931ef6f18910f
4
+ data.tar.gz: fb4307dd5e026985659ab652e27436759bd60531f1b9044ab6ca82f6d28eab22
5
5
  SHA512:
6
- metadata.gz: 00a248fb2575ecc167c6131adcfa309852abc7daf5b25e870ce8c39fc89e826d8130990de79ecc5b1548307778aa37656cfd8a4342fa890ee5d524665dd2bae4
7
- data.tar.gz: d4235f7b16f22018c093202f512952f1ad2464b03454e3f31fe83e4ec4b7213a638d52d176b4aecf6b145cc4cfac2c94dfe68ed3c1eb6ade0a30209c3a9c95f7
6
+ metadata.gz: b2d6307c498084b7327d96fb041304b6df4f2aca8756a81f90d6065b1a5b966eef64056d76ca6917267bd75f531ec1bead1e987195fc7379276d0de3233af7aa
7
+ data.tar.gz: b2002fe10dc92c4c87ddf7e961d77c5bddda93f0b9782b41e87e2b4ae5cc969b11123217b98f4d91d75a25c64db934a3db8eab6ed39be6072f3c046214923811
data/lib/neri/ayame.rb CHANGED
@@ -5,12 +5,9 @@ require "ayame" unless defined? Ayame
5
5
  module Neri
6
6
  module Ayame
7
7
  def new(filename)
8
- if Neri.exist_in_datafile?(filename)
9
- ayame = load_from_memory(Neri.file_read(filename))
10
- return ayame
11
- else
12
- return super
13
- end
8
+ return super unless Neri.exist_in_datafile?(filename)
9
+
10
+ load_from_memory(Neri.file_read(filename))
14
11
  end
15
12
  end
16
13
  end
data/lib/neri/build.rb CHANGED
@@ -1,39 +1,38 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
2
 
4
3
  require "neri"
5
4
 
6
5
  module Neri
7
6
  @data_files = []
8
-
7
+
9
8
  @options = {
10
9
  quiet: false,
11
10
  verbose: false,
12
-
11
+
13
12
  external_encoding: nil,
14
-
13
+
15
14
  dlls: [],
16
15
  libs: [],
17
16
  gems: [],
18
17
  encoding: "*",
19
-
18
+
20
19
  enable_gems: false,
21
20
  enable_did_you_mean: false,
22
21
  chdir_first: false,
23
22
  pause_last: nil,
24
23
  pause_text: nil,
25
-
24
+
26
25
  output_dir: "./",
27
26
  system_dir: "system",
28
-
27
+
29
28
  datafile: nil,
30
29
  encryption_key: nil,
31
-
30
+
32
31
  no_exe: false,
33
32
  use_b2ec: false,
34
33
  b2ec_path: "Bat_To_Exe_Converter",
35
34
  b2ec: {
36
- icon: "#{File.expand_path(File.dirname(__FILE__) + '/../../share/default.ico')}",
35
+ icon: File.expand_path("#{File.dirname(__FILE__)}/../../share/default.ico"),
37
36
  invisible: nil,
38
37
  x64: nil,
39
38
  uac_admin: nil,
@@ -50,50 +49,49 @@ module Neri
50
49
  specialbuild: nil,
51
50
  comments: nil
52
51
  },
53
-
52
+
54
53
  use_upx: false,
55
54
  upx_path: "upx",
56
55
  upx_targets: ["bin/**/*.dll"],
57
56
  upx_options: "",
58
-
57
+
59
58
  zipfile: nil,
60
59
  sevenzip_path: "7z",
61
-
60
+
62
61
  inno_script: nil,
63
- iscc_path: "iscc",
62
+ iscc_path: "iscc"
64
63
  }
65
64
  @rubyopt = ENV["RUBYOPT"].to_s
66
65
  @args = ""
67
66
  @encryption_key = nil
68
-
67
+
69
68
  @use_dxruby = false
70
69
  @use_dxruby_tiled = false
71
70
  @use_ayame = false
72
-
71
+
73
72
  class << self
74
-
75
73
  attr_reader :options
76
-
77
- def relative_path(path, basedir=rubydir, prepath = "")
74
+
75
+ def relative_path(path, basedir = rubydir, prepath = "")
78
76
  basedir.concat(File::SEPARATOR) unless basedir.end_with?(File::SEPARATOR)
79
- return path.start_with?(basedir) ? path.sub(basedir, prepath) : path
77
+ path.start_with?(basedir) ? path.sub(basedir, prepath) : path
80
78
  end
81
-
79
+
82
80
  def to_winpath(path)
83
- return File::ALT_SEPARATOR ? path.tr(File::SEPARATOR, File::ALT_SEPARATOR) : path
81
+ File::ALT_SEPARATOR ? path.tr(File::SEPARATOR, File::ALT_SEPARATOR) : path
84
82
  end
85
-
86
- def bindir( ); RbConfig::CONFIG["bindir"] || File.join(rubydir, "bin"); end
87
- def rubydir( ); File.join(RbConfig::TOPDIR, ""); end
88
- def rubyexe( ); RbConfig.ruby; end
89
- def scriptfile(); @data_files.first; end
90
- def basename( ); File.basename(scriptfile, ".*"); end
91
- def basepath( ); File.join(options[:output_dir], basename); end
92
- def datafile( ); File.join(options[:output_dir], options[:system_dir], options[:datafile]); end
93
-
83
+
84
+ def bindir ; RbConfig::CONFIG["bindir"] || File.join(rubydir, "bin"); end
85
+ def rubydir ; File.join(RbConfig::TOPDIR, ""); end
86
+ def rubyexe ; RbConfig.ruby; end
87
+ def scriptfile; @data_files.first; end
88
+ def basename ; File.basename(scriptfile, ".*"); end
89
+ def basepath ; File.join(options[:output_dir], basename); end
90
+ def datafile ; File.join(options[:output_dir], options[:system_dir], options[:datafile]); end
91
+
94
92
  # --help
95
93
  def output_help
96
- puts <<-EOF
94
+ puts <<-HELP_MESSAGE
97
95
  usage: neri [options] script.rb (other_files...) -- script_arguments
98
96
 
99
97
  options:
@@ -101,28 +99,28 @@ options:
101
99
  --version or -v
102
100
  --quiet
103
101
  --verbose
104
-
102
+
105
103
  --external-encoding <encoding>
106
-
104
+
107
105
  --dll <dll1>,<dll2>,...
108
106
  --lib <lib1>,<lib2>,...
109
107
  --gem <gem1>,<gem2>,...
110
-
108
+
111
109
  --no-enc
112
110
  --encoding <enc1>,<enc2>,...
113
-
111
+
114
112
  --enable-gems
115
113
  --enable-did-you-mean
116
114
  --chdir-first
117
115
  --pause-last
118
116
  --no-pause-last
119
117
  --pause-text <text>
120
-
118
+
121
119
  --output-dir <dirname>
122
120
  --system-dir <dirname>
123
121
  --datafile <filename>
124
122
  --encryption-key <key>
125
-
123
+
126
124
  --no-exe
127
125
  --use-b2ec
128
126
  --b2ec-path <bat_to_exe_converter_path>
@@ -143,28 +141,28 @@ options:
143
141
  --privatebuild <string>
144
142
  --specialbuild <string>
145
143
  --comments <string>
146
-
144
+
147
145
  --use-upx
148
146
  --upx-path <upx path>
149
147
  --upx_targets '<glob>' # ex) 'bin/**/*.dll'
150
148
  --upx-options <options>
151
-
149
+
152
150
  --zipfile <filename>
153
151
  --7zip-path <7-zip path>
154
-
152
+
155
153
  --innosetup <inno_script>
156
154
  --iscc-path <iscc path>
157
-
155
+
158
156
  --create-recipe <recipefile>
159
157
  --recipe <recipefile>
160
- EOF
158
+ HELP_MESSAGE
161
159
  end
162
-
160
+
163
161
  # --version
164
162
  def output_version
165
163
  puts "Neri #{Neri::VERSION}"
166
164
  end
167
-
165
+
168
166
  # --create-recipe
169
167
  def create_recipe(file, hash = options, pre = "Neri.options")
170
168
  hash.each_pair do |key, value|
@@ -180,8 +178,7 @@ options:
180
178
  end
181
179
  end
182
180
  end
183
-
184
-
181
+
185
182
  def check_options
186
183
  nputs_v "Checking Neri options."
187
184
  while arg = ARGV.shift
@@ -194,7 +191,7 @@ options:
194
191
  exit
195
192
  when "--quiet", "-q"
196
193
  options[:quiet] = true
197
- when "--verbose", "-v"
194
+ when "--verbose"
198
195
  options[:verbose] = true
199
196
  when "--external_encoding"
200
197
  options[:external_encoding] = ARGV.shift
@@ -278,7 +275,7 @@ options:
278
275
  when "--upx-options"
279
276
  options[:upx_options] = ARGV.shift
280
277
  when "--zipfile"
281
- options[:zipfile] = ARGV.shift.encode("utf-8").sub(/\.zip$/, "") + ".zip"
278
+ options[:zipfile] = "#{ARGV.shift.encode('utf-8').sub(/\.zip$/, '')}.zip"
282
279
  when "--7zip-path"
283
280
  options[:sevenzip_path] = ARGV.shift.encode("utf-8")
284
281
  when "--innosetup"
@@ -289,7 +286,7 @@ options:
289
286
  require "json"
290
287
  filename = ARGV.shift.encode("utf-8")
291
288
  nputs "Creating recipe_file '#{filename}'."
292
- open(filename, "w:utf-8"){ |file| create_recipe(file) }
289
+ File.open(filename, "w:utf-8") { |file| create_recipe(file) }
293
290
  exit
294
291
  when "--recipe"
295
292
  filename = ARGV.shift.encode("utf-8")
@@ -305,116 +302,115 @@ options:
305
302
  @data_files.push(arg.encode("utf-8"))
306
303
  end
307
304
  end
308
-
305
+
309
306
  if @data_files.empty?
310
307
  error "No Script File!"
311
308
  output_help
312
309
  exit
313
310
  end
314
-
315
- @args = ARGV.map{ |arg| %[ "#{arg}"] }.join("")
316
- @options[:external_encoding] ||= Encoding::default_external.name
317
- unless options[:enable_gems]
318
- @rubyopt += " --disable-gems" unless @rubyopt.index("--disable-gems")
311
+
312
+ @args = ARGV.map { |a| %( "#{a}") }.join("")
313
+ @options[:external_encoding] ||= Encoding.default_external.name
314
+ unless options[:enable_gems] || @rubyopt.index("--disable-gems")
315
+ @rubyopt += " --disable-gems"
319
316
  end
320
- unless options[:enable_did_you_mean]
321
- @rubyopt += " --disable-did_you_mean" unless @rubyopt.index("--disable-did_you_mean")
317
+ unless options[:enable_did_you_mean] || @rubyopt.index("--disable-did_you_mean")
318
+ @rubyopt += " --disable-did_you_mean"
322
319
  end
323
320
  if @data_files.size > 1 || options[:encryption_key]
324
- options[:datafile] ||= basename + ".dat"
321
+ options[:datafile] ||= "#{basename}.dat"
325
322
  end
326
323
  end
327
-
328
-
324
+
329
325
  # check dependencies
330
- def rb_dependencies()
331
- return $LOADED_FEATURES.uniq
326
+ def rb_dependencies
327
+ $LOADED_FEATURES.uniq
332
328
  end
333
-
334
- def dll_dependencies()
329
+
330
+ def dll_dependencies
335
331
  require "Win32API"
336
-
332
+
337
333
  enumprocessmodules = Win32API.new("psapi" , "EnumProcessModules", ["L","P","L","P"], "L")
338
334
  getmodulefilename = Win32API.new("kernel32", "GetModuleFileNameW", ["L","P","L"], "L")
339
335
  getcurrentprocess = Win32API.new("kernel32", "GetCurrentProcess" , [], "L")
340
-
336
+
341
337
  bytes_needed = 4 * 32
342
338
  module_handle_buffer = nil
343
- process_handle = getcurrentprocess.call()
339
+ process_handle = getcurrentprocess.call
344
340
  loop do
345
341
  module_handle_buffer = "\x00" * bytes_needed
346
342
  bytes_needed_buffer = [0].pack("I")
347
- r = enumprocessmodules.call(process_handle, module_handle_buffer, module_handle_buffer.size, bytes_needed_buffer)
348
- bytes_needed = bytes_needed_buffer.unpack("I")[0]
343
+ enumprocessmodules.call(process_handle, module_handle_buffer, module_handle_buffer.size, bytes_needed_buffer)
344
+ bytes_needed = bytes_needed_buffer.unpack1("I")
349
345
  break if bytes_needed <= module_handle_buffer.size
350
346
  end
351
-
347
+
352
348
  handles = module_handle_buffer.unpack("I*")
353
349
  dependencies = handles.select { |handle| handle > 0 }.map do |handle|
354
350
  str = "\x00\x00" * 256
355
351
  modulefilename_length = getmodulefilename.call(handle, str, str.size)
356
- modulefilename = str[0, modulefilename_length * 2].force_encoding("UTF-16LE").encode("UTF-8")
357
- end
358
-
359
- dependencies.map!{|dep| dep.sub(/^\\\\\?\\/, "")}
360
- if File::ALT_SEPARATOR
361
- dependencies.map!{|dep| dep.tr(File::ALT_SEPARATOR, File::SEPARATOR)}
352
+ str[0, modulefilename_length * 2].force_encoding("UTF-16LE").encode("UTF-8")
362
353
  end
354
+
355
+ dependencies.map! { |dep| dep.sub(/^\\\\\?\\/, "") }
356
+ dependencies.map! { |dep| dep.tr(File::ALT_SEPARATOR, File::SEPARATOR) } if File::ALT_SEPARATOR
363
357
  dependencies.delete(rubyexe)
364
-
365
- return dependencies.uniq
358
+
359
+ dependencies.uniq
366
360
  end
367
-
368
- def ruby_dependencies()
361
+
362
+ def ruby_dependencies
369
363
  dependencies = Dir.glob(File.join(bindir, "**", "*.manifest"))
370
364
  dependencies.push(rubyexe)
371
- return dependencies.uniq
365
+ dependencies.uniq
372
366
  end
373
-
374
- def additional_dlls_dependencies()
367
+
368
+ def additional_dlls_dependencies
375
369
  dependencies = []
376
370
  options[:dlls].each do |dll|
377
371
  dependencies += Dir.glob(File.join(bindir, "**", dll))
378
- dependencies += Dir.glob(File.join(bindir, "**", dll + ".*"))
372
+ dependencies += Dir.glob(File.join(bindir, "**", "#{dll}.*"))
379
373
  end
380
- return dependencies.uniq
374
+ dependencies.uniq
381
375
  end
382
-
383
- def additional_libs_dependencies()
376
+
377
+ def additional_libs_dependencies
384
378
  dependencies = []
385
379
  options[:libs].each do |lib|
386
380
  $LOAD_PATH.each do |path|
387
381
  dependencies += Dir.glob(File.join(path, lib))
388
- dependencies += Dir.glob(File.join(path, lib + ".*"))
382
+ dependencies += Dir.glob(File.join(path, "#{lib}.*"))
389
383
  dependencies += Dir.glob(File.join(path, lib, "**", "*"))
390
384
  end
391
385
  end
392
- return dependencies.uniq
386
+ dependencies.uniq
393
387
  end
394
-
395
- def additional_gems_dependencies()
388
+
389
+ def additional_gems_dependencies
396
390
  require "rubygems"
397
391
  dependencies = []
398
392
  rubygems_dir = File.join(Gem.dir, "gems")
399
393
  options[:gems].each do |gem|
400
- gem.sub!(/\:(.+)/, "")
401
- targets = $1.to_s.split("|")
394
+ gem.sub!(/:(.+)/, "")
395
+ targets = Regexp.last_match(1).to_s.split("|")
402
396
  targets.push("lib/**/*")
403
397
  gem += "-*" unless gem.match("-")
404
- gemdir = Dir.glob(File.join(rubygems_dir, gem)).sort.last
398
+ gemdir = Dir.glob(File.join(rubygems_dir, gem)).max
405
399
  next unless gemdir
400
+
406
401
  targets.each do |target|
407
402
  dependencies += Dir.glob(File.join(gemdir, target))
408
403
  end
409
404
  end
410
- return dependencies.uniq
405
+ dependencies.uniq
411
406
  end
412
-
413
- def encoding_dependencies()
407
+
408
+ def encoding_dependencies
414
409
  return [] unless options[:encoding]
410
+
415
411
  dependencies = []
416
412
  enc_dir = Dir.glob(File.join(RbConfig::CONFIG["archdir"] || RbConfig::TOPDIR, "**", "enc")).first
417
-
413
+
418
414
  options[:encoding].split(",").map(&:strip).each do |enc|
419
415
  case enc
420
416
  when "ja"
@@ -423,21 +419,21 @@ options:
423
419
  end
424
420
  else
425
421
  dependencies += Dir.glob(File.join(enc_dir, "**", enc))
426
- dependencies += Dir.glob(File.join(enc_dir, "**", enc + ".*"))
422
+ dependencies += Dir.glob(File.join(enc_dir, "**", "#{enc}.*"))
427
423
  end
428
424
  end
429
-
430
- return dependencies.uniq
425
+
426
+ dependencies.uniq
431
427
  end
432
-
433
- def check_dependencies()
428
+
429
+ def check_dependencies
434
430
  nputs "Running script '#{scriptfile}' to check dependencies."
435
431
  begin
436
432
  load File.expand_path(scriptfile)
437
433
  rescue SystemExit, Interrupt
438
434
  end
439
435
  nputs "Script '#{scriptfile}' end."
440
-
436
+
441
437
  if defined? DXRuby
442
438
  require "neri/dxruby"
443
439
  @use_dxruby = true
@@ -450,15 +446,15 @@ options:
450
446
  require "neri/ayame"
451
447
  @use_ayame = true
452
448
  end
453
-
454
- if options[:b2ec][:invisible] == nil &&
449
+
450
+ if options[:b2ec][:invisible].nil? &&
455
451
  (File.extname(scriptfile) == ".rbw" || @use_dxruby)
456
452
  options[:b2ec][:invisible] = true
457
453
  end
458
- if options[:pause_last] == nil
459
- options[:pause_last] = true unless options[:b2ec][:invisible]
454
+ if options[:pause_last].nil? && !options[:b2ec][:invisible]
455
+ options[:pause_last] = true
460
456
  end
461
-
457
+
462
458
  require "rbconfig"
463
459
  dependencies = []
464
460
  dependencies += rb_dependencies
@@ -469,59 +465,58 @@ options:
469
465
  dependencies += additional_gems_dependencies
470
466
  dependencies += encoding_dependencies
471
467
  dependencies = select_dependencies(dependencies)
472
-
473
- size = dependencies.map{|d| File.size(d)}.inject(&:+)
468
+
469
+ size = dependencies.map { |d| File.size(d) }.inject(&:+)
474
470
  nputs "#{dependencies.size} files, #{size} bytes dependencies."
475
471
  if options[:verbose]
476
472
  dependencies.each do |dependency|
477
473
  nputs_v " - #{dependency}"
478
474
  end
479
475
  end
480
-
481
- return dependencies
476
+
477
+ dependencies
482
478
  end
483
-
479
+
484
480
  def select_dependencies(dependencies)
485
481
  dependencies.select! do |dependency|
486
482
  dependency.start_with?(rubydir)
487
483
  end
488
-
484
+
489
485
  @data_files.each do |file|
490
486
  dependencies.delete(File.expand_path(file))
491
487
  end
492
-
488
+
493
489
  unless options[:enable_gems]
494
490
  dependencies.delete_if do |dependency|
495
491
  File.basename(dependency) == "rubygems.rb" ||
496
- dependency.split(File::SEPARATOR).index("rubygems")
492
+ dependency.split(File::SEPARATOR).index("rubygems")
497
493
  end
498
494
  end
499
495
  unless options[:enable_did_you_mean]
500
496
  dependencies.delete_if do |dependency|
501
497
  File.basename(dependency) == "did_you_mean.rb" ||
502
- dependency.split(File::SEPARATOR).index("did_you_mean")
498
+ dependency.split(File::SEPARATOR).index("did_you_mean")
503
499
  end
504
500
  end
505
-
506
- return dependencies.uniq
501
+
502
+ dependencies.uniq
507
503
  end
508
-
509
-
504
+
510
505
  def copy_files(dependencies)
511
506
  nputs "Copying dependencies."
512
507
  require "fileutils"
513
508
  src_dir = rubydir
514
509
  desc_dir = File.join(options[:output_dir], options[:system_dir], "")
515
-
510
+
516
511
  system_files = dependencies.map do |file|
517
512
  [file, file.sub(src_dir, desc_dir)]
518
513
  end
519
514
  unless options[:enable_gems]
520
- system_files.each do |src, desc|
521
- desc.sub!(/\/gems(\/\d+\.\d+\.\d+\/)gems\/(.+?)\-[^\/]+\/lib\//, "/vendor_ruby\\1")
515
+ system_files.each do |_src, desc|
516
+ desc.sub!(%r{/gems(/\d+\.\d+\.\d+/)gems/(.+?)-[^/]+/lib/}, "/vendor_ruby\\1")
522
517
  end
523
518
  end
524
-
519
+
525
520
  system_files.each do |src, desc|
526
521
  FileUtils.makedirs(File.dirname(desc))
527
522
  if File.file?(src)
@@ -531,49 +526,47 @@ options:
531
526
  end
532
527
  FileUtils.copy(scriptfile, desc_dir) unless options[:datafile]
533
528
  end
534
-
535
-
536
- def create_datafile()
537
- if @data_files.size > 1 || options[:encryption_key]
538
- options[:datafile] ||= basename + ".dat"
539
- end
529
+
530
+ def create_datafile
540
531
  return unless options[:datafile]
541
-
532
+
542
533
  nputs "Creating datafile '#{datafile}'."
543
534
  data_files = @data_files.select { |file| File.file? file }
544
535
  @data_files.select { |file| File.directory? file }.each do |dir|
545
- data_files += Dir.glob(dir + "/**/*").select { |file| File.file? file }
536
+ data_files += Dir.glob("#{dir}/**/*").select { |file| File.file? file }
546
537
  end
547
538
  if options[:encryption_key]
548
539
  require "digest/sha2"
549
540
  @encryption_key = Digest::SHA2.hexdigest(options[:encryption_key])
550
541
  end
551
542
  Neri.key = @encryption_key || "0" * 64
552
- open(datafile, "wb") do |f|
543
+ File.open(datafile, "wb") do |f|
553
544
  pos = 0
554
- files_str = data_files.map{|file|
555
- filename = File.expand_path(file)
556
- filename = relative_path(filename, rubydir, "*neri*" + File::SEPARATOR)
557
- filename = relative_path(filename, Dir.pwd)
545
+ files_str = data_files.map { |file|
546
+ fullpath = File.expand_path(file)
547
+ filename = if fullpath.start_with?(rubydir)
548
+ relative_path(fullpath, rubydir, "*neri*#{File::SEPARATOR}")
549
+ else
550
+ file
551
+ end
558
552
  filedata = [filename, File.size(file), pos]
559
553
  pos += File.size(file)
560
554
  pos += BLOCK_LENGTH - pos % BLOCK_LENGTH unless pos % BLOCK_LENGTH == 0
561
555
  nputs_v " - #{filename}:#{File.size(file)} bytes"
562
556
  filedata.join("\t")
563
557
  }.join("\n").encode(Encoding::UTF_8)
564
-
565
- f.write(sprintf("%#{BLOCK_LENGTH}d", files_str.bytesize))
558
+
559
+ f.write(format("%#{BLOCK_LENGTH}d", files_str.bytesize))
566
560
  f.write(xor(files_str))
567
561
  data_files.each do |file|
568
562
  f.write(xor(File.binread(file)))
569
563
  end
570
564
  end
571
565
  end
572
-
573
-
574
- def create_batfile()
566
+
567
+ def create_batfile
575
568
  nputs "Creating batch_file '#{basepath}.bat'."
576
-
569
+
577
570
  pause_command = ""
578
571
  if options[:pause_last]
579
572
  pause_command += "echo.\n"
@@ -585,37 +578,37 @@ options:
585
578
  end
586
579
  end
587
580
  chdir = options[:chdir_first] ? 'cd /d "%~dp0"' : ""
588
-
589
- open(basepath + ".bat", "w:#{options[:external_encoding]}") do |f|
590
- f.puts <<-EOF
581
+
582
+ File.open("#{basepath}.bat", "w:#{options[:external_encoding]}") do |f|
583
+ f.puts <<-BATCH
591
584
  @echo off
592
585
  setlocal
593
586
  set PATH=%~dp0#{options[:system_dir]}\\#{relative_path(bindir)};%PATH%
594
587
  set NERI_EXECUTABLE=%~0
595
588
  #{chdir}
596
589
  if %~x0 == .exe ( shift )
597
- #{ruby_command(options[:chdir_first] ? "" : "%~dp0")} %1 %2 %3 %4 %5 %6 %7 %8 %9
590
+ #{ruby_command(options[:chdir_first] ? '' : '%~dp0')} %1 %2 %3 %4 %5 %6 %7 %8 %9
598
591
  #{pause_command}
599
592
  endlocal
600
- EOF
593
+ BATCH
601
594
  end
602
595
  end
603
-
604
- def create_exefile()
596
+
597
+ def create_exefile
605
598
  unless system("gcc --version >nul 2>&1 && windres --version >nul 2>&1")
606
599
  error "gcc or windres not found !"
607
600
  create_batfile
608
601
  return
609
602
  end
610
-
611
- exe_file = to_winpath(basepath + ".exe" )
612
- c_file = to_winpath(basepath + "_tmp.c" )
613
- o_file = to_winpath(basepath + "_tmp.o" )
614
- rc_file = to_winpath(basepath + "_tmp.rc")
603
+
604
+ exe_file = to_winpath("#{basepath}.exe" )
605
+ c_file = to_winpath("#{basepath}_tmp.c" )
606
+ o_file = to_winpath("#{basepath}_tmp.o" )
607
+ rc_file = to_winpath("#{basepath}_tmp.rc")
615
608
  system_dir = escape_cstr(to_winpath(File.join(options[:system_dir], "")))
616
609
  nputs "Creating exe_file '#{exe_file}'."
617
- open(c_file, "w:#{options[:external_encoding]}") do |f|
618
- f.puts <<-EOF
610
+ File.open(c_file, "w:#{options[:external_encoding]}") do |f|
611
+ f.puts <<-CFILE
619
612
  #include <stdio.h>
620
613
  #include <stdlib.h>
621
614
  #include <windows.h>
@@ -623,17 +616,17 @@ endlocal
623
616
 
624
617
  int main(int argc, char *argv[])
625
618
  {
626
- char exepath[_MAX_PATH * 2 + 1],
619
+ char exepath[_MAX_PATH * 2 + 1],
627
620
  drive [_MAX_DRIVE + 1],
628
621
  dir [_MAX_DIR * 2 + 1],
629
622
  fname [_MAX_FNAME * 2 + 1],
630
623
  ext [_MAX_EXT * 2 + 1],
631
624
  paths [_MAX_PATH * 32 + 1],
632
625
  runruby[_MAX_PATH * 32 + 1];
633
- PROCESS_INFORMATION pi;
626
+ PROCESS_INFORMATION pi;
634
627
  STARTUPINFO si;
635
628
  ZeroMemory(&si, sizeof(STARTUPINFO));
636
-
629
+
637
630
  if(GetModuleFileName(NULL, exepath, MAX_PATH * 2) != 0){
638
631
  _splitpath_s(exepath, drive, _MAX_DRIVE, dir, _MAX_DIR * 2, fname, _MAX_FNAME * 2, ext, _MAX_EXT * 2);
639
632
  } else {
@@ -644,8 +637,8 @@ int main(int argc, char *argv[])
644
637
  snprintf(paths, sizeof(paths), "PATH=%s%s#{system_dir}bin;%s", drive, dir, getenv("PATH"));
645
638
  putenv(paths);
646
639
  #{options[:chdir_first] ? 'snprintf(paths, sizeof(paths), "%s%s", drive, dir);chdir(paths);' : ''}
647
- snprintf(runruby, sizeof(runruby), "#{escape_cstr(ruby_command(options[:chdir_first] ? "" : "%s%s"))} %s %s %s %s %s %s %s %s %s",
648
- #{options[:chdir_first] ? "" : "drive, dir,"}
640
+ snprintf(runruby, sizeof(runruby), "#{escape_cstr(ruby_command(options[:chdir_first] ? '' : '%s%s'))} %s %s %s %s %s %s %s %s %s",
641
+ #{options[:chdir_first] ? '' : 'drive, dir,'}
649
642
  argc > 1 ? argv[1] : "",
650
643
  argc > 2 ? argv[2] : "",
651
644
  argc > 3 ? argv[3] : "",
@@ -656,7 +649,7 @@ int main(int argc, char *argv[])
656
649
  argc > 8 ? argv[8] : "",
657
650
  argc > 9 ? argv[9] : ""
658
651
  );
659
- EOF
652
+ CFILE
660
653
  if options[:b2ec][:invisible]
661
654
  f.puts %[ CreateProcess(NULL, runruby, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &si, &pi);]
662
655
  else
@@ -673,14 +666,14 @@ int main(int argc, char *argv[])
673
666
  end
674
667
  f.puts " return 0;\n}"
675
668
  end
676
-
677
- open(rc_file, "w:#{options[:external_encoding]}") do |f|
678
- f.puts <<-EOF
669
+
670
+ File.open(rc_file, "w:#{options[:external_encoding]}") do |f|
671
+ f.puts <<-RCFILE
679
672
  #include <winver.h>
680
673
 
681
674
  1 VERSIONINFO
682
- #{options[:b2ec][:fileversion ] ? "FILEVERSION " + escape_cstr(options[:b2ec][:fileversion ]) : ""}
683
- #{options[:b2ec][:productversion] ? "PRODUCTVERSION " + escape_cstr(options[:b2ec][:productversion]) : ""}
675
+ #{options[:b2ec][:fileversion ] ? "FILEVERSION #{escape_cstr(options[:b2ec][:fileversion ])}" : ""}
676
+ #{options[:b2ec][:productversion] ? "PRODUCTVERSION #{escape_cstr(options[:b2ec][:productversion])}" : ""}
684
677
  FILETYPE VFT_APP
685
678
  BEGIN
686
679
  BLOCK "StringFileInfo"
@@ -709,16 +702,16 @@ BEGIN
709
702
  END
710
703
 
711
704
  2 ICON "#{escape_cstr(options[:b2ec][:icon])}"
712
- EOF
705
+ RCFILE
713
706
  end
714
- nsystem(%[windres -o "#{o_file}" "#{rc_file}"])
715
- nsystem(%[gcc#{options[:b2ec][:invisible] ? " -mwindows" : ""} -o "#{exe_file}" "#{c_file}" "#{o_file}"])
716
- nsystem(%[strip "#{exe_file}"])
707
+ nsystem(%(windres -o "#{o_file}" "#{rc_file}"))
708
+ nsystem(%(gcc#{options[:b2ec][:invisible] ? ' -mwindows' : ''} -o "#{exe_file}" "#{c_file}" "#{o_file}"))
709
+ nsystem(%(strip "#{exe_file}"))
717
710
  File.delete(c_file, rc_file, o_file)
718
711
  end
719
-
712
+
720
713
  def ruby_command(path)
721
- system_dir = "#{path}#{File.join(options[:system_dir], "")}"
714
+ system_dir = "#{path}#{File.join(options[:system_dir], '')}"
722
715
  ruby_code = ""
723
716
  ruby_code = "Neri.key='#{@encryption_key}';" if @encryption_key
724
717
  if options[:datafile]
@@ -727,18 +720,17 @@ END
727
720
  else
728
721
  ruby_code += "load File.expand_path('#{system_dir}' + #{unpack_filename(scriptfile)})"
729
722
  end
730
-
723
+
731
724
  r = " -rneri"
732
725
  r += " -rneri/dxruby" if @use_dxruby
733
726
  r += " -rneri/dxruby_tiled" if @use_dxruby_tiled
734
727
  r += " -rneri/ayame" if @use_ayame
735
-
728
+
736
729
  ruby = to_winpath(relative_path(rubyexe, bindir))
737
- return %[#{ruby}#{r} #{@rubyopt} -e "# coding:utf-8" -e "#{ruby_code}" #{@args}]
730
+ %(#{ruby}#{r} #{@rubyopt} -e "# coding:utf-8" -e "#{ruby_code}" #{@args})
738
731
  end
739
-
740
-
741
- def bat_to_exe_converter()
732
+
733
+ def bat_to_exe_converter
742
734
  create_batfile
743
735
  begin
744
736
  `#{options[:b2ec_path]} /help`
@@ -746,36 +738,32 @@ END
746
738
  error "Bat To Exe Converter not found !"
747
739
  return
748
740
  end
749
-
750
- batch_file = basepath + ".bat"
751
- exe_file = basepath + ".exe"
741
+
742
+ batch_file = "#{basepath}.bat"
743
+ exe_file = "#{basepath}.exe"
752
744
  nputs "Creating exe_file '#{exe_file}' with Bat To Exe Converter."
753
745
  File.delete(exe_file) if File.exist?(exe_file)
754
- if options[:b2ec][:x64] == nil
755
- options[:b2ec][:x64] = true if RbConfig::CONFIG["target"].to_s.index("64")
746
+ if options[:b2ec][:x64].nil? && RbConfig::CONFIG["target"].to_s.index("64")
747
+ options[:b2ec][:x64] = true
756
748
  end
757
- args = %[ /bat "#{batch_file}" /exe "#{exe_file}"]
758
- args += options[:b2ec].map{|key, value|
749
+ args = %( /bat "#{batch_file}" /exe "#{exe_file}")
750
+ args += options[:b2ec].map { |key, value|
759
751
  case value
760
- when String; %[ /#{key.to_s.tr("_", "-")} "#{value}"]
761
- when true; %[ /#{key.to_s.tr("_", "-")}]
762
- else; %[]
752
+ when String then %( /#{key.to_s.tr('_', '-')} "#{value}")
753
+ when true then %( /#{key.to_s.tr('_', '-')})
754
+ else; %()
763
755
  end
764
756
  }.join("")
765
-
766
-
767
- unless nsystem "#{options[:b2ec_path]}#{args}"
768
- error "Failed to create exe_file !"
769
- end
757
+
758
+ error "Failed to create exe_file !" unless nsystem "#{options[:b2ec_path]}#{args}"
770
759
  end
771
-
772
-
773
- def upx()
760
+
761
+ def upx
774
762
  unless system("#{options[:upx_path]} --version >nul 2>&1")
775
763
  error "UPX not found !"
776
764
  return
777
765
  end
778
-
766
+
779
767
  nputs "Compressing with UPX."
780
768
  options[:upx_targets].each do |target|
781
769
  Dir.glob(File.join(options[:output_dir], options[:system_dir], target)).each do |target_path|
@@ -784,78 +772,76 @@ END
784
772
  end
785
773
  end
786
774
  end
787
-
788
-
789
- def create_zipfile()
775
+
776
+ def create_zipfile
790
777
  unless system("#{options[:sevenzip_path]} >nul 2>&1")
791
778
  error "7-Zip not found !"
792
779
  return
793
780
  end
794
-
781
+
795
782
  nputs "Creating zip_file '#{options[:zipfile]}'."
796
783
  File.delete(options[:zipfile]) if File.exist?(options[:zipfile])
797
784
  files = []
798
785
  if options[:output_dir] == "./"
799
786
  files.push(options[:system_dir])
800
- files.push(File.exist?(basepath + ".exe") ? basepath + ".exe" : basepath + ".bat")
787
+ files.push(File.exist?("#{basepath}.exe") ? "#{basepath}.exe" : "#{basepath}.bat")
801
788
  else
802
789
  files.push(options[:output_dir])
803
790
  end
804
791
  command = %("#{options[:sevenzip_path]}" a "#{options[:zipfile]}" "#{files.join('" "')}")
805
792
  nsystem command
806
793
  end
807
-
808
-
809
- def inno_setup()
794
+
795
+ def inno_setup
810
796
  unless system("#{options[:iscc_path]} /? >nul 2>&1")
811
797
  error("Inno Setup not found !")
812
798
  return
813
799
  end
814
-
800
+
815
801
  filename = options[:inno_script]
816
802
  nputs "Creating Installer '#{filename}'."
817
803
  script = "[Setup]\n"
818
804
  if File.exist?(filename)
819
805
  script = File.read(filename, encoding: Encoding::UTF_8)
820
- filename = File.basename(filename, ".*") + "_tmp" + File.extname(filename)
806
+ filename = "#{File.basename(filename, '.*')}_tmp#{File.extname(filename)}"
821
807
  end
822
-
808
+
823
809
  version = options[:b2ec][:productversion] || options[:b2ec][:fileversion]
824
810
  if !script.match(/^AppName=/) && options[:b2ec][:productname]
825
- script.sub!(/^(\[Setup\])(\s+)/i){ "#{$1}\nAppName=#{options[:b2ec][:productname]}#{$2}" }
811
+ script.sub!(/^(\[Setup\])(\s+)/i) { "#{$1}\nAppName=#{options[:b2ec][:productname]}#{$2}" }
826
812
  end
827
813
  if !script.match(/^AppVersion=/) && version
828
- script.sub!(/^(\[Setup\])(\s+)/i){ "#{$1}\nAppVersion=#{version}#{$2}" }
814
+ script.sub!(/^(\[Setup\])(\s+)/i) { "#{$1}\nAppVersion=#{version}#{$2}" }
829
815
  end
830
816
  if !script.match(/^AppVerName=/) && options[:b2ec][:productname] && version
831
- script.sub!(/^(\[Setup\])(\s+)/i){ "#{$1}\nAppVerName=#{options[:b2ec][:productname]} #{version}#{$2}" }
817
+ script.sub!(/^(\[Setup\])(\s+)/i) { "#{$1}\nAppVerName=#{options[:b2ec][:productname]} #{version}#{$2}" }
832
818
  end
833
819
  if !script.match(/^AppPublisher=/) && options[:b2ec][:company]
834
- script.sub!(/^(\[Setup\])(\s+)/i){ "#{$1}\nAppPublisher=#{options[:b2ec][:company]}#{$2}" }
820
+ script.sub!(/^(\[Setup\])(\s+)/i) { "#{$1}\nAppPublisher=#{options[:b2ec][:company]}#{$2}" }
835
821
  end
836
822
  if !script.match(/^AppCopyright=/) && options[:b2ec][:copyright]
837
- script.sub!(/^(\[Setup\])(\s+)/i){ "#{$1}\nAppCopyright=#{options[:b2ec][:copyright]}#{$2}" }
823
+ script.sub!(/^(\[Setup\])(\s+)/i) { "#{$1}\nAppCopyright=#{options[:b2ec][:copyright]}#{$2}" }
838
824
  end
839
-
825
+
840
826
  script += "\n[Files]\n" unless script.match(/^\[Files\]/)
841
827
  dir = File.expand_path(options[:output_dir])
842
828
  files_str = ""
843
829
  Dir.glob(File.join(dir, "**", "*")).each do |file|
844
830
  next unless File.file? file
831
+
845
832
  dist_dir = to_winpath(File::SEPARATOR + File.dirname(relative_path(file, dir)))
846
833
  dist_dir = "" if dist_dir == "\\."
847
834
  files_str += "\nSource: \"#{to_winpath(file)}\"; DistDir: \"{app}#{dist_dir}"
848
835
  files_str += "; Flags: isreadme" if File.basename(file).match(/^readme/i)
849
836
  end
850
- script.sub!(/^(\[Files\])(\s*)/i){ "#{$1}#{files_str}#{$2}" }
851
-
837
+ script.sub!(/^(\[Files\])(\s*)/i) { "#{$1}#{files_str}#{$2}" }
838
+
852
839
  File.write(filename, script)
853
840
  command = %(#{options[:iscc_path]} "#{filename}")
854
841
  nsystem command
855
842
  end
856
-
857
-
858
- def run()
843
+
844
+ def run
859
845
  check_options
860
846
  dependencies = check_dependencies
861
847
  copy_files(dependencies)
@@ -870,34 +856,33 @@ END
870
856
  inno_setup if options[:inno_script]
871
857
  nputs "Neri Finished."
872
858
  end
873
-
874
859
 
875
860
  private
876
-
861
+
877
862
  def nputs(str)
878
863
  puts "=== #{str}" unless options[:quiet]
879
864
  end
880
-
865
+
881
866
  def nputs_v(str)
882
867
  puts str if options[:verbose]
883
868
  end
884
-
869
+
885
870
  def error(str)
886
871
  puts "\e[31m#{str}\e[0m"
887
872
  end
888
-
873
+
889
874
  def unpack_filename(filename)
890
- "[" + filename.unpack("U*").map { |u| u.to_s }.join(",") + "].pack('U*')"
875
+ "[#{filename.unpack('U*').map(&:to_s).join(',')}].pack('U*')"
891
876
  end
892
-
877
+
893
878
  def escape_cstr(str)
894
- str.gsub("\\"){ "\\\\" }.gsub('"'){ '\\"' }.gsub("'"){ "\\'" }
879
+ str.gsub("\\") { "\\\\" }.gsub('"') { '\\"' }.gsub("'") { "\\'" }
895
880
  end
896
-
881
+
897
882
  def nsystem(str)
898
883
  nputs_v(str)
899
884
  command = str.encode(options[:external_encoding])
900
- return system(command + (options[:quiet] ? " >nul 2>&1" : ""))
885
+ system(command + (options[:quiet] ? " >nul 2>&1" : ""))
901
886
  end
902
887
  end
903
888
  end
data/lib/neri/dxruby.rb CHANGED
@@ -4,38 +4,28 @@ require "dxruby" unless defined? DXRuby
4
4
 
5
5
  module Neri
6
6
  module DXRubyImage
7
- def load(path, x=nil, y=nil, width=nil, height=nil)
8
- if Neri.exist_in_datafile?(path)
9
- image = load_from_file_in_memory(Neri.file_read(path))
10
- image = image.slice(x, y, width, height) if x && y && width && height
11
- return image
12
- else
13
- return super
14
- end
7
+ def load(path, x = nil, y = nil, width = nil, height = nil)
8
+ return super unless Neri.exist_in_datafile?(path)
9
+
10
+ image = load_from_file_in_memory(Neri.file_read(path))
11
+ image = image.slice(x, y, width, height) if x && y && width && height
12
+ image
15
13
  end
16
-
17
- def load_tiles(path, xcount, ycount, share_switch=true)
18
- if Neri.exist_in_datafile?(path) && !share_switch
19
- image = load_from_file_in_memory(Neri.file_read(path))
20
- return image.slice_tiles(xcount, ycount)
21
- else
22
- return super
23
- end
14
+
15
+ def load_tiles(path, xcount, ycount, share_switch = true)
16
+ return super unless Neri.exist_in_datafile?(path) && !share_switch
17
+
18
+ image = load_from_file_in_memory(Neri.file_read(path))
19
+ image.slice_tiles(xcount, ycount)
24
20
  end
25
21
  end
26
-
22
+
27
23
  module DXRubySound
28
24
  def new(path)
29
- if Neri.exist_in_datafile?(path)
30
- case File.extname(path)
31
- when ".mid"
32
- return load_from_memory(Neri.file_read(path), DXRuby::TYPE_MIDI)
33
- else
34
- return load_from_memory(Neri.file_read(path), DXRuby::TYPE_WAV)
35
- end
36
- else
37
- return super
38
- end
25
+ return super unless Neri.exist_in_datafile?(path)
26
+
27
+ load_from_memory(Neri.file_read(path),
28
+ File.extname(path) == ".mid" ? DXRuby::TYPE_MIDI : DXRuby::TYPE_WAV)
39
29
  end
40
30
  end
41
31
  end
@@ -46,7 +36,7 @@ module DXRuby
46
36
  prepend Neri::DXRubyImage
47
37
  end
48
38
  end
49
-
39
+
50
40
  class Sound
51
41
  class << self
52
42
  prepend Neri::DXRubySound
@@ -5,7 +5,7 @@ require "dxruby_tiled" unless defined? DXRuby::Tiled
5
5
  module DXRuby
6
6
  module Tiled
7
7
  module_function
8
-
8
+
9
9
  def read_file(file, encoding = Encoding::UTF_8)
10
10
  Neri.file_read(file, encoding)
11
11
  end
data/lib/neri/runtime.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "neri/version"
2
2
 
3
- alias :_neri_orig_require :require
4
- alias :_neri_orig_load :load
3
+ alias _neri_orig_require require
4
+ alias _neri_orig_load load
5
5
 
6
6
  def require(feature)
7
7
  Neri.require(feature)
@@ -16,12 +16,14 @@ module Neri
16
16
  @datafile = nil
17
17
  @system_dir = nil
18
18
  @files = {}
19
+ @fullpath_files = nil
20
+ @current_directory = nil
19
21
  @xor = nil
20
-
22
+
21
23
  class << self
22
24
  def datafile=(datafile)
23
- @datafile = datafile
24
- @system_dir = File.dirname(File.expand_path(datafile)) + File::SEPARATOR
25
+ @datafile = datafile.encode(Encoding::UTF_8)
26
+ @system_dir = File.dirname(File.expand_path(@datafile)) + File::SEPARATOR
25
27
  files_length = File.binread(@datafile, BLOCK_LENGTH).to_i
26
28
  files_str = read(files_length, BLOCK_LENGTH)
27
29
  pos = files_length + BLOCK_LENGTH
@@ -31,116 +33,116 @@ module Neri
31
33
  filename, length, offset = line.split("\t")
32
34
  @files[filename] = [length.to_i, offset.to_i + pos]
33
35
  end
36
+ @current_directory = nil
34
37
  end
35
-
38
+
36
39
  def key=(key)
37
- @xor = key.scan(/../).map{|a| a.to_i(16)}.pack("c*")
40
+ @xor = key.scan(/../).map { |a| a.to_i(16) }.pack("c*")
38
41
  end
39
-
42
+
40
43
  def require(feature)
44
+ feature = feature.encode(Encoding::UTF_8)
41
45
  filepath = nil
42
- (feature.match?(/\A([a-z]:|\\|\/|\.)/i) ? [""] : load_path).each do |path|
46
+ (feature.start_with?(/[a-z]:/i, "\\", "/", ".") ? [""] : load_path).each do |path|
43
47
  ["", ".rb"].each do |ext|
44
- next unless exist_in_datafile?(path + feature + ext)
45
- filepath = adjust_path(path + feature + ext)
48
+ tmp_path = path + feature + ext
49
+ filepath ||= tmp_path if exist_in_datafile?(tmp_path)
46
50
  end
47
51
  end
48
-
49
- if filepath
50
- return false if $LOADED_FEATURES.index(filepath)
51
- code = load_code(filepath)
52
- eval(code, TOPLEVEL_BINDING, filepath)
53
- $LOADED_FEATURES.push(filepath)
54
- return true
55
- else
56
- return _neri_orig_require(feature)
57
- end
52
+
53
+ return _neri_orig_require(feature) unless filepath
54
+ return false if $LOADED_FEATURES.index(filepath)
55
+
56
+ code = load_code(filepath)
57
+ eval(code, TOPLEVEL_BINDING, filepath)
58
+ $LOADED_FEATURES.push(filepath)
59
+ true
58
60
  end
59
-
61
+
60
62
  def load(file, priv = false)
63
+ file = file.encode(Encoding::UTF_8)
61
64
  filepath = nil
62
- (load_path + [""]).each do |path|
63
- filepath = path + file if exist_in_datafile?(path + file)
65
+ paths = file.start_with?(/[a-z]:/i, "\\", "/", ".") ? [""] : load_path + [""]
66
+ paths.each do |path|
67
+ filepath ||= path + file if exist_in_datafile?(path + file)
64
68
  end
65
-
66
- if filepath
67
- code = load_code(filepath)
68
- if priv
69
- Module.new.module_eval(code, filepath)
70
- else
71
- eval(code, TOPLEVEL_BINDING, filepath)
72
- end
69
+
70
+ return _neri_orig_load(file, priv) unless filepath
71
+
72
+ code = load_code(filepath)
73
+ if priv
74
+ Module.new.module_eval(code, filepath)
73
75
  else
74
- _neri_orig_load(filepath || file, priv)
76
+ eval(code, TOPLEVEL_BINDING, filepath)
75
77
  end
78
+ true
76
79
  end
77
-
80
+
78
81
  def file_exist?(filename)
79
- return exist_in_datafile?(filename) || File.exist?(filename)
82
+ exist_in_datafile?(filename) || File.exist?(filename)
80
83
  end
81
-
84
+
82
85
  def file_read(filename, encoding = Encoding::BINARY)
86
+ filename = filename.encode(Encoding::UTF_8)
83
87
  str = nil
84
88
  if exist_in_datafile?(filename)
85
- length, offset = @files[adjust_path(filename.encode(Encoding::UTF_8))]
89
+ length, offset = fullpath_files[File.expand_path(filename)]
86
90
  str = read(length, offset)
87
91
  else
88
92
  str = File.binread(filename)
89
93
  end
90
94
  str.force_encoding(encoding)
91
- return str
92
95
  end
93
-
94
- def files()
95
- return @files.keys
96
+
97
+ def files
98
+ @files.keys
96
99
  end
97
-
100
+
98
101
  def exist_in_datafile?(filename)
99
- return @files.has_key?(adjust_path(filename.encode(Encoding::UTF_8)))
102
+ fullpath_files.key?(File.expand_path(filename.encode(Encoding::UTF_8)))
100
103
  end
101
-
104
+
102
105
  private
103
-
104
- def xor(str)
105
- str.force_encoding(Encoding::BINARY)
106
- while str.bytesize % BLOCK_LENGTH != 0
107
- str << rand(256).chr
108
- end
109
- if defined?(Xorcist)
110
- return Xorcist.xor!(str, @xor * (str.bytesize / BLOCK_LENGTH))
111
- else
112
- s = []
113
- str.unpack("Q*").zip((@xor * (str.bytesize / BLOCK_LENGTH)).unpack("Q*")){|a, b| s.push(a ^ b)}
114
- return s.pack("Q*")
106
+
107
+ def fullpath_files
108
+ if @current_directory != Dir.pwd
109
+ @current_directory = Dir.pwd
110
+ @fullpath_files = @files.transform_keys { |k| File.expand_path(k) }
115
111
  end
112
+ @fullpath_files
116
113
  end
117
-
118
- def adjust_path(path)
119
- return path.sub(/^\.\//, "")
114
+
115
+ def xor(str)
116
+ str.force_encoding(Encoding::BINARY)
117
+ str << rand(256).chr while str.bytesize % BLOCK_LENGTH != 0
118
+ xor_str = @xor * (str.bytesize / BLOCK_LENGTH)
119
+ return Xorcist.xor!(str, xor_str) if defined?(Xorcist)
120
+
121
+ s = []
122
+ str.unpack("Q*").zip((xor_str).unpack("Q*")) { |a, b| s.push(a ^ b) }
123
+ s.pack("Q*")
120
124
  end
121
-
125
+
122
126
  def read(length, offset)
123
- if @xor
124
- tmp_length = length
125
- tmp_length += BLOCK_LENGTH - length % BLOCK_LENGTH unless length % BLOCK_LENGTH == 0
126
- return xor(File.binread(@datafile, tmp_length, offset))[0, length]
127
- else
128
- return File.binread(@datafile, length, offset)
129
- end
127
+ return File.binread(@datafile, length, offset) unless @xor
128
+
129
+ tmp_length = length
130
+ tmp_length += BLOCK_LENGTH - length % BLOCK_LENGTH unless length % BLOCK_LENGTH == 0
131
+ xor(File.binread(@datafile, tmp_length, offset))[0, length]
130
132
  end
131
-
132
- def load_path()
133
+
134
+ def load_path
133
135
  paths = $LOAD_PATH.map { |path| path.encode(Encoding::UTF_8) }
134
136
  return paths unless @system_dir
137
+
135
138
  paths.map { |path| path.sub(@system_dir, "*neri*#{File::SEPARATOR}") + File::SEPARATOR }
136
139
  end
137
-
140
+
138
141
  def load_code(file)
139
142
  code = file_read(file)
140
143
  encoding = "UTF-8"
141
- encoding = $1 if code.lines[0..2].join("\n").match(/coding:\s*(\S+)/)
144
+ encoding = Regexp.last_match(1) if code.lines[0..2].join("\n").match(/coding:\s*(\S+)/)
142
145
  code.force_encoding(encoding)
143
- return code
144
146
  end
145
147
  end
146
148
  end
data/lib/neri/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neri
2
- VERSION = "0.9.2"
2
+ VERSION = -"0.9.3"
3
3
  end
data/neri.gemspec CHANGED
@@ -8,11 +8,11 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["nodai2hITC"]
9
9
  spec.email = ["nodai2h.itc@gmail.com"]
10
10
 
11
- spec.summary = %q{One-Click Ruby Application Builder}
12
- spec.description = %q{Neri builds Windows batfile or exefile from Ruby script.}
11
+ spec.summary = "One-Click Ruby Application Builder"
12
+ spec.description = "Neri builds Windows batfile or exefile from Ruby script."
13
13
  spec.homepage = "https://github.com/nodai2hITC/neri"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.4.0"
15
+ spec.required_ruby_version = ">= 2.5.0"
16
16
 
17
17
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
18
18
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neri
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - nodai2hITC
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-22 00:00:00.000000000 Z
11
+ date: 2021-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: win32api
@@ -63,14 +63,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: 2.4.0
66
+ version: 2.5.0
67
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  requirements: []
73
- rubygems_version: 3.2.27
73
+ rubygems_version: 3.2.30
74
74
  signing_key:
75
75
  specification_version: 4
76
76
  summary: One-Click Ruby Application Builder