bookie 0.0.10 → 0.0.11

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.
data/CHANGELOG.md CHANGED
@@ -51,3 +51,9 @@ Add barely useful command line app
51
51
  ## 0.0.10 (2011.04.28)
52
52
 
53
53
  Fix some PDF bugs and make a little draw() helper for emitter.
54
+
55
+ ## 0.0.11 (2011.04.30)
56
+
57
+ Remove Document class for now. Remove bookie executable for now. Remove all old
58
+ examples from <= 0.0.10. Move towards a book manifest type API. Much work needs
59
+ to be done to make this actually usable.
@@ -0,0 +1,14 @@
1
+ require_relative "../lib/bookie"
2
+
3
+ fixture_dir = "#{File.dirname(__FILE__)}/../test/fixtures/"
4
+
5
+ book = Bookie::Book.new("Basic Features of Bookie")
6
+ book.chapter "A single paragraph", "#{fixture_dir}/single_paragraph.md"
7
+ book.chapter "Multiple paragraphs", "#{fixture_dir}/multi_paragraph_document.md"
8
+ book.chapter "Preformatted text blocks", "#{fixture_dir}/preformatted_blocks.md"
9
+ book.chapter "Section headings", "#{fixture_dir}/document_with_headings.md"
10
+ book.chapter "Unordered lists", "#{fixture_dir}/lists.md"
11
+
12
+ book.render("bookie-basic-feature", [Bookie::Emitters::PDF.new,
13
+ Bookie::Emitters::EPUB.new,
14
+ Bookie::Emitters::MOBI.new])
Binary file
@@ -0,0 +1,28 @@
1
+ module Bookie
2
+ class Book
3
+ def initialize(name)
4
+ @name = name
5
+ @chapters = []
6
+ end
7
+
8
+ attr_reader :name, :chapters
9
+
10
+ def chapter(name, file)
11
+ chapters << [name, file]
12
+ end
13
+
14
+ # FIXME: This is inefficient, it should be possible to fire up the parser
15
+ # just once with many emitters.
16
+ def render(basename, emitters)
17
+ emitters.each do |emitter|
18
+ chapters.each_with_index do |(name, file), i|
19
+ emitter.start_new_chapter(header: "Chapter #{i+1}",
20
+ title: name)
21
+ Bookie::Parser.parse(File.read(file), emitter)
22
+ output_file = "#{basename}#{emitter.class.extension}"
23
+ emitter.render(file: output_file)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ module Bookie
2
+ module Emitters
3
+ class EPUB < HTML
4
+ def self.extension
5
+ ".epub"
6
+ end
7
+
8
+ def render(params)
9
+ t = Tempfile.new(params[:file])
10
+ t << %{<?xml version="1.0" encoding="UTF-8"?>
11
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
12
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
13
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
14
+ <head>
15
+ <style type="text/css">
16
+ pre { font-size: 1.1em }
17
+ </style>
18
+ </head>
19
+ <body><h1>#{params[:title]}</h1>#{@body}</body>
20
+ </html>
21
+ }
22
+ t.close
23
+ FileUtils.mv(t.path, "#{t.path}.html")
24
+
25
+ epub = EeePub.make do
26
+ title params[:title]
27
+ identifier '', :scheme => 'URL'
28
+ uid ''
29
+
30
+ files [File.expand_path("#{t.path}.html")]
31
+ end
32
+
33
+ epub.save(params[:file])
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,46 @@
1
+ module Bookie
2
+ module Emitters
3
+ class HTML
4
+ def self.extension
5
+ ".html"
6
+ end
7
+
8
+ def initialize
9
+ @body = ""
10
+ end
11
+
12
+ attr_reader :body
13
+
14
+ def start_new_chapter(params)
15
+ @body << "<h1>#{params[:header]}: #{params[:title]}</h1>"
16
+ end
17
+
18
+ def build_paragraph(paragraph)
19
+ @body << "<p>#{paragraph.contents}</p>"
20
+ end
21
+
22
+ def build_raw_text(raw_text)
23
+ @body << "<pre>#{raw_text.contents}</pre>"
24
+ end
25
+
26
+ def build_section_heading(header)
27
+ @body << "<h2>#{header.contents}</h2>"
28
+ end
29
+
30
+ def build_list(list)
31
+ list_elements = list.contents.map { |li| "<li>#{li}</li>" }.join
32
+ @body << "<ul>"+list_elements+"</ul>"
33
+ end
34
+
35
+ def render(params)
36
+ File.open(params[:file], "w") do |file|
37
+ file << %{
38
+ <html>
39
+ <body>#{@body}</body>
40
+ </html>
41
+ }
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ module Bookie
2
+ module Emitters
3
+ class MOBI < HTML
4
+ def self.extension
5
+ ".mobi"
6
+ end
7
+
8
+ def render(params)
9
+ t = Tempfile.new(params[:file])
10
+ t << %{
11
+ <html>
12
+ <head>
13
+ <style type="text/css">
14
+ h1 { margin-bottom: 3em; font-size: xx-large }
15
+ h2 { font-size: large }
16
+ p { margin-bottom: 1.1em; text-indent: 0 }
17
+ pre { font-size: xx-small }
18
+ li { margin-bottom: 1.1em }
19
+ ul { margin-top: 0em; margin-bottom: 0em;}
20
+ </style>
21
+ </head>
22
+ <body><h1>#{params[:title]}</h1>#{@body}</body>
23
+ </html>
24
+ }
25
+ t.close
26
+ FileUtils.mv(t.path, "#{t.path}.html")
27
+
28
+ `kindlegen #{t.path+'.html'} -o #{params[:file]}`
29
+ FileUtils.mv("#{Dir.tmpdir}/#{params[:file]}", ".")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ module Bookie
2
+ module Emitters
3
+ class Null
4
+ def build_paragraph(paragraph)
5
+ end
6
+
7
+ def build_raw_text(raw_text)
8
+ end
9
+
10
+ def build_section_heading(header)
11
+ end
12
+
13
+ def build_list(content)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,151 @@
1
+ # coding: UTF-8
2
+
3
+ module Bookie
4
+ module Emitters
5
+ class PDF
6
+ include Prawn::Measurements
7
+
8
+ def self.extension
9
+ ".pdf"
10
+ end
11
+
12
+ def initialize
13
+ @document = new_prawn_document
14
+ @document.extend(Prawn::Measurements)
15
+
16
+ register_fonts
17
+ end
18
+
19
+ def start_new_chapter(params)
20
+ @document.save_graphics_state # HACK for what might be a Prawn bug
21
+ @document.start_new_page
22
+ render_header(params)
23
+ end
24
+
25
+ def build_list(list)
26
+ items = list.contents
27
+
28
+ draw do
29
+ font("serif", :size => 9) do
30
+ items.each do |li|
31
+ li_text = li.gsub(/\s+/," ")
32
+
33
+ group do
34
+ float { text "•" }
35
+ indent(in2pt(0.15)) do
36
+ text li_text,
37
+ inline_format: true,
38
+ leading: 2
39
+ end
40
+ end
41
+
42
+ move_down in2pt(0.05)
43
+ end
44
+ end
45
+
46
+ move_down in2pt(0.05)
47
+ end
48
+ end
49
+
50
+ def build_section_heading(section_text)
51
+ draw do
52
+ start_new_page unless cursor > in2pt(0.4)
53
+
54
+ move_down in2pt(0.1)
55
+
56
+ float do
57
+ font("sans", :style => :bold, :size => 14) do
58
+ text(section_text.contents.strip)
59
+ end
60
+ end
61
+
62
+ move_down in2pt(0.3)
63
+ end
64
+ end
65
+
66
+ def build_paragraph(paragraph)
67
+ draw do
68
+ font("serif", size: 9) do
69
+ text(paragraph.contents.strip, align: :justify, leading: 2)
70
+ end
71
+ move_down in2pt(0.1)
72
+ end
73
+ end
74
+
75
+ def build_raw_text(raw_text)
76
+ sanitized_text = raw_text.contents.gsub(" ", Prawn::Text::NBSP).strip
77
+
78
+ draw do
79
+ font("mono", size: 8) do
80
+ text sanitized_text
81
+ move_down in2pt(0.1)
82
+ end
83
+ end
84
+ end
85
+
86
+ def render(params)
87
+ @document.render_file(params[:file])
88
+ end
89
+
90
+ def render_header(params)
91
+ draw do
92
+ font("sans") do
93
+ text "<b>#{params[:header]}</b>",
94
+ size: 12, align: :right, inline_format: true
95
+ stroke_horizontal_rule
96
+
97
+ move_down in2pt(0.1)
98
+
99
+ text "<b>#{params[:title]}</b>",
100
+ size: 18, align: :right, inline_format: true
101
+
102
+ move_down in2pt(1.25)
103
+ end
104
+ end
105
+ end
106
+
107
+ def register_fonts
108
+ dejavu_path = File.dirname(__FILE__) + "/../../../data/fonts/dejavu"
109
+
110
+ draw do
111
+ font_families["sans"] = {
112
+ :normal => "#{dejavu_path}/DejaVuSansCondensed.ttf",
113
+ :italic => "#{dejavu_path}/DejaVuSansCondensed-Oblique.ttf",
114
+ :bold => "#{dejavu_path}/DejaVuSansCondensed-Bold.ttf",
115
+ :bold_italic => "#{dejavu_path}/DejaVuSansCondensed-BoldOblique.ttf"
116
+ }
117
+
118
+ font_families["mono"] = {
119
+ :normal => "#{dejavu_path}/DejaVuSansMono.ttf",
120
+ :italic => "#{dejavu_path}/DejaVuSansMono-Oblique.ttf",
121
+ :bold => "#{dejavu_path}/DejaVuSansMono-Bold.ttf",
122
+ :bold_italic => "#{dejavu_path}/DejaVuSansMono-BoldOblique.ttf"
123
+ }
124
+
125
+ font_families["serif"] = {
126
+ :normal => "#{dejavu_path}/DejaVuSerif.ttf",
127
+ :italic => "#{dejavu_path}/DejaVuSerif-Italic.ttf",
128
+ :bold => "#{dejavu_path}/DejaVuSerif-Bold.ttf",
129
+ :bold_italic => "#{dejavu_path}/DejaVuSerif-BoldItalic.ttf"
130
+ }
131
+ end
132
+ end
133
+
134
+ def draw(&block)
135
+ @document.instance_eval(&block)
136
+ end
137
+
138
+
139
+ private
140
+
141
+ def new_prawn_document
142
+ Prawn::Document.new( top_margin: in2pt(0.75),
143
+ bottom_margin: in2pt(1),
144
+ left_margin: in2pt(1),
145
+ right_margin: in2pt(1),
146
+ page_size: [in2pt(7.0), in2pt(9.19)],
147
+ skip_page_creation: true)
148
+ end
149
+ end
150
+ end
151
+ end
@@ -1,246 +1,7 @@
1
1
  # coding: UTF-8
