riven 1.1.4 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/Gemfile.lock +2 -5
  4. data/README.md +20 -153
  5. data/bin/riven +17 -18
  6. data/doc/chapters/1-what-is-riven/1-scenario-a.md +12 -0
  7. data/doc/chapters/1-what-is-riven/2-scenario-b.md +8 -0
  8. data/doc/chapters/1-what-is-riven/3-what-is-riven-not.md +16 -0
  9. data/doc/chapters/1-what-is-riven/4-why-was-riven-created.md +35 -0
  10. data/doc/chapters/1-what-is-riven/5-how-can-i-support-riven.md +7 -0
  11. data/doc/chapters/1-what-is-riven/index.md +15 -0
  12. data/doc/chapters/2-setup/1-prerequisites.md +49 -0
  13. data/doc/chapters/2-setup/2-installation.md +17 -0
  14. data/doc/chapters/2-setup/index.md +6 -0
  15. data/doc/chapters/3-basics/1-single-file.md +19 -0
  16. data/doc/chapters/3-basics/2-multiple-files.md +65 -0
  17. data/doc/chapters/3-basics/3-structured-files.md +55 -0
  18. data/doc/chapters/3-basics/4-config-file.md +63 -0
  19. data/doc/chapters/3-basics/index.md +17 -0
  20. data/doc/chapters/4-advanced-usage/1-css.md +34 -0
  21. data/doc/chapters/4-advanced-usage/2-table-of-contents.md +11 -0
  22. data/doc/chapters/4-advanced-usage/3-cover.md +10 -0
  23. data/doc/chapters/4-advanced-usage/4-syntax-highlighting.md +23 -0
  24. data/doc/chapters/4-advanced-usage/index.md +10 -0
  25. data/doc/cover.md +37 -0
  26. data/doc/img/cover.png +0 -0
  27. data/doc/index.md +4 -0
  28. data/doc/riven.pdf +0 -0
  29. data/doc/riven.yml +10 -0
  30. data/doc/style.css +21 -0
  31. data/lib/riven/config.rb +122 -0
  32. data/lib/riven/html_generator.rb +4 -4
  33. data/lib/riven/markup_file.rb +1 -1
  34. data/lib/riven/opt_parser.rb +48 -33
  35. data/lib/riven/version.rb +1 -1
  36. data/lib/riven/wkhtmltopdf.rb +7 -7
  37. metadata +28 -2
