class Bookify::Renderer
Attributes
column_spacer[RW]
columns[RW]
input_file[RW]
input_text[RW]
layout[RW]
margin[RW]
output_file[RW]
page_size[RW]
Public Class Methods
from_args(args)
click to toggle source
# File lib/bookify/renderer.rb, line 4 def self.from_args(args) if ["-l", "--landscape"].include?(args[0]) args.shift layout = :landscape columns = 3 else layout = :portrait columns = 2 end input_file = args[0] output_file = args[1] || input_file.split("/").last.gsub(/\.\w+/, ".pdf") new(layout: layout, columns: columns, input_file: input_file, output_file: output_file) end
new(layout: :portrait, columns: 2, output_file:, input_file: nil, input_text: nil, column_spacer: nil, margin: 50, page_size: nil)
click to toggle source
# File lib/bookify/renderer.rb, line 20 def initialize(layout: :portrait, columns: 2, output_file:, input_file: nil, input_text: nil, column_spacer: nil, margin: 50, page_size: nil) @layout = layout @columns = columns @output_file = output_file @input_file = input_file @input_text = input_text @column_spacer = column_spacer @margin = margin @page_size = page_size end
Public Instance Methods
render()
click to toggle source
# File lib/bookify/renderer.rb, line 31 def render doc_opts = {margin: margin, page_layout: layout, page_size: page_size}.compact Bookify::Sections.reset Prawn::Document.generate(output_file, doc_opts) do |pdf| font_path = "#{File.dirname(__FILE__)}/../../fonts" pdf.font_families["Book Antiqua"] = { normal: {file: "#{font_path}/BookAntiqua.ttf"}, bold: {file: "#{font_path}/BookAntiqua-Bold.ttf"}, italic: {file: "#{font_path}/BookAntiqua-Italic.ttf"}, bold_italic: {file: "#{font_path}/BookAntiqua-BoldItalic.ttf"} } pdf.fill_color "000000" pdf.stroke_color "333333" pdf.line_width(0.5) pdf.default_leading 0.5 pdf.column_box [0, pdf.cursor], columns: columns, width: pdf.bounds.width, spacer: (column_spacer || pdf.font_size) do doc.children.each { |c| Bookify::Node.render(c, pdf) } end Bookify::Sections.all.each do |section| pdf.outline.section(section[:title], destination: section[:dest]) do section[:subsections].each do |subsection| pdf.outline.page title: subsection[:title], destination: subsection[:dest] end end end end end
Private Instance Methods
doc()
click to toggle source
# File lib/bookify/renderer.rb, line 70 def doc @doc ||= Nokogiri::HTML(html) end
html()
click to toggle source
# File lib/bookify/renderer.rb, line 74 def html @html ||= markdown_converter.render(markdown) end
markdown()
click to toggle source
# File lib/bookify/renderer.rb, line 66 def markdown @markdown ||= (input_text || File.read(input_file)) end
markdown_converter()
click to toggle source
# File lib/bookify/renderer.rb, line 78 def markdown_converter Redcarpet::Markdown.new(Bookify::Markdown, tables: true) end