aozorahack/aozora2html

View on GitHub
bin/aozora2html

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby
# frozen_string_literal: true

require 'aozora2html'
require 'optparse'
require 'tempfile'
require 'open-uri'

opt = OptionParser.new("Usage: aozora2html [options] <text file> [<html file>]\n")
opt.on('--gaiji-dir DIR', 'setting gaiji directory')
opt.on('--css-files FILES', 'setting css directory')
opt.on('--use-jisx0213', 'use JIS X 0213 character')
opt.on('--use-unicode', 'use Unicode character')
opt.on('--error-utf8', 'show error messages in UTF-8, not Shift_JIS')
opt.version = Aozora2Html::VERSION
options = opt.getopts

gaiji_dir = options['gaiji-dir'] || nil

css_files = options['css-files']&.split(',')

use_jisx0213 = !!options['use-jisx0213']
use_unicode = !!options['use-unicode']

if options['error-utf8']
  Aozora2Html::I18n.use_utf8 = true
end

if ARGV.size < 1 || ARGV.size > 2
  $stderr.print opt.banner
  exit 1
end

src_file, dest_file = ARGV[0], ARGV[1]

Dir.mktmpdir do |dir|
  if dest_file.nil?
    dest_file = File.join(dir, 'output.html')
  end
  if /\Ahttps?:/.match?(src_file)
    down_file = File.join(dir, File.basename(src_file))
    begin
      File.write(down_file, URI.parse(src_file).read)
      src_file = down_file
    rescue StandardError
      $stderr.print "file not found: #{src_file}\n"
      $stderr.print "Download Error: #{$!}\n"
      exit 1
    end
  else
    unless File.exist?(src_file)
      $stderr.print "file not found: #{src_file}\n"
      exit 1
    end
  end

  if File.extname(src_file) == '.zip'
    require 'aozora2html/zip'
    tmpfile = File.join(dir, 'aozora.txt')
    Aozora2Html::Zip.unzip(src_file, tmpfile)
    Aozora2Html.new(
      tmpfile,
      dest_file,
      gaiji_dir: gaiji_dir,
      css_files: css_files,
      use_jisx0213: use_jisx0213,
      use_unicode: use_unicode
    ).process
  else
    Aozora2Html.new(
      src_file,
      dest_file,
      gaiji_dir: gaiji_dir,
      css_files: css_files,
      use_jisx0213: use_jisx0213,
      use_unicode: use_unicode
    ).process
  end
  unless ARGV[1]
    output = File.read(dest_file)
    print output
  end
rescue Aozora2Html::FatalError
  exit(2)
end