bin/review-pdfmaker in review-1.3.0 vs bin/review-pdfmaker in review-1.4.0
- old
+ new
@@ -7,268 +7,12 @@
# You can distribute or modify this program under the terms of
# the GNU LGPL, Lesser General Public License version 2.1.
# For details of the GNU LGPL, see the file "COPYING".
#
-require 'tmpdir'
-require 'yaml'
-require 'fileutils'
-require 'erb'
-require 'optparse'
-
require 'pathname'
bindir = Pathname.new(__FILE__).realpath.dirname
$LOAD_PATH.unshift((bindir + '../lib').realpath)
-require 'review'
-require 'review/i18n'
+require 'review/pdfmaker'
-include ReVIEW::LaTeXUtils
-
-include FileUtils
-
-def error(msg)
- $stderr.puts "#{File.basename($0, '.*')}: error: #{msg}"
- exit 1
-end
-
-def warn(msg)
- $stderr.puts "#{File.basename($0, '.*')}: warning: #{msg}"
-end
-
-def check_book(config)
- pdf_file = config["bookname"]+".pdf"
- if File.exist? pdf_file
- error "file already exists:#{pdf_file}"
- end
-end
-
-def build_path(config)
- "./#{config["bookname"]}-pdf"
-end
-
-def check_compile_status(ignore_errors)
- return unless @compile_errors
-
- if ignore_errors
- $stderr.puts "compile error, but try to generate PDF file"
- else
- error "compile error, No PDF file output."
- end
-end
-
-
-def main
- config = ReVIEW::Configure.values
- cmd_config = Hash.new
-
- opts = OptionParser.new
- opts.banner = "Usage: #{File.basename($0)} configfile"
- opts.version = ReVIEW::VERSION
- opts.on('--help', 'Prints this message and quit.') do
- puts opts.help
- exit 0
- end
- opts.on('--[no-]debug', 'Keep temporary files.') do |debug|
- cmd_config["debug"] = debug
- end
- opts.on('--ignore-errors', 'Ignore review-compile errors.') do
- cmd_config["ignore-errors"] = true
- end
-
- opts.parse!(ARGV)
- if ARGV.size != 1
- puts opts.help
- exit 0
- end
- yamlfile = ARGV[0]
- config.merge!(YAML.load_file(yamlfile))
- # YAML configs will be overridden by command line options.
- config.merge!(cmd_config)
-
- check_book(config)
- @basedir = Dir.pwd
- @path = build_path(config)
- bookname = config["bookname"]
- Dir.mkdir(@path)
-
- @chaps_fnames = Hash.new{|h, key| h[key] = ""}
- @compile_errors = nil
-
- ReVIEW::Book.load(@basedir).parts.each do |part|
- if part.name.present?
- if part.file?
- output_parts(part.name, config)
- @chaps_fnames["CHAPS"] << %Q|\\input{#{part.name}.tex}\n|
- else
- @chaps_fnames["CHAPS"] << %Q|\\part{#{part.name}}\n|
- end
- end
-
- part.chapters.each do |chap|
- filename = "#{File.basename(chap.path, ".*")}.tex"
- output_chaps(filename, config)
- @chaps_fnames["PREDEF"] << "\\input{#{filename}}\n" if chap.on_PREDEF?
- @chaps_fnames["CHAPS"] << "\\input{#{filename}}\n" if chap.on_CHAPS?
- @chaps_fnames["POSTDEF"] << "\\input{#{filename}}\n" if chap.on_POSTDEF?
- end
- end
-
- check_compile_status(config["ignore-errors"])
-
- config["pre_str"] = @chaps_fnames["PREDEF"]
- config["chap_str"] = @chaps_fnames["CHAPS"]
- config["post_str"] = @chaps_fnames["POSTDEF"]
-
- config["usepackage"] = ""
- if config["texstyle"]
- config["usepackage"] = "\\usepackage{#{config['texstyle']}}"
- end
-
- %w[aut csl trl dsr ill cov edt].each do |item|
- config[item] = [config[item]] if !config[item].nil? && config[item].instance_of?(String)
- end
-
- copy_images("./images", "#{@path}/images")
- copyStyToDir(Dir.pwd + "/sty", @path)
- copyStyToDir(Dir.pwd, @path, "tex")
-
- Dir.chdir(@path) {
- template = get_template(config)
- File.open("./book.tex", "wb"){|f| f.write(template)}
-
- ## do compile
- enc = config["params"].to_s.split(/\s+/).find{|i| i =~ /\A--outencoding=/ }
- kanji = 'utf8'
- if enc
- kanji = enc.split(/\=/).last.gsub(/-/, '').downcase
- end
- texcommand = config["texcommand"] || "platex"
- 3.times do
- system("#{texcommand} -kanji=#{kanji} book.tex")
- end
- if File.exist?("book.dvi")
- system("dvipdfmx -d 5 book.dvi")
- end
- }
- FileUtils.cp("#{@path}/book.pdf", "#{@basedir}/#{bookname}.pdf")
-
- unless config["debug"]
- remove_entry_secure @path
- end
-end
-
-def output_chaps(filename, config)
- $stderr.puts "compiling #{filename}"
- cmd = "#{ReVIEW::MakerHelper.bindir}/review-compile --target=latex --level=#{config["secnolevel"]} --toclevel=#{config["toclevel"]} #{config["params"]} #{filename} > #{@path}/#{filename}"
- if system cmd
- # OK
- else
- @compile_errors = true
- warn cmd
- end
-end
-
-def output_parts(filename, config)
- $stderr.puts "compiling #{filename}.tex"
- cmd = "review-compile --target=latex --level=#{config["secnolevel"]} --toclevel=#{config["toclevel"]} #{config["params"]} #{filename}.re | sed -e s/\\chapter{/\\part{/ > #{@path}/#{filename}.tex"
- if system cmd
- # OK
- else
- @compile_errors = true
- warn cmd
- end
-end
-
-
-def copy_images(from, to)
- if File.exist?(from)
- Dir.mkdir(to)
- ReVIEW::MakerHelper.copy_images_to_dir(from, to)
- Dir.chdir(to) do
- images = Dir.glob("**/*").find_all{|f|
- File.file?(f) and f =~ /\.(jpg|jpeg|png|pdf)\z/
- }
- system("extractbb", *images)
- unless system("extractbb", "-m", *images)
- system("ebb", *images)
- end
- end
- end
-end
-
-def make_custom_titlepage(coverfile)
- coverfile_sty = coverfile.to_s.sub(/\.[^.]+$/, ".tex")
- if File.exist?(coverfile_sty)
- File.read(coverfile_sty)
- else
- nil
- end
-end
-
-def get_template(config)
- dclass = config["texdocumentclass"] || []
- documentclass = dclass[0] || "jsbook"
- documentclassoption = dclass[1] || "oneside"
-
- okuduke = ""
- authors = ""
- if !config["aut"].nil? && !config["aut"].empty?
- okuduke += "著 者 & #{escape_latex(config["aut"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- authors = config["aut"].join(ReVIEW::I18n.t("names_splitter")) + ReVIEW::I18n.t("author_postfix")
- end
- if !config["csl"].nil? && !config["csl"].empty?
- okuduke += "監 修 & #{escape_latex(config["csl"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- authors += " \\\\\n"+config["csl"].join(ReVIEW::I18n.t("names_splitter")) + ReVIEW::I18n.t("supervisor_postfix")
- end
- if !config["trl"].nil? && !config["trl"].empty?
- okuduke += "翻 訳 & #{escape_latex(config["trl"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- authors += " \\\\\n"+config["trl"].join(ReVIEW::I18n.t("names_splitter")) + ReVIEW::I18n.t("translator_postfix")
- end
- if !config["dsr"].nil? && !config["dsr"].empty?
- okuduke += "デザイン & #{escape_latex(config["dsr"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- end
- if !config["ill"].nil? && !config["ill"].empty?
- okuduke += "イラスト & #{escape_latex(config["ill"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- end
- if !config["cov"].nil? && !config["cov"].empty?
- okuduke += "表 紙 & #{escape_latex(config["cov"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- end
- if !config["edt"].nil? && !config["edt"].empty?
- okuduke += "編集者 & #{escape_latex(config["edt"].join(ReVIEW::I18n.t("names_splitter")))} \\\\\n"
- end
- okuduke += <<EOB
-発行所 & #{config["prt"]} \\\\
-EOB
-
- custom_titlepage = make_custom_titlepage(config["coverfile"])
-
- template = File.expand_path(File.dirname(__FILE__) +
- '/../lib/review/review.tex.erb')
- layout_file = File.join(@basedir, "layouts", "layout.tex.erb")
- if File.exist?(layout_file)
- template = layout_file
- end
-
- erb = ERB.new(File.open(template).read)
- values = config # must be 'values' for legacy files
- erb.result(binding)
-end
-
-def copyStyToDir(dirname, copybase, extname = "sty")
- unless File.directory?(dirname)
- $stderr.puts "No such directory - #{dirname}"
- return
- end
-
- Dir.open(dirname) {|dir|
- dir.each {|fname|
- next if fname =~ /^\./
- if fname =~ /\.(#{extname})$/i
- Dir.mkdir(copybase) unless File.exist?(copybase)
- FileUtils.cp "#{dirname}/#{fname}", copybase
- end
- }
- }
-end
-
-main
+ReVIEW::PDFMaker.execute(*ARGV)