jekyll_asciidoctor_pdf 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88586c97b2eadf108ff201a33b5c1a56123e13011134f3abf86aa8733f71e72d
4
- data.tar.gz: 14aff1159ef1f74bf8f64be4fcfa5324ff521d856f2a64233636150f48a2fd67
3
+ metadata.gz: df0c08936771991bbd479c0660e3894ff098f90a8622b2a08388c75a74c7c8c8
4
+ data.tar.gz: eca5423777312dd5426656a1c295dd2c3a770fb2fabd59b0afaa686a21eb9e43
5
5
  SHA512:
6
- metadata.gz: b46c60ae81a4122c1198025424122a73c917bd5de39bb93a3555c83db5c003a5a70ab3681e262000f735e8a9eb5c26a3d00be70b5040b3423bbc7eed7e48ea85
7
- data.tar.gz: b33d0ee11c17f0d9cde69a42fbb3fbc10e68584bb408aeeaa2615d9bd71292b10403575976d0f60060db978921b125114bac8b66fe1a364a84966f98ab719fd6
6
+ metadata.gz: 66bf3b9a3be30eb7007f1bfbb0c373453037113f3e36b2390cc3bd2edd0bef5f51d1c969ee3d052e119fa3bd055f1622bb21588110e49ca525fa18d4f246fd2e
7
+ data.tar.gz: ca588094ef6072e4dd5ae6ed4cac5c6e2543981287a2a137e483be7ac5edf32ffc92eeef854695be93f4087591a44a2753c34a1d07ed8fa36a292d101007d94d
@@ -45,6 +45,7 @@ Gem::Specification.new do |spec|
45
45
  spec.add_runtime_dependency 'safe_yaml', '>= 1.0.5'
46
46
  spec.add_runtime_dependency 'json', '>= 2.1.0'
47
47
  spec.add_runtime_dependency 'rest-client', '>= 2.0.0'
48
+ spec.add_runtime_dependency 'prawn', '>= 2.2.2'
48
49
  spec.add_runtime_dependency 'asciidoctor-pdf', '>= 1.5.1'
49
50
 
50
51
  end
@@ -1,13 +1,50 @@
1
1
  require 'yaml'
2
2
  require 'fileutils'
3
+ require 'prawn'
3
4
  require 'asciidoctor-pdf'
4
5
  require 'asciidoctor'
5
6
 
6
7
  # Do not touch, this REGEXP is taken from Jekyll source code
7
8
  YAML_FRONT_MATTER_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
9
+ RELATIVE_LINK_REGEXP = /(^|\s)link:(?!(http:|https:))/
10
+ CHECK_REGEXP = /✓/
8
11
 
9
12
  module JekyllAsciidoctorPdf
10
13
  class ADoc
14
+
15
+ ##
16
+ # Search and replace expression to clean up the original file
17
+ #
18
+ # Common Issues:
19
+ # - Relative links: link:relative.html -> link:<BASE_URL>.html
20
+ # - Checkmark symbol: &check; -> icon:check[]
21
+ # - Remove YAML front matter (we could use skip-front-matter attribute)
22
+ #
23
+ #
24
+ # Previous code
25
+ #
26
+ # subs = {
27
+ # YAML_FRONT_MATTER_REGEXP => '',
28
+ # RELATIVE_LINK_REGEXP => '\1link:' + base_url,
29
+ # CHECK_REGEXP => 'icon:check[]'
30
+ # }
31
+ #
32
+ # combined_regexp = Regexp.union(subs.keys)
33
+ #
34
+ # return content.gsub(combined_regexp, subs)
35
+ #
36
+ # Previous code didn't work properly
37
+ #
38
+ # TODO: We should try to perform mutilple regexp subs at once.
39
+ #
40
+ def self.fixCommonIssues(content, base_url)
41
+ temp = content.gsub(YAML_FRONT_MATTER_REGEXP, '')
42
+ temp = temp.gsub(RELATIVE_LINK_REGEXP, '\1link:' + base_url )
43
+ temp = temp.gsub(CHECK_REGEXP, ' icon:check[] ')
44
+
45
+ return temp
46
+ end
47
+
11
48
  def self.getAuthorsList(file)