2
2
 
3
- module Bookie
4
- module Emitters
5
- class Null
6
- def build_paragraph(paragraph)
7
- end
8
-
9
- def build_raw_text(raw_text)
10
- end
11
-
12
- def build_section_heading(header)
13
- end
14
-
15
- def build_list(content)
16
- end
17
- end
18
-
19
- class HTML
20
- def initialize
21
- @body = ""
22
- end
23
-
24
- attr_reader :body
25
-
26
- def build_paragraph(paragraph)
27
- @body << "<p>#{paragraph.contents}</p>"
28
- end
29
-
30
- def build_raw_text(raw_text)
31
- @body << "<pre>#{raw_text.contents}</pre>"
32
- end
33
-
34
- def build_section_heading(header)
35
- @body << "<h2>#{header.contents}</h2>"
36
- end
37
-
38
- def build_list(list)
39
- list_elements = list.contents.map { |li| "<li>#{li}</li>" }.join
40
- @body << "<ul>"+list_elements+"</ul>"
41
- end
42
-
43
- def render(params)
44
- File.open(params[:file], "w") do |file|
45
- file << %{
46
- <html>
47
- <body><h1>#{params[:title]}</h1>#{@body}</body>
48
- </html>
49
- }
50
- end
51
- end
52
- end
53
-
54
- class EPUB < HTML
55
- def render(params)
56
- t = Tempfile.new(params[:file])
57
- t << %{<?xml version="1.0" encoding="UTF-8"?>
58
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
59
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
60
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
61
- <head>
62
- <style type="text/css">
63
- pre { font-size: 1.1em }
64
- </style>
65
- </head>
66
- <body><h1>#{params[:title]}</h1>#{@body}</body>
67
- </html>
68
- }
69
- t.close
70
- FileUtils.mv(t.path, "#{t.path}.html")
71
-
72
- epub = EeePub.make do
73
- title params[:title]
74
- identifier '', :scheme => 'URL'
75
- uid ''
76
-
77
- files [File.expand_path("#{t.path}.html")]
78
- end
79
-
80
- epub.save(params[:file])
81
- end
82
- end
83
-
84
- class MOBI < HTML
85
- def render(params)
86
- t = Tempfile.new(params[:file])
87
- t << %{
88
- <html>
89
- <head>
90
- <style type="text/css">
91
- h1 { margin-bottom: 3em; font-size: xx-large }
92
- h2 { font-size: large }
93
- p { margin-bottom: 1.1em; text-indent: 0 }
94
- pre { font-size: xx-small }
95
- li { margin-bottom: 1.1em }
96
- ul { margin-top: 0em; margin-bottom: 0em;}
97
- </style>
98
- </head>
99
- <body><h1>#{params[:title]}</h1>#{@body}</body>
100
- </html>
101
- }
102
- t.close
103
- FileUtils.mv(t.path, "#{t.path}.html")
104
-
105
- `kindlegen #{t.path+'.html'} -o #{params[:file]}`
106
- FileUtils.mv("#{Dir.tmpdir}/#{params[:file]}", ".")
107
- end
108
- end
109
-
110
- class PDF
111
- include Prawn::Measurements
112
-
113
- def initialize(params)
114
- @document = new_prawn_document
115
- @document.extend(Prawn::Measurements)
116
-
117
- register_fonts
118
- render_header(params)
119
- end
120
-
121
- def build_list(list)
122
- items = list.contents
123
-
124
- draw do
125
- font("serif", :size => 9) do
126
- items.each do |li|
127
- li_text = li.gsub(/\s+/," ")
128
-
129
- group do
130
- float { text "•" }
131
- indent(in2pt(0.15)) do
132
- text li_text,
133
- inline_format: true,
134
- leading: 2
135
- end
136
- end
137
-
138
- move_down in2pt(0.05)
139
- end
140
- end
141
-
142
- move_down in2pt(0.05)
143
- end
144
- end
145
-
146
- def build_section_heading(section_text)
147
- draw do
148
- start_new_page unless cursor > in2pt(0.4)
149
-
150
- move_down in2pt(0.1)
151
-
152
- float do
153
- font("sans", :style => :bold, :size => 14) do
154
- text(section_text.contents.strip)
155
- end
156
- end
157
-
158
- move_down in2pt(0.3)
159
- end
160
- end
161
-
162
- def build_paragraph(paragraph)
163
- draw do
164
- font("serif", size: 9) do
165
- text(paragraph.contents.strip, align: :justify, leading: 2)
166
- end
167
- move_down in2pt(0.1)
168
- end
169
- end
170
-
171
- def build_raw_text(raw_text)
172
- sanitized_text = raw_text.contents.gsub(" ", Prawn::Text::NBSP).strip
173
-
174
- draw do
175
- font("mono", size: 8) do
176
- text sanitized_text
177
- move_down in2pt(0.1)
178
- end
179
- end
180
- end
181
-
182
- def render(params)
183
- @document.render_file(params[:file])
184
- end
185
-
186
- def render_header(params)
187
- draw do
188
- font("sans") do
189
- text "<b>#{params[:header]}</b>",
190
- size: 12, align: :right, inline_format: true
191
- stroke_horizontal_rule
192
-
193
- move_down in2pt(0.1)
194
-
195
- text "<b>#{params[:title]}</b>",
196
- size: 18, align: :right, inline_format: true
197
-
198
- move_down in2pt(1.25)
199
- end
200
- end
201
- end
202
-
203
- def register_fonts
204
- dejavu_path = File.dirname(__FILE__) + "/../../data/fonts/dejavu"
205
-
206
- draw do
207
- font_families["sans"] = {
208
- :normal => "#{dejavu_path}/DejaVuSansCondensed.ttf",
209
- :italic => "#{dejavu_path}/DejaVuSansCondensed-Oblique.ttf",
210
- :bold => "#{dejavu_path}/DejaVuSansCondensed-Bold.ttf",
211
- :bold_italic => "#{dejavu_path}/DejaVuSansCondensed-BoldOblique.ttf"
212
- }
213
-
214
- font_families["mono"] = {
215
- :normal => "#{dejavu_path}/DejaVuSansMono.ttf",
216
- :italic => "#{dejavu_path}/DejaVuSansMono-Oblique.ttf",
217
- :bold => "#{dejavu_path}/DejaVuSansMono-Bold.ttf",
218
- :bold_italic => "#{dejavu_path}/DejaVuSansMono-BoldOblique.ttf"
219
- }
220
-
221
- font_families["serif"] = {
222
- :normal => "#{dejavu_path}/DejaVuSerif.ttf",
223
- :italic => "#{dejavu_path}/DejaVuSerif-Italic.ttf",
224
- :bold => "#{dejavu_path}/DejaVuSerif-Bold.ttf",
225
- :bold_italic => "#{dejavu_path}/DejaVuSerif-BoldItalic.ttf"
226
- }
227
- end
228
- end
229
-
230
- def draw(&block)
231
- @document.instance_eval(&block)
232
- end
233
-
234
-
235
- private
236
-
237
- def new_prawn_document
238
- Prawn::Document.new( top_margin: in2pt(0.75),
239
- bottom_margin: in2pt(1),
240
- left_margin: in2pt(1),
241
- right_margin: in2pt(1),
242
- page_size: [in2pt(7.0), in2pt(9.19)] )
243
- end
244
- end
245
- end
246
- end
3
+ require_relative "emitters/null"
4
+ require_relative "emitters/html"
5
+ require_relative "emitters/epub"
6
+ require_relative "emitters/mobi"
7
+ require_relative "emitters/pdf"
@@ -1,3 +1,3 @@
1
1
  module Bookie
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
data/lib/bookie.rb CHANGED
@@ -6,6 +6,6 @@ require "prawn"
6
6
  require "eeepub"
