Class: OrigenDocHelpers::PDF

Inherits:
Object
  • Object
show all
Includes:
Origen::Callbacks
Defined in:
lib/origen_doc_helpers/pdf.rb

Constant Summary collapse

WKHTMLTOPDF =
'/run/pkg/wkhtmltopdf-/0.12.1/bin/wkhtmltopdf'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ PDF

Returns a new instance of PDF.


23
24
25
26
27
28
29
30
31
# File 'lib/origen_doc_helpers/pdf.rb', line 23

def initialize(options)
  @title = options[:pdf_title]
  @index = options[:index]
  @root = Pathname.new(options[:root])
  if @root.absolute?
    @root = @root.relative_path_from(Pathname.new("#{Origen.root}/templates/web"))
  end
  require 'nokogiri'
end

Instance Attribute Details

#filenameObject (readonly)

Returns the value of attribute filename.


5
6
7
# File 'lib/origen_doc_helpers/pdf.rb', line 5

def filename
  @filename
end

#indexObject (readonly)

Returns the value of attribute index.


5
6
7
# File 'lib/origen_doc_helpers/pdf.rb', line 5

def index
  @index
end

#rootObject (readonly)

Returns the value of attribute root.


5
6
7
# File 'lib/origen_doc_helpers/pdf.rb', line 5

def root
  @root
end

#titleObject (readonly)

Returns the value of attribute title.


5
6
7
# File 'lib/origen_doc_helpers/pdf.rb', line 5

def title
  @title
end

Class Method Details

.enabled?Boolean

Returns:

  • (Boolean)

19
20
21
# File 'lib/origen_doc_helpers/pdf.rb', line 19

def self.enabled?
  Origen.running_on_linux? && File.exist?(WKHTMLTOPDF)
end

.register(options) ⇒ Object

This is called by the searchable doc layout template


10
11
12
13
14
15
16
17
# File 'lib/origen_doc_helpers/pdf.rb', line 10

def self.register(options)
  if options[:pdf_title] && enabled?
    @doc_pdfs ||= {}
    name = options[:pdf_title].to_s.symbolize
    @doc_pdfs[name] ||= new(options)
    @doc_pdfs[name].filename
  end
end

Instance Method Details

#before_deploy_siteObject

This is a callback handler to have the PDF creation invoked prior to deploying a pre-built website


35
36
37
# File 'lib/origen_doc_helpers/pdf.rb', line 35

def before_deploy_site
  create
end

#createObject


43
44
45
46
47
48
49
50
# File 'lib/origen_doc_helpers/pdf.rb', line 43

def create
  puts ''
  puts "Generating PDF: #{filename}..."
  puts ''
  create_topic_pages
  generate_pdf
  delete_topic_pages
end

#create_topic_pagesObject


85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/origen_doc_helpers/pdf.rb', line 85

def create_topic_pages
  topic_dirs do |topic, pages, topic_dir|
    topic_page = "#{topic_dir}/topic_page.html"
    page_str = "<h1>#{topic}</h1>\n"
    pages.each do |page_path, _page_heading|
      page_file = page_path.to_s.split('_').last
      page_file = "#{topic_dir}/#{page_file}/index.html"
      doc = Nokogiri::HTML(File.read(page_file))
      page_str += doc.xpath('//article').to_html
      page_str += "\n"
    end
    File.open(topic_page, 'w') do |file|
      file.puts topic_wrapper_string.sub('SUB_TOPIC_CONTENT_HERE', page_str)
    end
  end
end

#delete_topic_pagesObject


102
103
104
105
106
# File 'lib/origen_doc_helpers/pdf.rb', line 102

def delete_topic_pages
  topic_dirs do |_topic, _pages, topic_dir|
    FileUtils.rm_f("#{topic_dir}/topic_page.html")
  end
end

#generate_pdfObject


56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/origen_doc_helpers/pdf.rb', line 56

def generate_pdf
  cmd =  "#{WKHTMLTOPDF} --print-media-type "
  cmd += "--footer-line --footer-font-size 8 --footer-left 'Freescale Internal Use Only' --footer-right [page] "
  cmd += "--header-left '#{title} (#{version})' --header-line --header-font-size 8 "
  index.each do |topic, pages|
    dir = "#{Origen.root}/web/output/#{root}"
    if topic
      topic_dir = pages.keys.first.to_s.split('_').first
      file = "#{dir}/#{topic_dir}/topic_page.html"
      cmd += "#{file} "
    else
      pages.each do |page_path, _page_heading|
        file = "#{dir}/#{page_path}/index.html"
        cmd += "#{file} "
      end
    end
  end
  cmd += "#{pdf_output_dir}/#{filename}"
  system cmd
end

#pdf_output_dirObject


77
78
79
80
81
82
83
# File 'lib/origen_doc_helpers/pdf.rb', line 77

def pdf_output_dir
  @pdf_output_dir ||= begin
    dir = "#{Origen.root}/web/output/doc_helpers/pdfs"
    FileUtils.mkdir_p(dir) unless File.exist?(dir)
    dir
  end
end

#topic_dirsObject


108
109
110
111
112
113
114
115
116
# File 'lib/origen_doc_helpers/pdf.rb', line 108

def topic_dirs
  index.each do |topic, pages|
    if topic
      topic_dir = pages.keys.first.to_s.split('_').first
      topic_dir = "#{Origen.root}/web/output/#{root}/#{topic_dir}"
      yield topic, pages, topic_dir
    end
  end
end

#topic_wrapper_stringObject


118
119
120
# File 'lib/origen_doc_helpers/pdf.rb', line 118

def topic_wrapper_string
  @topic_wrapper_string ||= File.read("#{Origen.root!}/templates/pdf/topic_wrapper.html")
end

#versionObject


52
53
54
# File 'lib/origen_doc_helpers/pdf.rb', line 52

def version
  Origen.app.name == :origen ? Origen.version : Origen.app.version
end