bookie 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,3 +2,15 @@
2
2
 
3
3
  Add some barely functional Parser and Document object stubs, initial gem release
4
4
  to claim the namespace.
5
+
6
+ ## 0.0.2 (2011.04.23)
7
+
8
+ Create some stubs for Paragraph and ContentTree objects, enough for us to start
9
+ thinking about what the emitter API might look like. But not really enough to do
10
+ anything else.
11
+
12
+ ## 0.0.3 (2011.04.23)
13
+
14
+ Added some basic emitters for PDF and HTML paragraphs. Note these are proofs of
15
+ concept ONLY, not meant for practical use. See examples/simple_emitters.rb to
16
+ see how they're used.
data/README.md CHANGED
@@ -17,9 +17,9 @@ put together a proper release plan.
17
17
 
18
18
  ## Dependencies
19
19
 
20
- This project targets Ruby 1.9.2 exclusively, and will not run on Ruby 1.8. It
21
- does not rely on anything outside of Ruby 1.9.2's core and standard libraries at
22
- this time, but that may change in the future.
20
+ Bookie targets Ruby 1.9.2 exclusively, and will not run on Ruby 1.8.
21
+ Currently, the only direct dependency we use is Prawn, but that may change in
22
+ the future.
23
23
 
24
24
  ## Contributing
25
25
 
@@ -0,0 +1,10 @@
1
+ require_relative "../lib/bookie"
2
+ Prawn.debug = true
3
+
4
+ test_file = "#{File.dirname(__FILE__)}/../test/fixtures/multi_paragraph_document.md"
5
+
6
+ html_document = Bookie::Document.new(test_file, Bookie::Emitters::HTML.new)
7
+ File.open("output.html", "w") { |f| f << html_document.render }
8
+
9
+ pdf_document = Bookie::Document.new(test_file, Bookie::Emitters::PDF.new)
10
+ File.open("output.pdf", "w") { |f| f << pdf_document.render }
@@ -1,3 +1,6 @@
1
+ require "prawn"
2
+
1
3
  require_relative "bookie/version"
2
4
  require_relative "bookie/document"
3
5
  require_relative "bookie/parser"
6
+ require_relative "bookie/emitters"
@@ -1,10 +1,14 @@
1
1
  module Bookie
2
2
  class Document
3
- def initialize(filename, parser=Bookie::Parser)
4
- @parser = parser
5
- @contents = parser.parse(File.read(filename))
3
+ def initialize(filename, emitter=Bookie::Emitters::Null.new, parser=Bookie::Parser)
4
+ @emitter = emitter
5
+ @contents = parser.parse(File.read(filename), emitter)
6
6
  end
7
7
 
8
- attr_reader :contents, :parser
8
+ attr_reader :emitter, :contents
9
+
10
+ def render
11
+ @emitter.render
12
+ end
9
13
  end
10
14
  end
@@ -0,0 +1,51 @@
1
+ module Bookie
2
+ module Emitters
3
+ class Null
4
+ def build_paragraph(paragraph)
5
+ end
6
+ end
7
+
8
+ class HTML
9
+
10
+ def initialize
11
+ @output = ""
12
+ end
13
+
14
+ def build_paragraph(paragraph)
15
+ @output << "<p>#{paragraph.children.first}</p>"
16
+ end
17
+
18
+ def render
19
+ "<html><body>#{@output}</body></html>"
20
+ end
21
+ end
22
+
23
+ class PDF
24
+ include Prawn::Measurements
25
+
26
+ def initialize
27
+ @document = new_prawn_document
28
+ @paragraphs = []
29
+ end
30
+
31
+ def build_paragraph(paragraph)
32
+ @paragraphs << paragraph.children.first.gsub(/\s+/," ")
33
+ end
34
+
35
+ def render
36
+ @document.text(@paragraphs.join("\n\n"), align: :justify, size: 10)
37
+ @document.render
38
+ end
39
+
40
+ private
41
+
42
+ def new_prawn_document
43
+ Prawn::Document.new( top_margin: in2pt(0.75),
44
+ bottom_margin: in2pt(1),
45
+ left_margin: in2pt(1),
46
+ right_margin: in2pt(1),
47
+ page_size: [in2pt(7.0), in2pt(9.19)] )
48
+ end
49
+ end
50
+ end
51
+ end
@@ -3,20 +3,23 @@ module Bookie
3
3
  Paragraph = Struct.new(:children)
4
4
 
5
5
  class Parser
6
- def self.parse(contents)
7
- parser = new(contents)
6
+ def self.parse(contents, emitter=Bookie::Emitters::Null.new)
7
+ parser = new(contents, emitter)
8
8
  parser.document_tree
9
9
  end
10
10
 
11
11
  attr_reader :document_tree
12
12
 
13
- def initialize(contents)
13
+ def initialize(contents, emitter)
14
+ @emitter = emitter
14
15
  generate_document_tree(contents)
15
16
  end
16
17
 
17
18
  def extract_paragraphs(contents)
18
19
  contents.split(/\n\n+/).each do |e|
19
- document_tree.children << Paragraph.new([e])
20
+ paragraph = Paragraph.new([e])
21
+ @emitter.build_paragraph(paragraph)
22
+ document_tree.children << paragraph
20
23
  end
21
24
  end
22
25
 
@@ -1,3 +1,3 @@
1
1
  module Bookie
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bookie
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gregory Brown
@@ -12,8 +12,18 @@ cert_chain: []
12
12
 
13
13
  date: 2011-04-23 00:00:00 -04:00
14
14
  default_executable:
15
- dependencies: []
16
-
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: prawn
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 0.11.0
25
+ type: :runtime
26
+ version_requirements: *id001
17
27
  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
18
28
  email:
19
29
  - gregory.t.brown@gmail.com
@@ -25,6 +35,7 @@ extra_rdoc_files: []
25
35
 
26
36
  files:
27
37
  - lib/bookie/document.rb
38
+ - lib/bookie/emitters.rb
28
39
  - lib/bookie/parser.rb
29
40
  - lib/bookie/version.rb
30
41
  - lib/bookie.rb
@@ -34,6 +45,7 @@ files:
34
45
  - test/test_helper.rb
35
46
  - test/units/document_test.rb
36
47
  - test/units/parser_test.rb
48
+ - examples/simple_emitters.rb
37
49
  - GPLv3
38
50
  - README.md
39
51
  - CHANGELOG.md