7
7
 
8
8
  require_relative "bookie/version"
9
- require_relative "bookie/document"
10
9
  require_relative "bookie/parser"
11
10
  require_relative "bookie/emitters"
11
+ require_relative "bookie/book"
data/test/suite.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  require_relative "test_helper"
2
2
 
3
- require_relative "units/document_test"
4
3
  require_relative "units/parser_test"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bookie
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.10
5
+ version: 0.0.11
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gregory Brown
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-28 00:00:00 -04:00
13
+ date: 2011-04-30 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -38,16 +38,19 @@ dependencies:
38
38
  description: Eventually this may be a markdown to PDF, ePUB, MOBI processor. For now it's just something I'm playing around with, so use at your own risk
39
39
  email:
40
40
  - gregory.t.brown@gmail.com
41
- executables:
42
- - bookie
41
+ executables: []
42
+
43
43
  extensions: []
44
44
 
45
45
  extra_rdoc_files: []
46
46
 
47
47
  files:
48
- - bin/bookie
49
- - lib/bookie/application.rb
50
- - lib/bookie/document.rb
48
+ - lib/bookie/book.rb
49
+ - lib/bookie/emitters/epub.rb
50
+ - lib/bookie/emitters/html.rb
51
+ - lib/bookie/emitters/mobi.rb
52
+ - lib/bookie/emitters/null.rb
53
+ - lib/bookie/emitters/pdf.rb
51
54
  - lib/bookie/emitters.rb