@@ -0,0 +1,17 @@
1
+ ## 2.2. Install Riven
2
+
3
+ The installation of Riven is pretty simple. Just run:
4
+
5
+ ```bash
6
+ $ gem install riven
7
+ ```
8
+
9
+ And you're done!
10
+
11
+ After that you should have a `riven` command:
12
+
13
+ ```bash
14
+ $ riven -V
15
+ ```
16
+
17
+ That's it!
@@ -0,0 +1,6 @@
1
+ # 2. Setup Riven
2
+
3
+ In this chapter we'll tackle the setup of Riven. You'll learn everything you need to know regarding the installation and especially the prerequisites and pitfalls.
4
+
5
+ <<[ 1-prerequisites.md ]
6
+ <<[ 2-installation.md ]
@@ -0,0 +1,19 @@
1
+ ## 3.1. A single file
2
+
3
+ Let's start small and transform a single file into your first beautiful PDF!
4
+
5
+ Create a new markdown file where ever you want and name it `awesome.md`. Put some markdown into the file just like this:
6
+
7
+ ```markdown
8
+ # Hello World!
9
+
10
+ **This** is my first Riven generated PDF!
11
+ ```
12
+
13
+ Now we compile the PDF with a simple Riven call:
14
+
15
+ ```bash
16
+ $ riven awesome.pdf
17
+ ```
18
+
19
+ You should get a PDF file called `awesome.pdf`. Open it and admire your first PDF.
@@ -0,0 +1,65 @@
1
+ ## 3.2. Many at once
2
+
3
+ Now we know how to convert a single file into a PDF document. But usually we have more then one file. For example one
4
+ file for each chapter. Riven may take a bunch of markdown files and compile them into a single PDF file.
5
+
6
+ In order to use that feature, we need some more markdown files:
7
+
8
+ `chapter-1.md`:
9
+
10
+ ```markdown
11
+ # Chapter 1
12
+
13
+ Hello World!
14
+ ```
15
+
16
+
17
+ `chapter-2.md`:
18
+
19
+ ```markdown
20
+ # Chapter 2
21
+
22
+ Another example
23
+ ```
24
+
25
+ `chapter-3.md`:
26
+
27
+ ```markdown
28
+ # Chapter 3
29
+
30
+ Last but not least
31
+ ```
32
+
33
+ Now you can merge all these files into a single PDF with the following command:
34
+
35
+ ```bash
36
+ $ riven -o awesome.pdf chapter-1.md chapter-2.md chapter-3.md
37
+ ```
38
+
39
+ You'll get a single PDF file, just as in chapter 3.1., which contains all three chapters and the regarding content. The
40
+ `-o` param determines the name of the generated PDF file.
41
+
42
+
43
+ Riven is also able to guess the PDF file name if all markdown files are located in one directory. So let's create
44
+ a directory called `awesome` and put our three markdown files into it. Now you should have a file structure like this:
45
+
46
+ ```bash
47
+ $ ls -1
48
+ awesome/
49
+
50
+ $ ls -1 awesome/
51
+ chapter-1.md
52
+ chapter-2.md
53
+ chapter-3.md
54
+ ```
55
+
56
+ The following command will generate exactly the same PDF file as the command we used before, but you don't have to
57
+ provide a PDF file name. Riven will take the directory name as the PDF file name.
58
+
59
+ ```bash
60
+ $ riven awesome/
61
+ ```
62
+
63
+ You'll receive a `awesome.pdf` file like before.
64
+
65
+ Consider that Riven will merge the markdown files of the directory in alphabetical order.
@@ -0,0 +1,55 @@
1
+ ## 3.3. Structure your files
2
+
3
+ In the two previous chapters you learned how to convert a single file or a bunch of files into a PDF. In this chapter
4
+ you'll learn a nice mixed way how to structure bigger documents with many markdown files without the need to pass all
5
+ those files to the riven command or to ensure the alphabetical order is the order you want.
6
+
7
+ The magical feature of Riven which allows us to bring a clean tidiness in your files, is called *include directive*.
8
+ It's a markdown syntax which is not part of the original markdown language, but a feature of the Riven Extended
9
+ Markdown - or REM. REM is a superset of the GitHub Flavored Markdown introduced by Riven in order to provide some
10
+ additional features. The include directive allows you to define another markdown file. Riven will merge the content of
11
+ that markdown file into the outer markdown file by replacing the include directive.
12
+
13
+ The include syntax looks like that:
14
+
15
+ `_<<[ file ]`
16
+
17
+ where `file` is the path to another markdown file.
18
+
19
+ **Here's an example:**
20
+
21
+ `a.md`:
22
+
23
+ ```markdown
24
+ Hello World!
25
+
26
+ _<<[ b.md ]
27
+
28
+ Bye World!
29
+ ```
30
+
31
+ `b.md`:
32
+
33
+ ```markdown
34
+ This content is **included**!
35
+ ```
36
+
37
+ If you call
38
+
39
+ ```bash
40
+ $ riven -o a.pdf a.md
41
+ ```
42
+
43
+ Riven will merge the two files like that:
44
+
45
+ ```markdown
46
+ Hello World!
47
+
48
+ This content is **included**!
49
+
50
+ Bye World!
51
+ ```
52
+
53
+ This feature allows you to organize your document over many markdown files and subdirectories. Take a look at
54
+ https://github.com/phortx/riven/tree/master/doc to see a good example for the usage of includes and how to structure
55
+ a document.
@@ -0,0 +1,63 @@
1
+ ## 1.4. The config file
2
+
3
+ If you take a look at the Riven help (`riven -h`), you'll see that riven supports a bunch of command line options. It
4
+ can be a bit painful to remember all those parameters in order to regenerate your PDF from time to time. So it's
5
+ recommended to setup a config file for riven where you can set all your settings instead of passing them to the `riven`
6
+ command. This can you save you a lot of time.
7
+
8
+ A Riven config file is a simple YAML file, like you may know from Rails or Symfony. But they're really easy to
9
+ understand, so no panic if you never heard of it before.
10
+
11
+ An example riven.yml looks like that:
12
+
13
+ ```yml
14
+ pdf_output_file: example.pdf
15
+ cover_file: cover.md
16
+ css_file: style.css
17
+ generate_toc: true
18
+ toc_headline: 'Contents'
19
+ dump_html: false
20
+ dump_cover_html: false
21
+ verbose: false
22
+ files:
23
+ - index.md
24
+ ```
25
+
26
+ You may provide as many files as you want under the `files` section. Each file gets one line. For example:
27
+
28
+ ```yml
29
+ files:
30
+ - index.md
31
+ - chapter-1.md
32
+ - chapter-2.md
33
+ - chapter-3.md
34
+ ```
35
+
36
+ Riven searches for a `riven.yml` in the current directory. But if you config file is located in another directory, you
37
+ should pass it via the `-C` param. However if you structure your document like this:
38
+
39
+ ```bash
40
+ $ ls -1
41
+
42
+ chapters/
43
+ cover.md
44
+ index.md
45
+ riven.yml
46
+ style.css
47
+ ```
48
+
49
+ it will be pretty easy to generate your PDF, since you just have to call `riven` without any params:
50
+
51
+ ```bash
52
+ $ riven
53
+ ```
54
+
55
+ It will use the `riven.yml` from the current directory and load all settings from it.
56
+
57
+ You're also allowed to mix up command line parameters and the config file. For example you can override the stylesheet:
58
+
59
+ ```bash
60
+ $ riven -s another_style.css
61
+ ```
62
+
63
+ The command line params will override the settings from the `riven.yml`.
@@ -0,0 +1,17 @@
1
+ # 3. Learn the basics
2
+
3
+ Now as Riven is up and running, let's have some fun and start writing! In this chapter you'll learn the basics and how
4
+ to use Riven to generate PDFs.
5
+
6
+ However if you're looking for an good example: You're actually reading one! This documentation is generated with Riven
7
+ and you can read the markdown source code at the [doc directory](https://github.com/phortx/riven/blob/master/doc/) in
8
+ the GitHub repository of riven. The [generated PDF](https://github.com/phortx/riven/blob/master/doc/riven.pdf) can be
9
+ found in that directory too.
10
+
11
+ If you want to learn markdown, you should take a look at the
12
+ [Learn Markdown book from GitBook](https://gitbookio.gitbooks.io/markdown/content/) which can be read online.
13
+
14
+ <<[ 1-single-file.md ]
15
+ <<[ 2-multiple-files.md ]
16
+ <<[ 3-structured-files.md ]
17
+ <<[ 4-config-file.md ]
@@ -0,0 +1,34 @@
1
+ ## 4.1. Style your PDF
2
+
3
+ Riven allows you to style your PDF via CSS rules. This feature makes it possible to change colors, fonts, margins and
4
+ many more.
5
+
6
+ However please consider that this is a PDF, so the capabilities of the layouting via CSS is limited. Not every CSS rule
7
+ you know will work.
8
+
9
+ In order to use a CSS file, you have to create a `style.css` for example and pass it to the `-s` param of riven:
10
+
11
+ ```bash
12
+ $ riven -s style.css documentation.md
13
+ ```
14
+
15
+ Some hints:
16
+
17
+ - Every text paragraph is wrapped into a `<p>` tag
18
+ - The headlines will be transformed to `<h1>`, `<h2>`, `<h3>` ... tags, where `#` is `<h1>`, `##` is `<h2>` and so on
19
+ - Quotes (`>`) are transformed to a `<blockquote>` tag
20
+ - Bold text is transformed to a `<strong>` tag
21
+ - `<hr>` tags are used for horizontal lines (`-----`)
22
+ - Unordered lists are transformed to `<ul>` and `<li>` tags and ordered lists are transformed to `<ol>` and `<li>` tags.
23
+ Nested lists are `<ul>` tags within a `<li>` tag
24
+ - Inline fixed width text (backticks) is transformed to `<code>` tags
25
+ - Multiline code blocks are transformed into `<pre>` tags
26
+
27
+ To style the cover page, you can use the `.cover-page` CSS class. The following example will change the h1 color on the
28
+ cover page to red:
29
+
30
+ ```css
31
+ .cover-page h1 {
32
+ color: red;
33
+ }
34
+ ```
@@ -0,0 +1,11 @@
1
+ ## 4.2. Automatic Table of Contents
2
+
3
+ For an automatic generated table of contents after the cover page, you can add the `-t` param and pass a headline for
4
+ the table of contents:
5
+
6
+ ```bash
7
+ $ riven -t "Contents" -c documentation/cover.md documentation/
8
+ ```
9
+
10
+ Riven will generate a table of contents for all headlines. The user can click on the entries to jump directly to the
11
+ regarding headline.
@@ -0,0 +1,10 @@
1
+ ## 4.3. Cover pages
2
+
3
+ To start your PDF with a nice cover page, define a cover markdown file and pass it to the `-c` param. Riven will prepend
4
+ that file before all other files and doesn't attach a page number.
5
+
6
+ ```bash
7
+ $ riven -c documentation/cover.md documentation/
8
+ ```
9
+
10
+ It can be helpful to use HTML within the cover page to have more control over it's layout.
@@ -0,0 +1,23 @@
1
+ ## 4.4. Syntax highlighting
2
+
3
+ Riven comes with syntax highlighting for code blocks:
4
+
5
+ ```markdown
6
+ ` ``ruby
7
+ def foo
8
+ puts 'bar'
9
+ end
10
+ ` ``
11
+ ```
12
+
13
+ (Ignore the whitespace between the backticks)
14
+
15
+ This code sample will produce the following field in the PDF:
16
+
17
+ ```ruby
18
+ def foo
19
+ puts 'bar'
20
+ end
21
+ ```
22
+
23
+ The syntax highlighting is powered by [coderay](https://github.com/rubychan/coderay) and Riven is using a [github theme](https://github.com/pie4dan/CodeRay-GitHub-Theme).
@@ -0,0 +1,10 @@
1
+ # 4. Advanced topics
2
+
3
+ In this last chapter we'll tackle all advanced features of Riven like the styling of the PDF with CSS, the table of
4
+ contents, cover pages and syntax highlighting of code snippets.
5
+
6
+
7
+ <<[ 1-css.md ]
8
+ <<[ 2-table-of-contents.md ]
9
+ <<[ 3-cover.md ]
10
+ <<[ 4-syntax-highlighting.md ]
@@ -0,0 +1,37 @@
1
+ <br />
2
+ <br />
3
+ <br />
4
+ <br />
5
+ <br />
6
+ <br />
7
+
8
+ ![riven](img/cover.png)
9
+
10
+ <br />
11
+ <br />
12
+ <br />
13
+ <br />
14
+ <br />
15
+ <br />
16
+ <br />
17
+ <br />
18
+
19
+ # Official Riven Manual
20
+ ## Write Markdown. Get a nice PDF. Have fun.
21
+
22
+
23
+ <br />
24
+ <br />
25
+ <br />
26
+ <br />
27
+ <br />
28
+ <br />
29
+ <br />
30
+ <br />
31
+ <br />
32
+ <br />
33
+ <br />
34
+ <br />
35
+
36
+
37
+ > powered by Benjamin Kammerl | visit *[github.com/phortx/riven](https://github.com/phortx/riven)* | MIT license
Binary file
@@ -0,0 +1,4 @@
1
+ <<[ chapters/1-what-is-riven/index.md ]
2
+ <<[ chapters/2-setup/index.md ]
3
+ <<[ chapters/3-basics/index.md ]
4
+ <<[ chapters/4-advanced-usage/index.md ]
Binary file
@@ -0,0 +1,10 @@
1
+ pdf_output_file: riven.pdf
2
+ cover_file: cover.md
3
+ css_file: style.css
4
+ generate_toc: true
5
+ toc_headline: 'Contents'
6
+ dump_html: false
7
+ dump_cover_html: false
8
+ verbose: true
9
+ files:
10
+ - index.md
@@ -0,0 +1,21 @@
1
+ body {
2
+ color: #555;
3
+ }
4
+
5
+ h1 {
6
+ color: #337AB7;
7
+ font-weight: normal;
8
+ }
9
+
10
+ h2 {
11
+ font-weight: 500;
12
+ }
13
+
14
+ .cover-page h1 {
15
+ background-color: #337AB7;
16
+ color: #fff;
17
+ }
18
+
19
+ .cover-page blockquote {
20
+ background-color: #eee;
21
+ }
@@ -0,0 +1,122 @@
1
+ module Riven
2
+ class Config
3
+ attr_accessor \
4
+ :pdf_output_file,
5
+ :cover_file,
6
+ :css_file,
7
+ :generate_toc,
8
+ :toc_headline,
9
+ :dump_html,
10
+ :dump_cover_html,
11
+ :verbose,
12
+ :dir_given,
13
+ :config_file,
14
+ :files
15
+
16
+
17
+ #
18
+ # Constructor with the default values
19
+ #
20
+ public def initialize
21
+ @pdf_output_file = nil
22
+ @cover_file = nil
23
+ @css_file = nil
24
+ @generate_toc = false
25
+ @toc_headline = 'Contents'
26
+ @dump_html = false
27
+ @dump_cover_html = false
28
+ @verbose = false
29
+ @dir_given = false
30
+ @config_file = nil
31
+ @files = []
32
+ end
33
+
34
+
35
+ #
36
+ # Overrides the value in the current config if the value of the other config is not the default value
37
+ #
38
+ public def merge(another_config)
39
+ @pdf_output_file = another_config.pdf_output_file if another_config.pdf_output_file != nil
40
+ @cover_file = another_config.cover_file if another_config.cover_file != nil
41
+ @css_file = another_config.css_file if another_config.css_file != nil
42
+ @generate_toc = another_config.generate_toc if another_config.generate_toc != false
43
+ @toc_headline = another_config.toc_headline if another_config.toc_headline != 'Contents'
44
+ @dump_html = another_config.dump_html if another_config.dump_html != false
45
+ @dump_cover_html = another_config.dump_cover_html if another_config.dump_cover_html != false
46
+ @verbose = another_config.verbose if another_config.verbose != false
47
+ @dir_given = another_config.dir_given if another_config.dir_given != false
48
+ @config_file = another_config.config_file if another_config.config_file != nil
49
+ @files = another_config.files if another_config.files != []
50
+ end
51
+
52
+
53
+ #
54
+ # Prints the current config
55
+ #
56
+ public def print
57
+ puts
58
+ puts "Using config file #{config_file}" if config_file != nil
59
+ puts
60
+ puts 'Riven configuration:'
61
+ puts " - pdf_output_file: #{@pdf_output_file}"
62
+ puts " - cover_file: #{@cover_file.path}"
63
+ puts " - css_file: #{@css_file}"
64
+ puts " - generate_toc: #{@generate_toc}"
65
+ puts " - toc_headline: #{@toc_headline}"
66
+ puts " - dump_html: #{@dump_html}"
67
+ puts " - dump_cover_html: #{@dump_cover_html}"
68
+ puts " - verbose: #{@verbose}"
69
+ puts " - dir_given: #{@dir_given}"
70
+ puts " - config_file: #{@config_file}"
71
+
72
+ puts ' - files:'
73
+
74
+ @files.each do |file|
75
+ puts " - #{file.path}"
76
+ end
77
+
78
+ puts
79
+ end
80
+
81
+
82
+ #
83
+ # Setter for @css_file
84
+ #
85
+ public def css_file=(file)
86
+ @css_file = File.expand_path(file)
87
+ end
88
+
89
+
90
+ #
91
+ # Setter for @cover_file
92
+ #
93
+ public def cover_file=(file)
94
+ @cover_file = Riven::MarkupFile.new(file)
95
+ end
96
+
97
+
98
+ #
99
+ # Setter for @files
100
+ #
101
+ public def files=(files)
102
+ @files = files.map { |file| Riven::MarkupFile.new(file) }
103
+ end
104
+
105
+
106
+ #
107
+ # Parses a riven config yml file and constructs a Config object
108
+ #
109
+ def self.parse(config_file)
110
+ require 'yaml'
111
+ config = Riven::Config.new
112
+ config.config_file = config_file
113
+ parsed = YAML::load(File.open(File.expand_path(config.config_file)))
114
+
115
+ parsed.each do |key, value|
116
+ config.send(:"#{key}=", value)
117
+ end
118
+
119
+ config
120
+ end
121
+ end
122
+ end