12
49
  names = %x[ git log --pretty=format:"%an" #{file} | sort | uniq ]
13
50
  # last_commit_date can be nil iff the file was not committed.
@@ -22,9 +59,12 @@ module JekyllAsciidoctorPdf
22
59
  # Generate a PDF of an individual page
23
60
  #
24
61
  # - Remove the jekyll frontmatter
62
+ # - Read the content
63
+ # - Execute regexp to fix issues
25
64
  # - Execute the convert process
26
65
  # - Let the caller to collect information from the front_matter and from the file itself
27
66
  #
67
+ #
28
68
  def self.generatePdf(product_name, file, output_path, parameters, cover_page, theme_pdf, revision, authors, base_url)
29
69
 
30
70
  front_matter = {}
@@ -35,7 +75,7 @@ module JekyllAsciidoctorPdf
35
75
  front_matter = SafeYAML.load(Regexp.last_match(1))
36
76
  end
37
77
 
38
- stream_adoc = content.gsub(YAML_FRONT_MATTER_REGEXP, '').gsub(/(^|\s)link:(?!(http:|https:))/,'\1link:' + base_url)
78
+ stream_adoc = fixCommonIssues(content, base_url)
39
79
 
40
80
  # We should think about the performance of get the title in that way
41
81
  adoc = Asciidoctor.load stream_adoc
@@ -44,7 +84,6 @@ module JekyllAsciidoctorPdf
44
84
  filename = File.basename(file,'.*') + '.pdf'
45
85
  filename_path = output_path
46
86
  base_path = File.dirname(file)
47
- #authors = getAuthorsList(file)
48
87
 
49
88
  generateBookTypePdf(filename, filename_path, product_name, title, base_path, stream_adoc, parameters, cover_page, theme_pdf, revision, authors)
50
89
 
@@ -111,10 +150,15 @@ module JekyllAsciidoctorPdf
111
150
  revision_s = revision.strftime('%m/%d/%Y')
112
151
  end
113
152
 
153
+ temp_pdf = File.join(File.dirname(cover_page), 'temp-cover.pdf')
154
+
155
+ generateCoverPage(title, product_name, authors_s, revision_s, '', cover_page, temp_pdf)
156
+
114
157
  text = <<~TEXT
115
158
  = #{title} : #{product_name}
116
159
  #{authors_s}
117
160
  #{revision_s}
161
+ :notitle:
118
162
  :doctype: book
119
163
  :experimental:
120
164
  :reproducible:
@@ -129,7 +173,7 @@ module JekyllAsciidoctorPdf
129
173
  ifdef::backend-pdf[]
130
174
  :pdf-theme: #{theme_pdf}
131
175
  :title-page:
132
- :title-page-background-image: image:#{cover_page}[fit=none,pdfwidth=100%,position=top]
176
+ :front-cover-image: image:#{temp_pdf}[]
133
177
  :source-highlighter: rouge
134
178
  endif::[]
135
179
  :chapter-label:
@@ -143,6 +187,52 @@ module JekyllAsciidoctorPdf
143
187
  return text
144
188
  end
145
189
 
190
+ def self.generateCoverPage(title, subtitle, authors, revision, abstract, background_image, file)
191
+
192
+ info = {
193
+ :Title => title,
194
+ :Author => authors,
195
+ :Subject => subtitle,
196
+ :Keywords => "",
197
+ :Creator => "NetApp",
198
+ :Producer => "NetApp",
199
+ :CreationDate => Time.now
200
+ }
201
+
202
+ Prawn::Document.generate(file, :page_size => 'A4', :margin => 0, :info => info) do
203
+ stroke_bounds
204
+ image background_image, :position => :left, :vposition => :top, :fit => [680,3508]
205
+
206
+ bounding_box([60, 700], :width => 500, :height => 650) do
207
+ font "Times-Roman"
208
+ #stroke_bounds
209
+ #stroke_circle [0, 0], 10
210
+
211
+ move_down 120
212
+
213
+ text "Technical Report", size: 12, color: "4B4b4b"
214
+ move_down 10
215
+
216
+ text title, size: 20, font: 'Times-Roman', color: "1667c5"
217
+ move_down 5
218
+ text subtitle, size: 16, font: 'Times-Roman', color: "999999"
219
+
220
+ move_down 10
221
+
222
+ text authors, size: 12, font: 'Times-Roman', color: "4B4b4b"
223
+ text revision, size: 12, font: 'Times-Roman', color: "4B4b4b"
224
+
225
+
226
+ #move_down 300
227
+ #text "Abstract", size: 14, font: "Times-Roman", color: "0000FF"
228
+ #move_down 10
229
+ #font_size(12) { text abstract, font: "Times-Roman" }
230
+
231
+ end
232
+ end
233
+ end
234
+
235
+
146
236
  def self.getCopyright()
147
237
  text = <<~TEXT
148
238
  <<<
@@ -186,14 +186,12 @@ module JekyllAsciidoctorPdf
186
186
  #
187
187
  def init
188
188
  output("Initialize files & output directories ...")
189
- output_fullsite = File.join(absolute_output_path, '/fullsite')
190
189
  output_pages = File.join(absolute_output_path, '/pages')
191
190
  output_assets = File.join(absolute_output_path, '/assets')
192
191
 
193
192
  mkdir_p(absolute_output_path, quiet)
194
193
  mkdir_p(output_pages,quiet)
195
194
  mkdir_p(output_assets,quiet)
196
- mkdir_p(output_fullsite,quiet)
197
195
 
198
196
  fullsite_config = parameters['fullsite']
199
197
  background_image = File.join(absolute_working_path, fullsite_config['background_image'])
@@ -49,7 +49,7 @@ module JekyllAsciidoctorPdf
49
49
  userResponse = response.body
50
50
  unless userResponse.nil? || userResponse.empty?
51
51
  hash = JSON.parse(userResponse)
52
- if (hash.key?('name'))
52
+ if (hash.key?('name') and (not hash['name'].nil?))
53
53
  authors_hash[login_name] = hash['name']
54
54
  return hash['name']
55
55
  end
@@ -101,7 +101,7 @@ module JekyllAsciidoctorPdf
101
101
  rescue => e
102
102
  puts "Error Message: #{e.to_s}";
103
103
  end
104
-
104
+
105
105
  authors = contributors.sort_by{|name, commits| [-commits, name]}.transpose[0]
106
106
 
107
107
  if (authors.nil? || authors.empty? )
@@ -48,7 +48,7 @@ module JekyllAsciidoctorPdf
48
48
  #
49
49
  class SidebarYAML
50
50
 
51
- attr_reader :product_name, :name, :file, :permalinks, :parameters, :section_output_path, :sidebar_output_path, :base_path, :cover_page, :theme_pdf
51
+ attr_reader :product_name, :name, :file, :permalinks, :parameters, :section_output_path, :sidebar_output_path, :base_path, :cover_page, :theme_pdf, :prefix
52
52
 
53
53
 
54
54
  def initialize(product_name, name, file, permalinks, parameters, output_path, base_path, cover_page, theme_pdf )
@@ -57,9 +57,10 @@ module JekyllAsciidoctorPdf
57
57
  @file = file
58
58
  @permalinks = permalinks
59
59
  @parameters = parameters
60
- @base_path = base_path
61
60
  @cover_page = cover_page
62
61
  @theme_pdf = theme_pdf
62
+ @base_path = base_path
63
+ @prefix = nil
63
64
 
64
65
  @section_output_path = File.join(output_path,name)
65
66
  @sidebar_output_path = File.join(output_path,'/fullsite-' + name)
@@ -68,7 +69,27 @@ module JekyllAsciidoctorPdf
68
69
  FileUtils::mkdir_p(sidebar_output_path)
69
70
 
70
71
  toc = YAML.load_file(file)
71
- loadAndProcess('Root', toc['entries'], true)
72
+
73
+
74
+ ##
75
+ # In the more general structure this prefix is important
76
+ # We use in two ways
77
+ #
78
+ # - Move the base path to execute the asciidoctor process
79
+ # - Use prefix + url to find in the permalinks hash
80
+ #
81
+ if toc and toc.key?('prefix')
82
+ @prefix = toc['prefix']
83
+ @base_path = File.join(base_path, @prefix)
84
+ end
85
+
86
+ ##
87
+ # A few repositories may have sidebar.yml empty.
88
+ # we should ignore it
89
+ #
90
+ if toc and toc.key?('entries')
91
+ loadAndProcess('Root', toc['entries'], true)
92
+ end
72
93
 
73
94
  end
74
95
 
@@ -120,6 +141,10 @@ module JekyllAsciidoctorPdf
120
141
  # We ignore absolute links
121
142
  output("Absolute links are not supported!")
122
143
  else
144
+ if not prefix.nil?
145
+ page = '/' + prefix + child['url']
146
+ end
147
+
123
148
  if permalinks.key?(page)
124
149
  # We have the content
125
150
  node.add_child(JekyllAsciidoctorPdf::SidebarEntry.new(title,page, permalinks[page].content, false))
@@ -1,3 +1,3 @@
1
1
  module JekyllAsciidoctorPdf
2
- VERSION = '0.3.2'
2
+ VERSION = '0.3.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_asciidoctor_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guido Genzone
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-09 00:00:00.000000000 Z
11
+ date: 2020-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: 2.0.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: prawn
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.2.2
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.2.2
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: asciidoctor-pdf
127
141
  requirement: !ruby/object:Gem::Requirement