52
55
  - lib/bookie/parser.rb
53
56
  - lib/bookie/version.rb
@@ -59,12 +62,9 @@ files:
59
62
  - test/fixtures/single_paragraph.md
60
63
  - test/suite.rb
61
64
  - test/test_helper.rb
62
- - test/units/document_test.rb
63
65
  - test/units/parser_test.rb
64
- - examples/headings.rb
65
- - examples/lists.rb
66
- - examples/preformatted.rb
67
- - examples/simple_emitters.rb
66
+ - examples/basic-features.rb
67
+ - examples/bookie-basic-feature.pdf
68
68
  - doc/banner.png
69
69
  - doc/markdown_syntax.pdf
70
70
  - data/fonts/dejavu/DejaVuSans-Bold.ttf
data/bin/bookie DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require_relative "../lib/bookie"
4
- require_relative "../lib/bookie/application"
5
-
6
- Bookie::Application.run(*ARGV)
data/examples/headings.rb DELETED
@@ -1,25 +0,0 @@
1
- require_relative "../lib/bookie"
2
- Prawn.debug = true
3
-
4
- file = "#{File.dirname(__FILE__)}/../test/fixtures/document_with_headings.md"
5
-
6
- pdf_document = Bookie::Document.new(file, Bookie::Emitters::PDF.new(
7
- header: "Ruby Best Practices", title: "Learning From Bad Ideas"))
8
-
9
- pdf_document.render(file: "output.pdf")
10
-
11
- html_document = Bookie::Document.new(file, Bookie::Emitters::HTML.new)
12
-
13
- html_document.render(title: "Learning From Bad Ideas",
14
- file: "output.html")
15
-
16
- mobi_document = Bookie::Document.new(file, Bookie::Emitters::MOBI.new)
17
-
18
- mobi_document.render(title: "Learning From Bad Ideas",
19
- file: "output.mobi")
20
-
21
- epub_document = Bookie::Document.new(file, Bookie::Emitters::EPUB.new)
22
-
23
- epub_document.render(title: "Learning From Bad Ideas",
24
- file: "output.epub")
25
-
data/examples/lists.rb DELETED
@@ -1,24 +0,0 @@
1
- require_relative "../lib/bookie"
2
- Prawn.debug = true
3
-
4
- file = "#{File.dirname(__FILE__)}/../test/fixtures/lists.md"
5
-
6
- pdf_document = Bookie::Document.new(file, Bookie::Emitters::PDF.new(
7
- header: "Ruby Mendicant University", title: "Project Guidelines"))
8
-
9
- pdf_document.render(file: "output.pdf")
10
-
11
- html_document = Bookie::Document.new(file, Bookie::Emitters::HTML.new)
12
-
13
- html_document.render(title: "Project Guidelines",
14
- file: "output.html")
15
-
16
- mobi_document = Bookie::Document.new(file, Bookie::Emitters::MOBI.new)
17
-
18
- mobi_document.render(title: "Project Guidelines",
19
- file: "output.mobi")
20
-
21
- epub_document = Bookie::Document.new(file, Bookie::Emitters::EPUB.new)
22
-
23
- epub_document.render(title: "Project Guidelines",
24
- file: "output.epub")
@@ -1,25 +0,0 @@
1
- require_relative "../lib/bookie"
2
- Prawn.debug = true
3
-
4
- file = "#{File.dirname(__FILE__)}/../test/fixtures/preformatted_blocks.md"
5
-
6
- pdf_document = Bookie::Document.new(file, Bookie::Emitters::PDF.new(
7
- header: "Practicing Ruby: Issue #1", title: "Ruby's Method Lookup Path"
8
- ))
9
-
10
- pdf_document.render(file: "output.pdf")
11
-
12
- html_document = Bookie::Document.new(file, Bookie::Emitters::HTML.new)
13
-
14
- html_document.render(title: "Ruby's Method Lookup Path",
15
- file: "output.html")
16
-
17
- mobi_document = Bookie::Document.new(file, Bookie::Emitters::MOBI.new)
18
-
19
- mobi_document.render(title: "Ruby's Method Lookup Path",
20
- file: "output.mobi")
21
-
22
- epub_document = Bookie::Document.new(file, Bookie::Emitters::EPUB.new)
23
-
24
- epub_document.render(title: "Ruby's Method Lookup Path",
25
- file: "output.epub")
@@ -1,9 +0,0 @@
1
- require_relative "../lib/bookie"
2
- Prawn.debug = true
3
-
4
- file = "#{File.dirname(__FILE__)}/../test/fixtures/multi_paragraph_document.md"
5
-
6
- pdf_document = Bookie::Document.new(file, Bookie::Emitters::PDF.new(
7
- header: "Majestic Sea Creature Blog", title: "Why does RbMU exist?"))
8
-
9
- pdf_document.render(file: "output.pdf")
@@ -1,30 +0,0 @@
1
- require "optparse"
2
-
3
- module Bookie
4
- module Application
5
- extend self
6
-
7
- def run(*args)
8
- options = {}
9
-
10
- input = OptionParser.new do |opts|
11
- opts.on("-n", "--name NAME", "Document name") do |v|
12
- options[:header] = v
13
- end
14
-
15
- opts.on("-t", "--title TITLE", "Document title") do |v|
16
- options[:title] = v
17
- end
18
- end.parse!(args).first
19
-
20
- basename = File.basename(input, ".md")
21
-
22
- Bookie::Document.new(input, Bookie::Emitters::PDF.new(options))
23
- .render(file: "#{basename}.pdf")
24
- Bookie::Document.new(input, Bookie::Emitters::MOBI.new)
25
- .render({file: "#{basename}.mobi"}.merge(options))
26
- Bookie::Document.new(input, Bookie::Emitters::EPUB.new)
27
- .render({file: "#{basename}.mobi"}.merge(options))
28
- end
29
- end
30
- end
@@ -1,14 +0,0 @@
1
- module Bookie
2
- class Document
3
- def initialize(filename, emitter=Bookie::Emitters::Null.new, parser=Bookie::Parser)
4
- @emitter = emitter
5
- @contents = parser.parse(File.read(filename), emitter)
6
- end
7
-
8
- attr_reader :emitter, :contents
9
-
10
- def render(*args)
11
- @emitter.render(*args)
12
- end
13
- end
14
- end
@@ -1,10 +0,0 @@
1
- require_relative "../test_helper"
2
-
3
- context "A Document" do
4
- test "should be parsed into an array of contents" do
5
- sample_text = fixture("multi_paragraph_document.md")
6
- document = Bookie::Document.new(sample_text)
7
-
8
- refute document.contents.empty?, "contents should not be empty"
9
- end
10
- end