jekyll_asciidoctor_pdf 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.travis.yml +11 -0
- data/Gemfile +6 -0
- data/README.adoc +10 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/jekyll_asciidoctor_pdf.gemspec +48 -0
- data/lib/jekyll_asciidoctor_pdf.rb +13 -0
- data/lib/jekyll_asciidoctor_pdf/commands.rb +368 -0
- data/lib/jekyll_asciidoctor_pdf/tree.rb +71 -0
- data/lib/jekyll_asciidoctor_pdf/version.rb +3 -0
- metadata +154 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a4b11ffb4ac2be03a16972ded5242a70584fa5cd01c7d2b89be82dd723fa1805
|
4
|
+
data.tar.gz: b2f9ab8fb396f227940e2f3bae283f2ef7c5ffd3d88f389a32877594cadf67aa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 66de845ade0747136063df8d6021187ec0324df2749730b3f7c2afa9fdf2e6a36bb71f3a748766543b4ad9eceebb964b2a7ed3fa5a5813f5716521471716ba70
|
7
|
+
data.tar.gz: e273e68ad8847f1d4ac3f4b8264111595a41b65d2def3fdb7d5b0d3f46207ee0192ba58697cf698f76a4d129bee719bb6691690a3dce52a8525603ed5cff5a95
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
sudo: false
|
2
|
+
dist: trusty
|
3
|
+
group: deprecated-2017Q4 # To fix NPM timeout errors
|
4
|
+
language: ruby
|
5
|
+
rvm:
|
6
|
+
- 2.4.3
|
7
|
+
before_install:
|
8
|
+
- gem update --system && gem install bundler && gem update bundler
|
9
|
+
script:
|
10
|
+
- bundle exec rake test
|
11
|
+
- bundle exec rake build
|
data/Gemfile
ADDED
data/README.adoc
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
= Jekyll PDF Generator using AsciiDoctor
|
2
|
+
:gem-name: rake_jekyll_asciidoctor_pdf
|
3
|
+
:gh-branch: master
|
4
|
+
:badge-style: flat
|
5
|
+
|
6
|
+
image:https://img.shields.io/gem/v/{gem-name}.svg?style={badge-style}[Gem Version, link="https://rubygems.org/gems/{gem-name}"]
|
7
|
+
|
8
|
+
toc::[]
|
9
|
+
|
10
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'jekyll_asciidoctor_pdf'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'jekyll_asciidoctor_pdf/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'jekyll_asciidoctor_pdf'
|
9
|
+
spec.version = JekyllAsciidoctorPdf::VERSION
|
10
|
+
spec.authors = ['Guido Genzone']
|
11
|
+
spec.email = ['guido.genzone@netapp.com']
|
12
|
+
|
13
|
+
spec.summary = 'Rake tasks to convert *.adoc files from Jekyll to PDF using asciidoctor-pdf'
|
14
|
+
spec.description = 'Rake tasks to convert *.adoc files from Jekyll to PDF using asciidoctor-pdf'
|
15
|
+
spec.homepage = 'https://github.com/ggenzone/jekyll_asciidoctor_pdf'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
19
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
20
|
+
#if spec.respond_to?(:metadata)
|
21
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
22
|
+
#else
|
23
|
+
# raise 'RubyGems 2.0 or newer is required to protect against ' \
|
24
|
+
# 'public gem pushes.'
|
25
|
+
#end
|
26
|
+
|
27
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
28
|
+
f.match(%r{^(test|spec|features)/})
|
29
|
+
end
|
30
|
+
spec.bindir = 'exe'
|
31
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
|
+
spec.require_paths = ['lib']
|
33
|
+
|
34
|
+
spec.required_ruby_version = '>= 2.0'
|
35
|
+
|
36
|
+
spec.add_development_dependency 'bundler', '~> 2.1.4'
|
37
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
38
|
+
spec.add_development_dependency 'rubocop', '~> 0.52'
|
39
|
+
|
40
|
+
#spec.add_runtime_dependency 'rake', '>= 12.3.3'
|
41
|
+
|
42
|
+
#We shoudn't use this version for a security issue
|
43
|
+
spec.add_runtime_dependency 'rake', '>= 10.0'
|
44
|
+
spec.add_runtime_dependency 'fileutils', '>= 1.1'
|
45
|
+
spec.add_runtime_dependency 'safe_yaml', '>= 1.0.5'
|
46
|
+
spec.add_runtime_dependency 'asciidoctor-pdf', '>= 1.5.1'
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'jekyll_asciidoctor_pdf/version'
|
3
|
+
require 'jekyll_asciidoctor_pdf/commands'
|
4
|
+
|
5
|
+
|
6
|
+
# JekyllAsciidoctorPdf
|
7
|
+
#
|
8
|
+
# Empty module being initialized.
|
9
|
+
# This RubyGem holds examples of how to make Rake tasks for Rake using a
|
10
|
+
# RubyGem and some custom stuff. It helps clean up the Rakefile later.
|
11
|
+
module JekyllAsciidoctorPdf
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,368 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
require 'yaml'
|
6
|
+
require 'fileutils'
|
7
|
+
require 'asciidoctor-pdf'
|
8
|
+
require 'asciidoctor'
|
9
|
+
require 'jekyll_asciidoctor_pdf/tree'
|
10
|
+
|
11
|
+
|
12
|
+
# Do not touch, this REGEXP is taken from Jekyll source code
|
13
|
+
YAML_FRONT_MATTER_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
|
14
|
+
|
15
|
+
|
16
|
+
module JekyllAsciidoctorPdf
|
17
|
+
|
18
|
+
|
19
|
+
class BuildTask < ::Rake::TaskLib
|
20
|
+
|
21
|
+
##
|
22
|
+
# @private
|
23
|
+
# Defines attribute accessor with optional default value.
|
24
|
+
# When attribute's value is a +Proc+ with arity 0, then the attribute
|
25
|
+
# reader calls it and returns the result.
|
26
|
+
#
|
27
|
+
# @param attr_name [#to_s] name of the attribute to define.
|
28
|
+
# @param default_value [Object] the default value (optional).
|
29
|
+
# @yield When the block is given, then it's used as a default value.
|
30
|
+
# It takes precedence over the +default_value+. It's evaluated in an
|
31
|
+
# instance context.
|
32
|
+
def self.callable_attr(attr_name, default_value = nil, &default_block)
|
33
|
+
var_name = "@#{attr_name}".sub('?', '').to_sym
|
34
|
+
|
35
|
+
define_method attr_name do
|
36
|
+
value = instance_variable_get(var_name)
|
37
|
+
|
38
|
+
if value.nil? && default_block
|
39
|
+
do_in_working_dir { instance_eval &default_block }
|
40
|
+
elsif value.nil?
|
41
|
+
default_value
|
42
|
+
elsif value.is_a?(Proc) && value.arity.zero?
|
43
|
+
do_in_working_dir &value
|
44
|
+
else
|
45
|
+
value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_writer attr_name.to_s.sub('?', '')
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [#to_sym] name of the task.
|
53
|
+
attr_accessor :name
|
54
|
+
|
55
|
+
# @return [#to_s] description of the task.
|
56
|
+
attr_accessor :description
|
57
|
+
|
58
|
+
attr_accessor :parameters
|
59
|
+
|
60
|
+
attr_reader :absolute_temp_path
|
61
|
+
attr_reader :absolute_working_path
|
62
|
+
attr_reader :absolute_source_path
|
63
|
+
attr_reader :absolute_assets_list
|
64
|
+
attr_reader :absolute_config_file
|
65
|
+
attr_reader :absolute_sidebar_file
|
66
|
+
attr_reader :absolute_output_path
|
67
|
+
|
68
|
+
attr_reader :assets_list
|
69
|
+
attr_reader :quiet
|
70
|
+
|
71
|
+
callable_attr :jekyll_config_file, '_config.yml'
|
72
|
+
|
73
|
+
def initialize(name = :build_pdf)
|
74
|
+
@name = name
|
75
|
+
@description = 'Generate PDF files for each *.adoc in the source_list '
|
76
|
+
|
77
|
+
@absolute_working_path = Dir.pwd
|
78
|
+
@absolute_temp_path = Dir.mktmpdir
|
79
|
+
|
80
|
+
@quiet = { verbose: true }
|
81
|
+
|
82
|
+
#file = __FILE__
|
83
|
+
#file = File.readlink(file) if File.symlink?(file)
|
84
|
+
#@base_dir = File.dirname(file)
|
85
|
+
|
86
|
+
#puts @base_dir
|
87
|
+
|
88
|
+
yield self if block_given?
|
89
|
+
|
90
|
+
@absolute_config_file = File.join(@absolute_working_path, jekyll_config_file);
|
91
|
+
|
92
|
+
do_jekyll_config_ok? do |t|
|
93
|
+
@absolute_source_path = File.join(@absolute_working_path, @parameters['source_path']);
|
94
|
+
@absolute_output_path = File.join(@absolute_working_path, @parameters['output_path']);
|
95
|
+
@absolute_sidebar_file = File.join(@absolute_working_path, @parameters['sidebar_file']);
|
96
|
+
|
97
|
+
files = []
|
98
|
+
FileList[@parameters['assets_list']].each do |file|
|
99
|
+
files << File.join(@absolute_working_path,file)
|
100
|
+
end
|
101
|
+
|
102
|
+
@absolute_assets_list = files
|
103
|
+
|
104
|
+
define_task!
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
def define_task!
|
111
|
+
|
112
|
+
desc "Print information variables"
|
113
|
+
task :info do
|
114
|
+
print_variables
|
115
|
+
end
|
116
|
+
|
117
|
+
desc "Cleaning files & directories"
|
118
|
+
task :clean do
|
119
|
+
clean
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
# We can improve it using replace inline and cp
|
124
|
+
desc "Rewriting *.adoc files and generating auxiliary files without front matter"
|
125
|
+
task :generateTempFiles => [ :clean ] do
|
126
|
+
generate_temp_files
|
127
|
+
end
|
128
|
+
|
129
|
+
desc "Generating PDFs files for each page"
|
130
|
+
task :generatePdf => [:clean, :generateTempFiles] do
|
131
|
+
generate_pdf
|
132
|
+
end
|
133
|
+
|
134
|
+
desc "Generate the fullsite.adoc file"
|
135
|
+
file 'fullsite.adoc' => ['generateTempFiles'] do
|
136
|
+
|
137
|
+
generate_fullsite_adoc
|
138
|
+
end
|
139
|
+
|
140
|
+
desc "Generate the fullsite.pdf file"
|
141
|
+
file 'fullsite.pdf' => 'fullsite.adoc' do
|
142
|
+
|
143
|
+
generate_fullsite_pdf
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
desc description
|
148
|
+
task name.to_sym => [:generatePdf, 'fullsite.pdf'] do
|
149
|
+
remove_entry absolute_temp_path
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
##
|
158
|
+
# Check if Jekyll configuration is Okay
|
159
|
+
#
|
160
|
+
def do_jekyll_config_ok?
|
161
|
+
config = YAML.load_file(absolute_config_file)
|
162
|
+
|
163
|
+
assert_key(config, 'jap_config', "Expected key 'jap_config' to exist, but does not")
|
164
|
+
|
165
|
+
@parameters = config['jap_config']
|
166
|
+
|
167
|
+
assert_key(@parameters, 'source_path' , "Expected key 'jap_config.source_path' to exist, but does not")
|
168
|
+
assert_key(@parameters, 'assets_list' , "Expected key 'jap_config.assets_list' to exist, but does not")
|
169
|
+
assert_key(@parameters, 'output_path' , "Expected key 'jap_config.output_path' to exist, but does not")
|
170
|
+
assert_key(@parameters, 'sidebar_file', "Expected key 'jap_config.sidebar_file' to exist, but does not")
|
171
|
+
|
172
|
+
yield
|
173
|
+
end
|
174
|
+
|
175
|
+
def assert_key(array, key, message)
|
176
|
+
if not array.has_key? key
|
177
|
+
output(message)
|
178
|
+
exit 1
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
|
183
|
+
def print_variables
|
184
|
+
output("Current directory: " + absolute_working_path)
|
185
|
+
output("Jekyll Config File: " + absolute_config_file)
|
186
|
+
output("Source directory: " + absolute_source_path)
|
187
|
+
output("Assets files: " + absolute_assets_list.join("\n"))
|
188
|
+
output("Temporary directory: " + absolute_temp_path)
|
189
|
+
output("Building directory: " + absolute_output_path)
|
190
|
+
end
|
191
|
+
|
192
|
+
def clean
|
193
|
+
output_pages = File.join(absolute_output_path, '/pages')
|
194
|
+
output("Removing files & ouput directories ...")
|
195
|
+
rm_rf(absolute_output_path, quiet)
|
196
|
+
mkdir_p(absolute_output_path, quiet)
|
197
|
+
mkdir_p(output_pages,quiet)
|
198
|
+
end
|
199
|
+
|
200
|
+
def generate_temp_files
|
201
|
+
temp_pages = File.join(absolute_temp_path, '/pages')
|
202
|
+
temp_links = File.join(absolute_temp_path, '/links')
|
203
|
+
|
204
|
+
output("Creating Temporary Folders and Ouput Directories ...")
|
205
|
+
mkdir_p(temp_pages,quiet)
|
206
|
+
mkdir_p(temp_links, quiet)
|
207
|
+
|
208
|
+
FileList[absolute_assets_list].each do |file|
|
209
|
+
cp_r(file, temp_pages, quiet)
|
210
|
+
end
|
211
|
+
|
212
|
+
output("Rewriting *.adoc files and generating auxiliary files without front matter ...")
|
213
|
+
FileList[absolute_source_path + "/*.adoc"].each do |file|
|
214
|
+
|
215
|
+
filename = SafeYAML.load_file(file)
|
216
|
+
front_matter = {}
|
217
|
+
|
218
|
+
content = File.read(file)
|
219
|
+
if content =~ YAML_FRONT_MATTER_REGEXP
|
220
|
+
#content = $POSTMATCH
|
221
|
+
front_matter = SafeYAML.load(Regexp.last_match(1))
|
222
|
+
end
|
223
|
+
|
224
|
+
result = content.gsub(YAML_FRONT_MATTER_REGEXP, '')
|
225
|
+
|
226
|
+
if front_matter.key?('permalink')
|
227
|
+
output = File.join(temp_links, front_matter['permalink'] + '.adoc')
|
228
|
+
else
|
229
|
+
output = File.join(temp_links, File.basename(file))
|
230
|
+
end
|
231
|
+
# Write the auxiliary file for combine later in the full pdf file
|
232
|
+
File.write(output, result)
|
233
|
+
|
234
|
+
# Write the auxiliary file for individual pages
|
235
|
+
output = File.join(temp_pages, File.basename(file))
|
236
|
+
File.write(output, result)
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def generate_pdf
|
241
|
+
output("Generating PDFs files for each page ...")
|
242
|
+
temp_pages = File.join(absolute_temp_path, '/pages')
|
243
|
+
pdf_pages = File.join(absolute_output_path, '/pages')
|
244
|
+
|
245
|
+
FileList[temp_pages + "/*.adoc"].each do |file|
|
246
|
+
Asciidoctor.convert_file file, backend: 'pdf', doctype: 'article', to_dir: pdf_pages , mkdirs: true, safe: :safe
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def generate_fullsite_adoc
|
251
|
+
|
252
|
+
output("Generating fullside.adoc ...")
|
253
|
+
toc = YAML.load_file(absolute_sidebar_file)
|
254
|
+
|
255
|
+
tree = create_from_menu('Root', toc['entries'], true)
|
256
|
+
|
257
|
+
Tree.printTree(tree,2)
|
258
|
+
|
259
|
+
#tree.traverse_subtree do |node|
|
260
|
+
# children = node.children.map { |child| child.title}
|
261
|
+
# puts "#{node.title}: #{children}"
|
262
|
+
#end
|
263
|
+
|
264
|
+
temp_links = File.join(absolute_temp_path, '/links')
|
265
|
+
output = File.join(absolute_temp_path,'fullsite.adoc')
|
266
|
+
File.write(output, Tree.updateContent(tree, temp_links))
|
267
|
+
|
268
|
+
output("Full site AsciiDoc generated in [ " + output +" ]")
|
269
|
+
|
270
|
+
end
|
271
|
+
|
272
|
+
def generate_fullsite_pdf
|
273
|
+
|
274
|
+
FileList[absolute_assets_list].each do |file|
|
275
|
+
cp_r(file, absolute_temp_path, quiet)
|
276
|
+
end
|
277
|
+
|
278
|
+
output = File.join(absolute_output_path,'fullsite_template.pdf')
|
279
|
+
#cp(File.join('fullsite_template.adoc'),build_fullsite_output , quiet)
|
280
|
+
cd(absolute_temp_path)
|
281
|
+
File.open("pdf-theme.yml", "w") { |file| file.write(getPdfTheme() ) }
|
282
|
+
File.open("fullsite_template.adoc", "w") { |file| file.write(getFullsiteTemplate() ) }
|
283
|
+
#content = getFullsiteTemplate()
|
284
|
+
|
285
|
+
Asciidoctor.convert_file 'fullsite_template.adoc', backend: 'pdf', mkdirs: true, safe: :safe
|
286
|
+
cp_r('fullsite_template.pdf',absolute_output_path, quiet)
|
287
|
+
output("Full site PDF generated in [ " + output +" ]")
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
def assert(condition, message)
|
292
|
+
if not condition
|
293
|
+
output(message)
|
294
|
+
exit 1
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
# Print functionallity
|
300
|
+
def output(string)
|
301
|
+
puts ' * ' + string
|
302
|
+
end
|
303
|
+
|
304
|
+
def getFullsiteTemplate()
|
305
|
+
fullsite_config = parameters['fullsite']
|
306
|
+
|
307
|
+
title = fullsite_config['title']
|
308
|
+
subtitle = fullsite_config['subtitle']
|
309
|
+
authors = fullsite_config['authors']
|
310
|
+
revision = fullsite_config['revision']
|
311
|
+
background_image = fullsite_config['background_image']
|
312
|
+
|
313
|
+
text = <<~TEXT
|
314
|
+
= #{title} : #{subtitle}
|
315
|
+
#{authors}
|
316
|
+
#{revision}
|
317
|
+
:doctype: book
|
318
|
+
:experimental:
|
319
|
+
:reproducible:
|
320
|
+
:icons: font
|
321
|
+
:listing-caption: Listing
|
322
|
+
:sectnums:
|
323
|
+
:imagesdir: ./media/
|
324
|
+
:toc:
|
325
|
+
:toclevels: 2
|
326
|
+
ifeval::["{asciidoctor-version}" < "1.5.7"]
|
327
|
+
:legacy-footnoteref:
|
328
|
+
endif::[]
|
329
|
+
ifdef::backend-pdf[]
|
330
|
+
:pdf-theme: pdf-theme.yml
|
331
|
+
:title-page:
|
332
|
+
:title-page-background-image: image:#{background_image}[fit=none,pdfwidth=100%,position=top]
|
333
|
+
:source-highlighter: rouge
|
334
|
+
//:rouge-style: github
|
335
|
+
endif::[]
|
336
|
+
:chapter-label:
|
337
|
+
|
338
|
+
:leveloffset: +1
|
339
|
+
include::fullsite.adoc[]
|
340
|
+
:leveloffset: -1
|
341
|
+
TEXT
|
342
|
+
|
343
|
+
return text
|
344
|
+
end
|
345
|
+
|
346
|
+
def getPdfTheme()
|
347
|
+
return parameters['pdf_theme'].to_yaml
|
348
|
+
end
|
349
|
+
|
350
|
+
def create_from_menu(name, children, root)
|
351
|
+
root_node = Tree::Node.new(name, '','',root)
|
352
|
+
children.each do |child|
|
353
|
+
if child.key?('entries')
|
354
|
+
root_node.add_child(create_from_menu(child['title'], child['entries'],false))
|
355
|
+
else
|
356
|
+
if child['url'].downcase.start_with?('http:') or child['url'].downcase.start_with?('https:')
|
357
|
+
output("Absolute links are not supported!")
|
358
|
+
else
|
359
|
+
root_node.add_child(Tree::Node.new(child['title'],child['url'], '', false))
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
return root_node
|
365
|
+
end
|
366
|
+
|
367
|
+
end
|
368
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Tree
|
5
|
+
|
6
|
+
class Node
|
7
|
+
attr_reader :children, :content, :page, :title, :root
|
8
|
+
|
9
|
+
def initialize(title, page, content, root)
|
10
|
+
@children = []
|
11
|
+
@root = root
|
12
|
+
@page = page
|
13
|
+
@title = title
|
14
|
+
@content = content
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_content(content)
|
18
|
+
@content << "\n"
|
19
|
+
@content << content
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_child(child)
|
23
|
+
@children << child
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def traverse_subtree(&block)
|
28
|
+
node_queue = [self] # Step 1
|
29
|
+
until node_queue.empty? # Step 2
|
30
|
+
node = node_queue.shift # Step 3
|
31
|
+
yield node # Step 4
|
32
|
+
node_queue = node.children.concat(node_queue) # Step 5
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.updateContent(tree, temp_dir)
|
39
|
+
if tree.page.length > 0
|
40
|
+
file = File.join(temp_dir, tree.page + '.adoc')
|
41
|
+
tree.add_content(File.read(file))
|
42
|
+
else
|
43
|
+
if not tree.root
|
44
|
+
tree.add_content("= " + tree.title)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
if not tree.root
|
49
|
+
tree.add_content(":leveloffset: +1 \n")
|
50
|
+
end
|
51
|
+
|
52
|
+
if tree.children.length > 0
|
53
|
+
tree.children.map { |child| tree.add_content(updateContent(child, temp_dir)) }
|
54
|
+
end
|
55
|
+
|
56
|
+
if not tree.root
|
57
|
+
tree.add_content(":leveloffset: -1 \n")
|
58
|
+
end
|
59
|
+
return tree.content
|
60
|
+
end
|
61
|
+
def self.printTree(tree, level)
|
62
|
+
puts str = ("-" * level) + tree.title
|
63
|
+
if tree.children.length > 0
|
64
|
+
tree.children.map { |child| printTree(child, level + 1) }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
|
metadata
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll_asciidoctor_pdf
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.14
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Guido Genzone
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-03-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.1.4
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.1.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.52'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.52'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fileutils
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: safe_yaml
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.0.5
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.0.5
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: asciidoctor-pdf
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.5.1
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.5.1
|
111
|
+
description: Rake tasks to convert *.adoc files from Jekyll to PDF using asciidoctor-pdf
|
112
|
+
email:
|
113
|
+
- guido.genzone@netapp.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".travis.yml"
|
120
|
+
- Gemfile
|
121
|
+
- README.adoc
|
122
|
+
- Rakefile
|
123
|
+
- bin/console
|
124
|
+
- bin/setup
|
125
|
+
- jekyll_asciidoctor_pdf.gemspec
|
126
|
+
- lib/jekyll_asciidoctor_pdf.rb
|
127
|
+
- lib/jekyll_asciidoctor_pdf/commands.rb
|
128
|
+
- lib/jekyll_asciidoctor_pdf/tree.rb
|
129
|
+
- lib/jekyll_asciidoctor_pdf/version.rb
|
130
|
+
homepage: https://github.com/ggenzone/jekyll_asciidoctor_pdf
|
131
|
+
licenses:
|
132
|
+
- MIT
|
133
|
+
metadata: {}
|
134
|
+
post_install_message:
|
135
|
+
rdoc_options: []
|
136
|
+
require_paths:
|
137
|
+
- lib
|
138
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '2.0'
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '0'
|
148
|
+
requirements: []
|
149
|
+
rubyforge_project:
|
150
|
+
rubygems_version: 2.7.6
|
151
|
+
signing_key:
|
152
|
+
specification_version: 4
|
153
|
+
summary: Rake tasks to convert *.adoc files from Jekyll to PDF using asciidoctor-pdf
|
154
|
+
test_files: []
|