class Rabbit::HTML::Generator

Attributes

pdf_filename[RW]
source_filename[RW]

Public Class Methods

new(canvas, base_name, image_type, output_html, output_index_html, rss_base_uri) click to toggle source
# File lib/rabbit/html/generator.rb, line 52
def initialize(canvas, base_name, image_type,
               output_html, output_index_html, rss_base_uri)
  @canvas = canvas
  @suffix = "html"
  @rss_info = []
  @rss_filename = "index.rdf"
  rss_base_uri = rss_base_uri.chomp('/') + '/' if rss_base_uri
  @rss_base_uri = rss_base_uri
  @base_name = base_name
  @base_dir = File.dirname(@base_name)
  @image_type = image_type
  @output_html = output_html
  @output_index_html = output_index_html
  @pdf_filename = nil
  @source_filename = nil
  FileUtils.mkdir_p(Filename.new(@base_dir).encode)
end

Public Instance Methods

index_href(slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 120
def index_href(slide_number)
  with_outputting_index(true) do
    href(slide_number)
  end
end
index_image_title(slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 132
def index_image_title(slide_number)
  @canvas.with_index_mode(true) do
    with_outputting_index(true) do
      image_title(slide_number)
    end
  end
end
number_of_places(num) click to toggle source
# File lib/rabbit/html/generator.rb, line 98
def number_of_places(num)
  n = 1
  target = num
  while target >= 10
    target /= 10
    n += 1
  end
  n
end
output_html?() click to toggle source
# File lib/rabbit/html/generator.rb, line 112
def output_html?
  @output_html
end
output_index_html?() click to toggle source
# File lib/rabbit/html/generator.rb, line 108
def output_index_html?
  @output_index_html
end
output_slide_html?() click to toggle source
# File lib/rabbit/html/generator.rb, line 116
def output_slide_html?
  output_html? and !@index_mode
end
outputting_index?() click to toggle source
# File lib/rabbit/html/generator.rb, line 148
def outputting_index?
  @outputting_index
end
save() click to toggle source
# File lib/rabbit/html/generator.rb, line 70
def save
  save_environment do
    @outputting_index = false
    @canvas.each_slide_pixbuf do |slide, pixbuf, slide_number|
      message = _("Creating a image for the %dth page") % slide_number
      @canvas.logger.info(message)
      save_slide(slide, pixbuf, slide_number)
      true
    end
    if output_index_html?
      @canvas.with_index_mode(true) do
        @canvas.slides.each_with_index do |slide, slide_number|
          save_index(slide, slide_number)
        end
      end
    end
    unless save_rss
      @canvas.logger.warn(_("can't generate RSS"))
    end
  end
end
save_pixbuf(pixbuf, optional=nil) click to toggle source
# File lib/rabbit/html/generator.rb, line 92
def save_pixbuf(pixbuf, optional=nil)
  pixbuf.save(pixbuf_filename(@slide_number, optional),
              normalized_image_type)
  image_src(@slide_number, optional)
end
slide_href(slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 126
def slide_href(slide_number)
  with_outputting_index(false) do
    href(slide_number)
  end
end
slide_image_title(slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 140
def slide_image_title(slide_number)
  @canvas.with_index_mode(false) do
    with_outputting_index(false) do
      image_title(slide_number)
    end
  end
end
with_outputting_index(index) { || ... } click to toggle source
# File lib/rabbit/html/generator.rb, line 152
def with_outputting_index(index)
  _index = @outputting_index
  @outputting_index = index
  yield
ensure
  @outputting_index = _index
end

Private Instance Methods

filename_format() click to toggle source
# File lib/rabbit/html/generator.rb, line 229
def filename_format
  format = @base_name.dup
  format << "-index" if outputting_index?
  slide_size = outputting_index? ? @index_slide_size : @slide_size
  format << "-%0#{number_of_places(slide_size)}d%s.%s"
end
first_href(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 373
def first_href(slide_number=@slide_number)
  href(first_index(slide_number))
end
first_index(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 321
def first_index(slide_number=@slide_number)
  0
end
first_slide?(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 313
def first_slide?(slide_number=@slide_number)
  slide_number.zero?
end
href(slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 273
def href(slide_number)
  name = slide_filename(slide_number)
  u(File.basename(name))
end
image_filename(slide_number=@slide_number, optional=nil) click to toggle source
# File lib/rabbit/html/generator.rb, line 250
def image_filename(slide_number=@slide_number, optional=nil)
  make_filename(slide_number, @image_type, optional)
end
image_src(slide_number=@slide_number, optional=nil) click to toggle source
# File lib/rabbit/html/generator.rb, line 431
def image_src(slide_number=@slide_number, optional=nil)
  u(File.basename(image_filename(slide_number, optional)))
end
image_title(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 291
def image_title(slide_number=@slide_number)
  title = h(slide_title(slide_number))
  title << "(#{slide_number}/#{@canvas.slide_size - 1})"
  title
end
last_href(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 385
def last_href(slide_number=@slide_number)
  href(last_index(slide_number))
end
last_index(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 333
def last_index(slide_number=@slide_number)
  @canvas.slide_size - 1
end
last_slide?(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 317
def last_slide?(slide_number=@slide_number)
  @canvas.slide_size.zero? or slide_number == @canvas.slide_size - 1
end
make_filename(slide_number, suffix, optional=nil) click to toggle source
# File lib/rabbit/html/generator.rb, line 236
def make_filename(slide_number, suffix, optional=nil)
  optional = "-#{optional}" if optional
  name = filename_format % [slide_number, optional || '', suffix]
  Filename.new(name).encode
end
make_rss() click to toggle source
# File lib/rabbit/html/generator.rb, line 447
def make_rss
  RSS::Maker.make('1.0') do |maker|
    now = Time.now
    title_slide_info = @rss_info.first
    filename, title, text, html = title_slide_info
    maker.channel.about = rss_uri
    maker.channel.title = title
    maker.channel.description = text
    maker.channel.link = @rss_base_uri
    maker.channel.date = now

    @rss_info.each_with_index do |info, i|
      filename, title, text, html = info
      item = maker.items.new_item
      item.link = "#{@rss_base_uri}#{File.basename(filename)}"
      item.title = title
      item.description = text
      item.content_encoded = normalize_html_reference(html, @rss_base_uri)
      item.date = now - i
    end
  end
end
navi() click to toggle source
next_href(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 381
def next_href(slide_number=@slide_number)
  href(next_index(slide_number))
end
next_index(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 329
def next_index(slide_number=@slide_number)
  slide_number + 1
end
normalize_html_reference(html, base_uri) click to toggle source
# File lib/rabbit/html/generator.rb, line 470
def normalize_html_reference(html, base_uri)
  html.gsub(/(href|src)=(["'])((?:(?!\2)[^:])+)\2/) do
    "#{$1}=#{$2}#{base_uri}#{$3}#{$2}"
  end
end
normalized_image_type() click to toggle source
# File lib/rabbit/html/generator.rb, line 264
def normalized_image_type
  case @image_type
  when /jpg/i
    "jpeg"
  else
    @image_type.downcase
  end
end
output_html(filename) click to toggle source
# File lib/rabbit/html/generator.rb, line 258
def output_html(filename)
  File.open(filename, "w") do |f|
    f.print(to_html)
  end
end
page_navi(slide_number=@slide_number) click to toggle source
pixbuf_filename(slide_number=@slide_number, optional=nil) click to toggle source
# File lib/rabbit/html/generator.rb, line 254
def pixbuf_filename(slide_number=@slide_number, optional=nil)
  make_filename(slide_number, @image_type, optional)
end
previous_href(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 377
def previous_href(slide_number=@slide_number)
  href(previous_index(slide_number))
end
previous_index(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 325
def previous_index(slide_number=@slide_number)
  slide_number - 1
end
rss_available?() click to toggle source
# File lib/rabbit/html/generator.rb, line 439
def rss_available?
  not @rss_base_uri.nil?
end
rss_uri() click to toggle source
# File lib/rabbit/html/generator.rb, line 443
def rss_uri
  "#{@rss_base_uri}#{@rss_filename}"
end
save_environment() { || ... } click to toggle source
# File lib/rabbit/html/generator.rb, line 161
def save_environment
  @index_mode = @canvas.index_mode?
  @slide_size = @canvas.slide_size
  @index_slide_size = 0
  if output_index_html?
    @canvas.with_index_mode(true) do
      @index_slide_size = @canvas.slide_size
    end
  end
  yield
ensure
  @index_mode = nil
  @slide_size = nil
  @index_slide_size = nil
end
save_html(slide, slide_number) { || ... } click to toggle source
# File lib/rabbit/html/generator.rb, line 177
def save_html(slide, slide_number)
  @slide = slide
  @slide_number = slide_number
  yield
ensure
  @slide_number = nil
  @slide = nil
end
save_index(slide, slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 200
def save_index(slide, slide_number)
  save_html(slide, slide_number) do
    with_outputting_index(true) do
      @slide_index_html = @slide.to_html(self)
      filename = slide_filename
      output_html(filename) if output_index_html?
      if rss_available?
        @rss_info << [filename, slide_title(slide_number),
                      @slide.text, @slide_index_html]
      end
      @slide_index_html = nil
    end
  end
end
save_rss() click to toggle source
# File lib/rabbit/html/generator.rb, line 215
def save_rss
  return true unless rss_available?
  if Object.const_defined?(:RSS)
    rss = make_rss
    name = File.join(@base_dir, @rss_filename)
    File.open(Filename.new(name).encode, "w") do |f|
      f.print(rss.to_s)
    end
    true
  else
    false
  end
end
save_slide(slide, pixbuf, slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 186
def save_slide(slide, pixbuf, slide_number)
  save_html(slide, slide_number) do
    with_outputting_index(false) do
      save_pixbuf(pixbuf)
      filename = slide_filename
      output_html(filename) if output_html?
      if rss_available?
        @rss_info << [filename, slide_title(slide_number),
                      @slide.text, @slide.to_html(self)]
      end
    end
  end
end
slide_content() click to toggle source
# File lib/rabbit/html/generator.rb, line 283
def slide_content
  if outputting_index?
    @slide_index_html
  else
    "<div class=\"slide\">#{slide_image}</div>"
  end
end
slide_filename(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 242
def slide_filename(slide_number=@slide_number)
  if !outputting_index? and slide_number.zero?
    Filename.new(File.join(@base_dir, "index.#{@suffix}")).encode
  else
    make_filename(slide_number, @suffix)
  end
end
slide_image(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 297
def slide_image(slide_number=@slide_number)
  src = image_src(slide_number)
  img = "<img title=\"#{image_title(slide_number)}\" " +
    "src=\"#{src}\" alt=\"#{h(slide_text(slide_number))}\" />"
  if last_slide?(slide_number)
    img
  else
    href = next_href(slide_number)
    "<a href=\"#{href}\">#{img}</a>"
  end
end
slide_text(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 309
def slide_text(slide_number=@slide_number)
  @canvas.slide_text(slide_number)
end
slide_title(slide_number=@slide_number) click to toggle source
# File lib/rabbit/html/generator.rb, line 435
def slide_title(slide_number=@slide_number)
  Utils.unescape_title(@canvas.slide_title(slide_number))
end
toggle_mode_href() click to toggle source
# File lib/rabbit/html/generator.rb, line 389
def toggle_mode_href
  with_outputting_index(!outputting_index?) do
    first_href
  end
end