class EPUBMaker::Producer

EPUBMaker produces EPUB file.

EPUBMaker produces EPUB file.

Attributes

contents[RW]

Array of content objects.

params[RW]

Parameter hash.

res[R]

Message resource object.

Public Class Methods

load(file) click to toggle source

Take YAML file and return parameter hash.

# File ../../../../../lib/epubmaker/producer.rb, line 31
def Producer.load(file)
  raise "Can't open #{file}." if file.nil? || !File.exist?(file)
  loader = ReVIEW::YAMLLoader.new
  loader.load_file(file)
end
new(params=nil, version=nil) click to toggle source

Construct producer object. params takes initial parameter hash. This parameters can be overriden by EPUBMaker#load or EPUBMaker#merge_params. version takes EPUB version (default is 2).

# File ../../../../../lib/epubmaker/producer.rb, line 47
def initialize(params=nil, version=nil)
  @contents = []
  @params = ReVIEW::Configure.new
  @epub = nil
  @params["epubversion"] = version unless version.nil?
  @res = ReVIEW::I18n

  if params
    merge_params(params)
  end
end

Public Instance Methods

call_hook(filename, *params) click to toggle source
# File ../../../../../lib/epubmaker/producer.rb, line 185
def call_hook(filename, *params)
  if !filename.nil? && File.exist?(filename) && FileTest.executable?(filename)
    if ENV["REVIEW_SAFE_MODE"].to_i & 1 > 0
      warn "hook is prohibited in safe mode. ignored."
    else
      system(filename, *params)
    end
  end
end
colophon(wobj) click to toggle source

Write colophon file to IO object wobj.

# File ../../../../../lib/epubmaker/producer.rb, line 131
def colophon(wobj)
  s = @epub.colophon
  wobj.puts s if !s.nil? && !wobj.nil?
end
container(wobj) click to toggle source

Write container file to IO object wobj.

# File ../../../../../lib/epubmaker/producer.rb, line 110
def container(wobj)
  s = @epub.container
  wobj.puts s if !s.nil? && !wobj.nil?
end
cover(wobj) click to toggle source

Write cover file to IO object wobj. If #params is defined, it will be used for the cover image.

# File ../../../../../lib/epubmaker/producer.rb, line 118
def cover(wobj)
  type = (@params["epubversion"] >= 3) ? "cover" : nil
  s = @epub.cover(type)
  wobj.puts s if !s.nil? && !wobj.nil?
end
coverimage() click to toggle source
# File ../../../../../lib/epubmaker/producer.rb, line 59
def coverimage
  return nil unless params["coverimage"]
  @contents.each do |item|
    if item.media.start_with?('image') && item.file =~ /#{params["coverimage"]}\Z/ # /
      return item.file
    end
  end
  return nil
end
importImageInfo(path, base=nil, allow_exts=nil)
Alias for: import_imageinfo
import_imageinfo(path, base=nil, allow_exts=nil) click to toggle source

Add informations of figure files in path to contents array. base defines a string to remove from path name.

# File ../../../../../lib/epubmaker/producer.rb, line 144
def import_imageinfo(path, base=nil, allow_exts=nil)
  return nil unless File.exist?(path)
  allow_exts = @params["image_ext"] if allow_exts.nil?
  Dir.foreach(path) do |f|
    next if f.start_with?('.')
    if f =~ /\.(#{allow_exts.join("|")})\Z/
      path.chop! if path =~ /\/\Z/
      if base.nil?
        @contents.push(EPUBMaker::Content.new({"file" => "#{path}/#{f}"}))
      else
        @contents.push(EPUBMaker::Content.new({"file" => "#{path.sub(base + "/", '')}/#{f}"}))
      end
    end
    if FileTest.directory?("#{path}/#{f}")
      import_imageinfo("#{path}/#{f}", base)
    end
  end
end
Also aliased as: importImageInfo, importImageInfo
isbn_hyphen() click to toggle source
# File ../../../../../lib/epubmaker/producer.rb, line 195
def isbn_hyphen
  str = @params["isbn"].to_s

  if str =~ /\A\d{10}\Z/
    "#{str[0..0]}-#{str[1..5]}-#{str[6..8]}-#{str[9..9]}"
  elsif str =~ /\A\d{13}\Z/
    "#{str[0..2]}-#{str[3..3]}-#{str[4..8]}-#{str[9..11]}-#{str[12..12]}"
  else
    nil
  end
end
load(file) click to toggle source

Take YAML file and update parameter hash.

# File ../../../../../lib/epubmaker/producer.rb, line 38
def load(file)
  raise "Can't open #{file}." if file.nil? || !File.exist?(file)
  loader = ReVIEW::YAMLLoader.new
  merge_params(@params.deep_merge(loader.load_file(file)))
end
merge_params(params) click to toggle source

Update parameters by merging from new parameter hash params.

# File ../../../../../lib/epubmaker/producer.rb, line 70
def merge_params(params)
  @params.deep_merge!(params)
  complement

  unless @params["epubversion"].nil?
    case @params["epubversion"].to_i
    when 2
      @epub = EPUBMaker::EPUBv2.new(self)
    when 3
      @epub = EPUBMaker::EPUBv3.new(self)
    else
      raise "Invalid EPUB version (#{@params["epubversion"]}.)"
    end
  end
  if params["language"]
    ReVIEW::I18n.locale = params["language"]
  end
  support_legacy_maker
end
mimetype(wobj) click to toggle source

Write mimetype file to IO object wobj.

# File ../../../../../lib/epubmaker/producer.rb, line 91
def mimetype(wobj)
  s = @epub.mimetype
  wobj.print s if !s.nil? && !wobj.nil?
end
mytoc(wobj) click to toggle source

Write own toc file to IO object wobj.

# File ../../../../../lib/epubmaker/producer.rb, line 137
def mytoc(wobj)
  s = @epub.mytoc
  wobj.puts s if !s.nil? && !wobj.nil?
end
ncx(wobj, indentarray=[]) click to toggle source

Write ncx file to IO object wobj. indentarray defines prefix string for each level.

# File ../../../../../lib/epubmaker/producer.rb, line 104
def ncx(wobj, indentarray=[])
  s = @epub.ncx(indentarray)
  wobj.puts s if !s.nil? && !wobj.nil?
end
opf(wobj) click to toggle source

Write opf file to IO object wobj.

# File ../../../../../lib/epubmaker/producer.rb, line 97
def opf(wobj)
  s = @epub.opf
  wobj.puts s if !s.nil? && !wobj.nil?
end
produce(epubfile, basedir=nil, tmpdir=nil) click to toggle source

Produce EPUB file epubfile. basedir points the directory has contents (default: current directory.) tmpdir defines temporary directory.

# File ../../../../../lib/epubmaker/producer.rb, line 168
def produce(epubfile, basedir=nil, tmpdir=nil)
  current = Dir.pwd
  basedir = current if basedir.nil?

  _tmpdir = tmpdir.nil? ? Dir.mktmpdir : tmpdir
  epubfile = "#{current}/#{epubfile}" if epubfile !~ /\A\// # /

  # FIXME: error check
  File.unlink(epubfile) if File.exist?(epubfile)

  begin
    @epub.produce(epubfile, basedir, _tmpdir)
  ensure
    FileUtils.rm_r(_tmpdir) if tmpdir.nil?
  end
end
titlepage(wobj) click to toggle source

Write title file (copying) to IO object wobj.

# File ../../../../../lib/epubmaker/producer.rb, line 125
def titlepage(wobj)
  s = @epub.titlepage
  wobj.puts s if !s.nil? && !wobj.nil?
end