class FN::SWF::Writer

Public Class Methods

new() click to toggle source
# File lib/fn/swf/writer.rb, line 10
def initialize
end

Public Instance Methods

image_dimensions(image) click to toggle source
# File lib/fn/swf/writer.rb, line 13
def image_dimensions(image)
  img = `identify "#{image}"`.scan(/ JPEG (\d+)x(\d+)/).flatten.map{|a|a.to_i}
end
translate(doc, options = {}) click to toggle source
# File lib/fn/swf/writer.rb, line 28
def translate(doc, options = {})
  raise "Not an FN Document" unless doc.is_a?(FN::Document)
  
  file          = options[:save_as] or raise "must provide :save_as"
  root          = options[:resource_root]
  
  context = FN::Node::Context.new       
  $depth = 500
  
  page = doc.pages.first
  context << Flash(page[:width], page[:height])
  
  # sorta no-op-ish
  # doc.fonts.each do |font|
  #   context.add Font.load_all_variants(font.key, font.path_from(root))
  # end
  
  global_texts = doc.textflows.inject({}) do |memo, node|
    memo[node["id"]] = node.children.to_s
    memo
  end
  
  context.add Break()
  
  image_dims = {}
  
  doc.images.each do |img|
    if img.complete?
      path = img.path_from(root)
      context.add Image(img.key, path)
      image_dims[img.key] = image_dimensions(path)
    end
  end
  
  context.add Break()
  
  doc.pages.each do |page|
    context.retain_after do
      context.pre HotSpot(page)
      context << Page(page[:number], page[:background])
      
      doc.text_blocks_by(page["number"]).each do |block|
        context.add Text(block, global_texts[block["text"]])
      end
      
      context.add Break()
      
      i = 0
      doc.photo_blocks_by(page["number"]).each do |block|
        i += 1
        context.add PhotoBlock(block, image_dims)
      end
      
      context.add Break()
    end
  end
  
  return context.doc
end
write(doc, options = {}) click to toggle source
# File lib/fn/swf/writer.rb, line 17
def write(doc, options = {})
  write_xml translate(doc, options), options[:save_as]
end
write_xml(xml, file) click to toggle source
# File lib/fn/swf/writer.rb, line 21
def write_xml(xml, file)
  xml.root.extend(FN::Node::Root)
  File.open("#{file}.txt", "w") {|f| f.puts xml.root.visit(FN::SWF::Struct.new).buffer }        
  cmd = %[swfc -o #{file} #{file}.txt]
  system(cmd) ? file : raise("couldn't write swf")
end