run (PDF::TechBook)

         # File lib/pdf/techbook.rb, line 793
    793:   def self.run(args)
    794:     config = OpenStruct.new
    795:     config.regen      = false
    796:     config.cache      = true
    797:     config.compressed = false
    798:
    799:     opts = OptionParser.new do |opt|
    800:       opt.banner    = PDF::Writer::Lang[:techbook_usage_banner] % [ File.basename($0) ]
    801:       PDF::Writer::Lang[:techbook_usage_banner_1].each do |ll|
    802:         opt.separator "  #{ll}"
    803:       end
    804:       opt.on('-f', '--force-regen', *PDF::Writer::Lang[:techbook_help_force_regen]) { config.regen = true }
    805:       opt.on('-n', '--no-cache', *PDF::Writer::Lang[:techbook_help_no_cache]) { config.cache = false }
    806:       opt.on('-z', '--compress', *PDF::Writer::Lang[:techbook_help_compress]) { config.compressed = true }
    807:       opt.on_tail ""
    808:       opt.on_tail("--help", *PDF::Writer::Lang[:techbook_help_help]) { $stderr << opt; exit(0) }
    809:     end
    810:     opts.parse!(args)
    811:
    812:     config.document = args[0]
    813:
    814:     unless config.document
    815:       config.document = "manual.pwd"
    816:       unless File.exist?(config.document)
    817:         dirn = File.dirname(__FILE__)
    818:         config.document = File.join(dirn, File.basename(config.document))
    819:         unless File.exist?(config.document)
    820:           dirn = File.join(dirn, "..")
    821:           config.document = File.join(dirn, File.basename(config.document))
    822:           unless File.exist?(config.document)
    823:             dirn = File.join(dirn, "..")
    824:             config.document = File.join(dirn,
    825:                                         File.basename(config.document))
    826:             unless File.exist?(config.document)
    827:               $stderr.puts PDF::Writer::Lang[:techbook_cannot_find_document]
    828:               exit(1)
    829:             end
    830:           end
    831:         end
    832:       end
    833:
    834:       $stderr.puts PDF::Writer::Lang[:techbook_using_default_doc] % config.document
    835:     end
    836:
    837:     dirn = File.dirname(config.document)
    838:     extn = File.extname(config.document)
    839:     base = File.basename(config.document, extn)
    840:
    841:     files = {
    842:       :document => config.document,
    843:       :cache    => "#{base}._mc",
    844:       :pdf      => "#{base}.pdf"
    845:     }
    846:
    847:     unless config.regen
    848:       if File.exist?(files[:cache])
    849:         _tm_doc = File.mtime(config.document)
    850:         _tm_prg = File.mtime(__FILE__)
    851:         _tm_cch = File.mtime(files[:cache])
    852:
    853:           # If the cached file is newer than either the document or the
    854:           # class program, then regenerate.
    855:         if (_tm_doc < _tm_cch) and (_tm_prg < _tm_cch)
    856:           $stderr.puts PDF::Writer::Lang[:techbook_using_cached_doc] % File.basename(files[:cache])
    857:           pdf = File.open(files[:cache], "rb") { |cf| Marshal.load(cf.read) }
    858:           pdf.save_as(files[:pdf])
    859:           File.open(files[:pdf], "wb") { |pf| pf.write pdf.render }
    860:           exit(0)
    861:         else
    862:           $stderr.puts PDF::Writer::Lang[:techbook_regenerating]
    863:         end
    864:       end
    865:     else
    866:       $stderr.puts PDF::Writer::Lang[:techbook_ignoring_cache] if File.exist?(files[:cache])
    867:     end
    868:
    869:       # Create the manual object.
    870:     pdf = PDF::TechBook.new
    871:     pdf.compressed = config.compressed
    872:     pdf.techbook_source_dir = File.expand_path(dirn)
    873:
    874:     document = open(files[:document]) { |io| io.read.split($/) }
    875:     progress = ProgressBar.new(base.capitalize, document.size)
    876:     pdf.techbook_parse(document, progress)
    877:     progress.finish
    878:
    879:     if pdf.generate_table_of_contents?
    880:       progress = ProgressBar.new("TOC", pdf.table_of_contents.size)
    881:       pdf.techbook_toc(progress)
    882:       progress.finish
    883:     end
    884:
    885:     if config.cache
    886:       File.open(files[:cache], "wb") { |f| f.write Marshal.dump(pdf) }
    887:     end
    888:
    889:     pdf.save_as(files[:pdf])
    890:   end