riven 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -0
- data/README.md +11 -9
- data/bin/riven +35 -10
- data/css/style.css +31 -14
- data/lib/riven/html_file.rb +1 -1
- data/lib/riven/html_generator.rb +5 -3
- data/lib/riven/markup_file.rb +15 -2
- data/lib/riven/opt_parser.rb +19 -5
- data/lib/riven/version.rb +2 -2
- data/lib/riven/wkhtmltopdf.rb +26 -5
- data/riven.gemspec +1 -1
- data/toc.xsl +72 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 249713d59e43598175a09dbf188fdc4afaf4023c
|
4
|
+
data.tar.gz: 9843a8a2a382623f06c416d6e074d9c8cf9efea4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebe32bc24a34766e3eda31553d1205adc2c2457976d1eb9f32d1113fde593fe842ecc1022d3fa8b0d4b328aa910a81dfc1f11662b78cdc3c97ebea6d21e59019
|
7
|
+
data.tar.gz: 52592999799d5e60e0ea8ead3c192187a0d3bc1f5dd3ddb8bf77ca3d22da600860509bbb35587cc2c53b8d69304f64ae6f8e70b88414583379090ea872593b57
|
data/Gemfile.lock
CHANGED
@@ -3,12 +3,16 @@ PATH
|
|
3
3
|
specs:
|
4
4
|
riven (0.0.1)
|
5
5
|
coderay (~> 1.1.0)
|
6
|
+
github-markup (~> 1.2.0)
|
6
7
|
redcarpet (~> 3.2.2)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
11
12
|
coderay (1.1.0)
|
13
|
+
github-markup (1.2.1)
|
14
|
+
posix-spawn (~> 0.3.8)
|
15
|
+
posix-spawn (0.3.9)
|
12
16
|
rake (10.4.2)
|
13
17
|
redcarpet (3.2.2)
|
14
18
|
|
data/README.md
CHANGED
@@ -6,21 +6,23 @@ Converts GitHub Flavored Markdown files to PDFs! Feature highlights:
|
|
6
6
|
- Syntax Highlighting with GitHub like theme
|
7
7
|
- Smart page breaks
|
8
8
|
- Smart directory based file merging
|
9
|
-
- Page numbers (
|
9
|
+
- Page numbers (see *Prerequisites* section)
|
10
10
|
- ~~Custom CSS~~ (not finised yet, sorry)
|
11
|
-
-
|
12
|
-
-
|
11
|
+
- Covers (see *Prerequisites* section)
|
12
|
+
- Table of Contents (see *Prerequisites* section)
|
13
13
|
|
14
14
|
The gem is still under development, but it already works. In the current version the output PDF file name will always be `test.pdf`. This will change soon.
|
15
15
|
|
16
16
|
|
17
17
|
## Prerequisites
|
18
18
|
|
19
|
-
You need `wkhtmltopdf` in order to generate PDFs, since that's the PDF generator backend for riven:
|
19
|
+
You need `wkhtmltopdf` in order to generate PDFs, since that's the PDF generator backend for riven. You should use the QT patched version of `wkhtmltopdf`. You may also use the version without patched qt, but that will disable the following features of riven: Page numbers, table of contents, covers.
|
20
20
|
|
21
|
-
- If you got
|
21
|
+
- If you got Arch Linux, you can just install the packages `wkhtmltopdf-static`and `icu48` from the AUR.
|
22
22
|
|
23
|
-
- If you
|
23
|
+
- If you got a Linux Distribution or OSX you may compile `wkhtmltopdf` from the sources. See http://stackoverflow.com/questions/10981960/wkhtmltopdf-patched-qt.
|
24
|
+
|
25
|
+
- Otherwise, you should download `wkhtmltopdf` from the [official website](http://wkhtmltopdf.org/downloads.html).
|
24
26
|
|
25
27
|
After that, make sure you can execute the `wkhtmltopdf` command in your shell:
|
26
28
|
|
@@ -123,8 +125,8 @@ The syntax highlightning is powered by [coderay](https://github.com/rubychan/cod
|
|
123
125
|
|
124
126
|
### Table of Contents
|
125
127
|
|
126
|
-
For an automatic generated table of contents after the cover, just add the `-t` param:
|
128
|
+
For an automatic generated table of contents after the cover, just add the `-t` param and provide a headline for the table of contents:
|
127
129
|
|
128
130
|
```bash
|
129
|
-
$ riven -t -c documentation/cover.md -o doc.pdf documentation/
|
130
|
-
```
|
131
|
+
$ riven -t "Contents" -c documentation/cover.md -o doc.pdf documentation/
|
132
|
+
```
|
data/bin/riven
CHANGED
@@ -14,26 +14,51 @@ Riven::Wkhtmltopdf.check_installation
|
|
14
14
|
|
15
15
|
## Step 2: Parse command line options
|
16
16
|
options = Riven::OptParser.options
|
17
|
-
files = Riven::OptParser.files
|
17
|
+
files = Riven::OptParser.files(options)
|
18
18
|
|
19
19
|
|
20
|
-
## Step 3:
|
21
|
-
|
22
|
-
|
20
|
+
## Step 3: Change dir if directory is given to ensure the image pathes work
|
21
|
+
unless options[:dir_given] === false
|
22
|
+
working_dir = Dir.pwd
|
23
|
+
Dir.chdir options[:dir_given]
|
24
|
+
end
|
23
25
|
|
24
26
|
|
25
|
-
## Step 4:
|
27
|
+
## Step 4: Generate HTML for cover
|
28
|
+
unless options[:cover_file] === ''
|
29
|
+
cover_markup = Riven::MarkupFile.read_cover(options[:cover_file])
|
30
|
+
end
|
31
|
+
cover_generator = Riven::HTMLGenerator.new('_riven_cover_tmp_file.html', cover_markup || '')
|
32
|
+
|
33
|
+
|
34
|
+
## Step 5: Generate HTML for main document
|
35
|
+
markup = Riven::MarkupFile.read_all(files, options[:cover_file])
|
36
|
+
generator = Riven::HTMLGenerator.new('_riven_tmp_file.html', markup)
|
37
|
+
|
38
|
+
|
39
|
+
## Step 6: Determine PDF file name
|
26
40
|
# TODO auto generate output file name or take it from the options
|
27
41
|
output_file = 'test.pdf'
|
28
42
|
|
29
43
|
|
30
|
-
## Step
|
31
|
-
Riven::Wkhtmltopdf.generate_pdf(generator.html_file, output_file)
|
44
|
+
## Step 7: Generate the PDF file from HTML file
|
45
|
+
output = Riven::Wkhtmltopdf.generate_pdf(generator.html_file, cover_generator.html_file, output_file, options)
|
46
|
+
puts output if options[:verbose]
|
32
47
|
|
33
48
|
|
34
|
-
## Step
|
49
|
+
## Step 8: Close the generators
|
35
50
|
generator.close!
|
51
|
+
cover_generator.close!
|
52
|
+
|
53
|
+
|
54
|
+
## Step 9: Dump the HTML code if requested
|
55
|
+
puts generator.html if options[:dump_html]
|
56
|
+
puts cover_generator.html if options[:dump_cover_html]
|
36
57
|
|
37
58
|
|
38
|
-
## Step
|
39
|
-
|
59
|
+
## Step 10: If we changed the directory before, the PDF file is now located in the wrong directory,
|
60
|
+
## so wie have to move it
|
61
|
+
unless options[:dir_given] === false
|
62
|
+
require 'fileutils'
|
63
|
+
FileUtils.mv output_file, working_dir + '/' + output_file
|
64
|
+
end
|
data/css/style.css
CHANGED
@@ -40,10 +40,6 @@ hr {
|
|
40
40
|
height: 0;
|
41
41
|
}
|
42
42
|
|
43
|
-
pre {
|
44
|
-
overflow: auto;
|
45
|
-
}
|
46
|
-
|
47
43
|
code,
|
48
44
|
kbd,
|
49
45
|
pre {
|
@@ -265,6 +261,7 @@ h1 .anchor {
|
|
265
261
|
|
266
262
|
h2 {
|
267
263
|
padding-bottom: 0.3em;
|
264
|
+
margin-top: 2.5em;
|
268
265
|
line-height: 1.225;
|
269
266
|
border-bottom: 1px solid #eee;
|
270
267
|
}
|
@@ -274,6 +271,7 @@ h2 .anchor {
|
|
274
271
|
}
|
275
272
|
|
276
273
|
h3 {
|
274
|
+
margin-top: 1.7em;
|
277
275
|
line-height: 1.43;
|
278
276
|
}
|
279
277
|
|
@@ -418,7 +416,8 @@ pre>code {
|
|
418
416
|
margin: 0;
|
419
417
|
font-size: 100%;
|
420
418
|
word-break: normal;
|
421
|
-
white-space: pre;
|
419
|
+
white-space: pre-wrap;
|
420
|
+
word-wrap: break-word;
|
422
421
|
background: transparent;
|
423
422
|
border: 0;
|
424
423
|
}
|
@@ -442,10 +441,6 @@ pre {
|
|
442
441
|
word-break: normal;
|
443
442
|
}
|
444
443
|
|
445
|
-
pre {
|
446
|
-
word-wrap: normal;
|
447
|
-
}
|
448
|
-
|
449
444
|
pre code {
|
450
445
|
display: inline;
|
451
446
|
max-width: initial;
|
@@ -453,7 +448,8 @@ pre code {
|
|
453
448
|
margin: 0;
|
454
449
|
overflow: initial;
|
455
450
|
line-height: inherit;
|
456
|
-
|
451
|
+
white-space: pre-wrap;
|
452
|
+
word-wrap: break-word;
|
457
453
|
background-color: transparent;
|
458
454
|
border: 0;
|
459
455
|
}
|
@@ -636,7 +632,7 @@ kbd {
|
|
636
632
|
}
|
637
633
|
|
638
634
|
div.CodeRay { }
|
639
|
-
span.CodeRay { white-space: pre; border: 0px; padding: 2px }
|
635
|
+
span.CodeRay { white-space: pre-wrap; word-wrap: break-word; border: 0px; padding: 2px }
|
640
636
|
|
641
637
|
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
|
642
638
|
table.CodeRay td {
|
@@ -661,9 +657,8 @@ table.CodeRay td {
|
|
661
657
|
.CodeRay .code { width: 100% }
|
662
658
|
|
663
659
|
ol.CodeRay { font-size: 10pt }
|
664
|
-
ol.CodeRay li { white-space: pre }
|
660
|
+
ol.CodeRay li { white-space: pre-wrap; word-wrap: break-word; }
|
665
661
|
|
666
|
-
.CodeRay .code pre { overflow: auto }
|
667
662
|
.CodeRay .debug { color:white ! important; background:blue ! important; }
|
668
663
|
|
669
664
|
.CodeRay .annotation { color:#007 }
|
@@ -754,4 +749,26 @@ ol.CodeRay li { white-space: pre }
|
|
754
749
|
.CodeRay .insert .insert { color: #080; font-weight:bold }
|
755
750
|
.CodeRay .delete .delete { color: #800; font-weight:bold }
|
756
751
|
.CodeRay .change .change { color: #66f; }
|
757
|
-
.CodeRay .head .head { color: #f4f; }
|
752
|
+
.CodeRay .head .head { color: #f4f; }
|
753
|
+
|
754
|
+
|
755
|
+
|
756
|
+
|
757
|
+
.cover-page h1,
|
758
|
+
.cover-page h2,
|
759
|
+
.cover-page h3,
|
760
|
+
.cover-page img {
|
761
|
+
text-align: center;
|
762
|
+
border-bottom: none;
|
763
|
+
}
|
764
|
+
|
765
|
+
.cover-page h1 {
|
766
|
+
margin: 15px 0;
|
767
|
+
font-size: 60px;
|
768
|
+
page-break-before: avoid;
|
769
|
+
}
|
770
|
+
|
771
|
+
.cover-page h2 {
|
772
|
+
margin-top: 0.5em;
|
773
|
+
color: #666;
|
774
|
+
}
|
data/lib/riven/html_file.rb
CHANGED
data/lib/riven/html_generator.rb
CHANGED
@@ -7,8 +7,8 @@ module Riven
|
|
7
7
|
class HTMLGenerator
|
8
8
|
attr_accessor :html, :html_file
|
9
9
|
|
10
|
-
public def initialize(markup)
|
11
|
-
@html_file = Riven::HTMLFile.new(
|
10
|
+
public def initialize(tmp_file, markup)
|
11
|
+
@html_file = Riven::HTMLFile.new(tmp_file)
|
12
12
|
|
13
13
|
@markup = markup
|
14
14
|
|
@@ -35,7 +35,6 @@ module Riven
|
|
35
35
|
tables: true,
|
36
36
|
underline: true,
|
37
37
|
highlight: true,
|
38
|
-
filter_html: true,
|
39
38
|
with_toc_data: true,
|
40
39
|
lax_spacing: true,
|
41
40
|
xhtml: true,
|
@@ -47,6 +46,9 @@ module Riven
|
|
47
46
|
|
48
47
|
html = code.process(html)
|
49
48
|
|
49
|
+
html.gsub! '////[COVERSTART]////', '<div class="cover-page">'
|
50
|
+
html.gsub! '////[COVEREND]////', '</div>'
|
51
|
+
|
50
52
|
return html
|
51
53
|
end
|
52
54
|
|
data/lib/riven/markup_file.rb
CHANGED
@@ -26,15 +26,28 @@ module Riven
|
|
26
26
|
|
27
27
|
|
28
28
|
class << self
|
29
|
-
public def read_all(markup_files)
|
29
|
+
public def read_all(markup_files, except = [])
|
30
30
|
markup = ''
|
31
31
|
|
32
|
+
markup_files = [markup_files] unless markup_files.respond_to?(:each)
|
33
|
+
except = [except] unless except.respond_to?(:each)
|
34
|
+
|
32
35
|
markup_files.each do |file|
|
33
|
-
markup << "\n\n" + File.read(file.path)
|
36
|
+
markup << "\n\n" + File.read(file.path) unless exclude?(except, file)
|
34
37
|
end
|
35
38
|
|
36
39
|
return markup
|
37
40
|
end
|
41
|
+
|
42
|
+
public def read_cover(cover_file)
|
43
|
+
cover_markup = "\n////[COVERSTART]////\n"
|
44
|
+
cover_markup << Riven::MarkupFile.read_all(cover_file)
|
45
|
+
cover_markup << "\n////[COVEREND]////\n"
|
46
|
+
end
|
47
|
+
|
48
|
+
private def exclude?(except, file)
|
49
|
+
except.select { |f| f.path === file.path }.any?
|
50
|
+
end
|
38
51
|
end
|
39
52
|
end
|
40
53
|
end
|
data/lib/riven/opt_parser.rb
CHANGED
@@ -13,10 +13,11 @@ module Riven
|
|
13
13
|
# Returns an array of Riven::MarkupFile for each given markdown file
|
14
14
|
#
|
15
15
|
|
16
|
-
public def files
|
16
|
+
public def files(options)
|
17
17
|
file_names = ARGV
|
18
18
|
|
19
19
|
if file_names.size === 1 && File.directory?(file_names[0])
|
20
|
+
options[:dir_given] = file_names.first
|
20
21
|
file_names = Dir["#{file_names[0]}/*.md"].sort
|
21
22
|
end
|
22
23
|
|
@@ -34,7 +35,11 @@ module Riven
|
|
34
35
|
cover_file: '',
|
35
36
|
css_file: '',
|
36
37
|
toc: false,
|
37
|
-
|
38
|
+
toc_headline: 'Contents',
|
39
|
+
dump_html: false,
|
40
|
+
dump_cover_html: false,
|
41
|
+
verbose: false,
|
42
|
+
dir_given: false
|
38
43
|
}
|
39
44
|
|
40
45
|
opt_parser = OptionParser.new do |opts|
|
@@ -51,17 +56,26 @@ module Riven
|
|
51
56
|
end
|
52
57
|
|
53
58
|
opts.on("-c FILE", "--cover=FILE", "Path to the cover MD file") do |cover_file|
|
54
|
-
options[:cover_file] = cover_file
|
59
|
+
options[:cover_file] = Riven::MarkupFile.new(cover_file)
|
55
60
|
end
|
56
61
|
|
57
|
-
opts.on("-t", "--toc", "Enabled the table of contents auto generation") do
|
62
|
+
opts.on("-t HEADLINE", "--toc=HEADLINE", "Enabled the table of contents auto generation") do |headline|
|
58
63
|
options[:toc] = true
|
64
|
+
options[:toc_headline] = headline
|
59
65
|
end
|
60
66
|
|
61
|
-
opts.on("-d", "--dump-html", "Dumps the HTML file to STDOUT") do
|
67
|
+
opts.on("-d", "--dump-html", "Dumps the main HTML file to STDOUT") do
|
62
68
|
options[:dump_html] = true
|
63
69
|
end
|
64
70
|
|
71
|
+
opts.on("-D", "--dump-cover-html", "Dumps the cover HTML file to STDOUT") do
|
72
|
+
options[:dump_cover_html] = true
|
73
|
+
end
|
74
|
+
|
75
|
+
opts.on('-v', '--verbose', 'Print the output of wkhtmltopdf to STDOUT. Don\'t combine with -d') do
|
76
|
+
options[:verbose] = true
|
77
|
+
end
|
78
|
+
|
65
79
|
opts.on('-V', '--version', 'Displays the version') do
|
66
80
|
puts Riven::VERSION.to_s
|
67
81
|
exit
|
data/lib/riven/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
class Riven
|
2
|
-
VERSION = '0.0
|
3
|
-
end
|
2
|
+
VERSION = '0.1.0'
|
3
|
+
end
|
data/lib/riven/wkhtmltopdf.rb
CHANGED
@@ -10,17 +10,38 @@ module Riven
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
public def generate_pdf(html_file, output_file)
|
13
|
+
public def generate_pdf(html_file, cover_html_file, output_file, options)
|
14
14
|
params = [
|
15
|
-
'--disable-smart-shrinking',
|
16
15
|
'--page-size A4',
|
17
16
|
'--margin-bottom 10mm',
|
18
17
|
'--margin-top 10mm',
|
19
|
-
'--margin-left
|
20
|
-
'--margin-right
|
18
|
+
'--margin-left 20mm',
|
19
|
+
'--margin-right 20mm',
|
20
|
+
'--footer-left "[section]"',
|
21
|
+
'--footer-right "[page] / [toPage]"',
|
22
|
+
'--footer-font-size 7',
|
23
|
+
'--footer-spacing 4'
|
21
24
|
]
|
22
25
|
|
23
|
-
|
26
|
+
unless options[:cover_file] === ''
|
27
|
+
params << "cover \"#{cover_html_file.file_name}\""
|
28
|
+
end
|
29
|
+
|
30
|
+
if options[:toc]
|
31
|
+
xsl = File.read(File.expand_path(File.dirname(__FILE__)) + '/../../toc.xsl')
|
32
|
+
xsl.gsub! '[[toc_headline]]', options[:toc_headline]
|
33
|
+
xsl_file_name = '_tmp_toc.xsl'
|
34
|
+
File.open(xsl_file_name, 'w') { |file| file.write(xsl) }
|
35
|
+
|
36
|
+
params << 'toc'
|
37
|
+
params << "--xsl-style-sheet \"#{xsl_file_name}\""
|
38
|
+
end
|
39
|
+
|
40
|
+
output = `wkhtmltopdf #{params.join(' ')} "#{html_file.file_name}" "#{output_file}" 2>&1`
|
41
|
+
|
42
|
+
File.delete xsl_file_name
|
43
|
+
|
44
|
+
return output
|
24
45
|
end
|
25
46
|
end
|
26
47
|
end
|
data/riven.gemspec
CHANGED
data/toc.xsl
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<xsl:stylesheet version="2.0"
|
3
|
+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
4
|
+
xmlns:outline="http://wkhtmltopdf.org/outline"
|
5
|
+
xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
|
7
|
+
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
|
8
|
+
indent="yes" />
|
9
|
+
<xsl:template match="outline:outline">
|
10
|
+
<html>
|
11
|
+
<head>
|
12
|
+
<title>[[toc_headline]]</title>
|
13
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
14
|
+
<style>
|
15
|
+
body {
|
16
|
+
color: #333;
|
17
|
+
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
|
18
|
+
font-size: 14px;
|
19
|
+
line-height: 1.6;
|
20
|
+
}
|
21
|
+
a {
|
22
|
+
background: transparent;
|
23
|
+
}
|
24
|
+
|
25
|
+
a:active,
|
26
|
+
a:hover {
|
27
|
+
outline: 0;
|
28
|
+
}
|
29
|
+
h1 {
|
30
|
+
margin-top: 15px;
|
31
|
+
margin-bottom: 15px;
|
32
|
+
line-height: 1.2;
|
33
|
+
font-size: 24px;
|
34
|
+
page-break-inside: avoid;
|
35
|
+
border-bottom: 1px solid #eee;
|
36
|
+
}
|
37
|
+
div {border-bottom: 1px dashed #eee; margin: 0 0 5px 0;}
|
38
|
+
span {float: right;}
|
39
|
+
li {list-style: none; padding: 0; margin: 0;}
|
40
|
+
ul {padding: 0; margin: 0; font-size: 14px;}
|
41
|
+
ul ul {font-size: 85%; padding-left: 1em;}
|
42
|
+
</style>
|
43
|
+
</head>
|
44
|
+
<body>
|
45
|
+
<h1>[[toc_headline]]</h1>
|
46
|
+
<ul><xsl:apply-templates select="outline:item/outline:item"/></ul>
|
47
|
+
</body>
|
48
|
+
</html>
|
49
|
+
</xsl:template>
|
50
|
+
<xsl:template match="outline:item">
|
51
|
+
<li>
|
52
|
+
<xsl:if test="@title!=''">
|
53
|
+
<div>
|
54
|
+
<a>
|
55
|
+
<xsl:if test="@link">
|
56
|
+
<xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
|
57
|
+
</xsl:if>
|
58
|
+
<xsl:if test="@backLink">
|
59
|
+
<xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
|
60
|
+
</xsl:if>
|
61
|
+
<xsl:value-of select="@title" />
|
62
|
+
</a>
|
63
|
+
<span> <xsl:value-of select="@page" /> </span>
|
64
|
+
</div>
|
65
|
+
</xsl:if>
|
66
|
+
<ul>
|
67
|
+
<xsl:comment>added to prevent self-closing tags in QtXmlPatterns</xsl:comment>
|
68
|
+
<xsl:apply-templates select="outline:item"/>
|
69
|
+
</ul>
|
70
|
+
</li>
|
71
|
+
</xsl:template>
|
72
|
+
</xsl:stylesheet>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riven
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Kammerl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- lib/riven/version.rb
|
92
92
|
- lib/riven/wkhtmltopdf.rb
|
93
93
|
- riven.gemspec
|
94
|
+
- toc.xsl
|
94
95
|
homepage: https://github.com/phortx/riven
|
95
96
|
licenses:
|
96
97
|
- MIT
|
@@ -111,8 +112,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
112
|
version: '0'
|
112
113
|
requirements: []
|
113
114
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.2.2
|
115
116
|
signing_key:
|
116
117
|
specification_version: 4
|
117
118
|
summary: Converts Markdown to PDF
|
118
119
|
test_files: []
|
120
|
+
has_rdoc:
|