fullcirclegroup-prawn 0.2.99.3

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.
Files changed (117) hide show
  1. data/COPYING +340 -0
  2. data/LICENSE +56 -0
  3. data/README +47 -0
  4. data/Rakefile +76 -0
  5. data/data/fonts/Activa.ttf +0 -0
  6. data/data/fonts/Chalkboard.ttf +0 -0
  7. data/data/fonts/Courier-Bold.afm +342 -0
  8. data/data/fonts/Courier-BoldOblique.afm +342 -0
  9. data/data/fonts/Courier-Oblique.afm +342 -0
  10. data/data/fonts/Courier.afm +342 -0
  11. data/data/fonts/DejaVuSans.ttf +0 -0
  12. data/data/fonts/Dustismo_Roman.ttf +0 -0
  13. data/data/fonts/Helvetica-Bold.afm +2827 -0
  14. data/data/fonts/Helvetica-BoldOblique.afm +2827 -0
  15. data/data/fonts/Helvetica-Oblique.afm +3051 -0
  16. data/data/fonts/Helvetica.afm +3051 -0
  17. data/data/fonts/MustRead.html +19 -0
  18. data/data/fonts/Symbol.afm +213 -0
  19. data/data/fonts/Times-Bold.afm +2588 -0
  20. data/data/fonts/Times-BoldItalic.afm +2384 -0
  21. data/data/fonts/Times-Italic.afm +2667 -0
  22. data/data/fonts/Times-Roman.afm +2419 -0
  23. data/data/fonts/ZapfDingbats.afm +225 -0
  24. data/data/fonts/comicsans.ttf +0 -0
  25. data/data/fonts/gkai00mp.ttf +0 -0
  26. data/data/images/arrow.png +0 -0
  27. data/data/images/arrow2.png +0 -0
  28. data/data/images/barcode_issue.png +0 -0
  29. data/data/images/dice.alpha +0 -0
  30. data/data/images/dice.dat +0 -0
  31. data/data/images/dice.png +0 -0
  32. data/data/images/page_white_text.alpha +0 -0
  33. data/data/images/page_white_text.dat +0 -0
  34. data/data/images/page_white_text.png +0 -0
  35. data/data/images/pigs.jpg +0 -0
  36. data/data/images/rails.dat +0 -0
  37. data/data/images/rails.png +0 -0
  38. data/data/images/ruport.png +0 -0
  39. data/data/images/ruport_data.dat +0 -0
  40. data/data/images/ruport_transparent.png +0 -0
  41. data/data/images/ruport_type0.png +0 -0
  42. data/data/images/stef.jpg +0 -0
  43. data/data/images/web-links.dat +1 -0
  44. data/data/images/web-links.png +0 -0
  45. data/data/shift_jis_text.txt +1 -0
  46. data/examples/addressbook.csv +6 -0
  47. data/examples/alignment.rb +16 -0
  48. data/examples/bounding_boxes.rb +30 -0
  49. data/examples/canvas.rb +12 -0
  50. data/examples/cell.rb +38 -0
  51. data/examples/chinese_text_wrapping.rb +17 -0
  52. data/examples/currency.csv +1834 -0
  53. data/examples/curves.rb +10 -0
  54. data/examples/family_based_styling.rb +21 -0
  55. data/examples/fancy_table.rb +61 -0
  56. data/examples/flowing_text_with_header_and_footer.rb +72 -0
  57. data/examples/font_size.rb +27 -0
  58. data/examples/hexagon.rb +14 -0
  59. data/examples/image.rb +23 -0
  60. data/examples/image2.rb +13 -0
  61. data/examples/image_flow.rb +34 -0
  62. data/examples/kerning.rb +27 -0
  63. data/examples/lazy_bounding_boxes.rb +19 -0
  64. data/examples/line.rb +31 -0
  65. data/examples/multi_page_layout.rb +14 -0
  66. data/examples/page_geometry.rb +28 -0
  67. data/examples/png_types.rb +23 -0
  68. data/examples/polygons.rb +16 -0
  69. data/examples/position_by_baseline.rb +26 -0
  70. data/examples/ruport_formatter.rb +50 -0
  71. data/examples/ruport_helpers.rb +18 -0
  72. data/examples/russian_boxes.rb +34 -0
  73. data/examples/simple_text.rb +15 -0
  74. data/examples/simple_text_ttf.rb +16 -0
  75. data/examples/sjis.rb +21 -0
  76. data/examples/span.rb +27 -0
  77. data/examples/table.rb +47 -0
  78. data/examples/table_header_color.rb +16 -0
  79. data/examples/text_flow.rb +65 -0
  80. data/examples/top_and_bottom_cells.rb +40 -0
  81. data/examples/utf8.rb +12 -0
  82. data/lib/prawn.rb +67 -0
  83. data/lib/prawn/compatibility.rb +46 -0
  84. data/lib/prawn/document.rb +309 -0
  85. data/lib/prawn/document/bounding_box.rb +362 -0
  86. data/lib/prawn/document/internals.rb +113 -0
  87. data/lib/prawn/document/page_geometry.rb +79 -0
  88. data/lib/prawn/document/span.rb +47 -0
  89. data/lib/prawn/document/table.rb +350 -0
  90. data/lib/prawn/document/text.rb +196 -0
  91. data/lib/prawn/errors.rb +48 -0
  92. data/lib/prawn/font.rb +356 -0
  93. data/lib/prawn/font/cmap.rb +59 -0
  94. data/lib/prawn/font/metrics.rb +378 -0
  95. data/lib/prawn/font/wrapping.rb +47 -0
  96. data/lib/prawn/graphics.rb +252 -0
  97. data/lib/prawn/graphics/cell.rb +264 -0
  98. data/lib/prawn/graphics/color.rb +132 -0
  99. data/lib/prawn/images.rb +336 -0
  100. data/lib/prawn/images/jpg.rb +45 -0
  101. data/lib/prawn/images/png.rb +199 -0
  102. data/lib/prawn/pdf_object.rb +73 -0
  103. data/lib/prawn/reference.rb +56 -0
  104. data/spec/bounding_box_spec.rb +141 -0
  105. data/spec/document_spec.rb +181 -0
  106. data/spec/font_spec.rb +141 -0
  107. data/spec/graphics_spec.rb +209 -0
  108. data/spec/images_spec.rb +68 -0
  109. data/spec/jpg_spec.rb +25 -0
  110. data/spec/metrics_spec.rb +62 -0
  111. data/spec/pdf_object_spec.rb +112 -0
  112. data/spec/png_spec.rb +196 -0
  113. data/spec/reference_spec.rb +42 -0
  114. data/spec/spec_helper.rb +23 -0
  115. data/spec/table_spec.rb +179 -0
  116. data/spec/text_spec.rb +135 -0
  117. metadata +181 -0
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate("baseline.pdf") do
7
+ pos = self.y - margin_box.absolute_bottom
8
+ stroke do
9
+ horizontal_rule
10
+ line [0,pos], [0,pos - font.height*2]
11
+ end
12
+
13
+ bounding_box(bounds.top_left, :width => 250) do
14
+ text "blah blah blah"
15
+ text "fasjkafsk asfkjfj saklfs asfklafs"
16
+ end
17
+
18
+ bounding_box([300,bounds.top], :width => 250) do
19
+ # This is how you can position the text exactly at the baseline
20
+ move_up font.height
21
+ text "blah blah blah"
22
+ text "fasjkafsk asfkjfj saklfs asfklafs"
23
+ end
24
+
25
+ stroke_horizontal_rule
26
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ ruby_18 do
7
+ require "rubygems"
8
+ require "ruport"
9
+
10
+ module Ruport
11
+ class Formatter
12
+ class PrawnPDF < Ruport::Formatter
13
+ renders :pdf, :for => Ruport::Controller::Table
14
+
15
+ def document
16
+ @document ||= (options.document || Prawn::Document.new)
17
+ end
18
+
19
+ def table_body
20
+ data.map { |e| e.to_a }
21
+ end
22
+
23
+ build :table_header do
24
+ @headers = options.headers || data.column_names
25
+ end
26
+
27
+ build :table_body do
28
+ document.table table_body,
29
+ :headers => @headers,
30
+ :row_colors => :pdf_writer,
31
+ :position => :center,
32
+ :font_size => 10,
33
+ :vertical_padding => 2,
34
+ :horizontal_padding => 5
35
+ end
36
+
37
+ def finalize
38
+ output << document.render
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+
45
+ if __FILE__ == $PROGRAM_NAME
46
+ t = Table("#{Prawn::BASEDIR}/examples/addressbook.csv")
47
+ headers = t.column_names.map { |c| c.capitalize }
48
+ t.save_as "addressbook_ruport.pdf", :headers => headers
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ # Demonstrates some features stolen from Ruport::Formatter::PDF
7
+ Prawn::Document.generate("ruport.pdf") do
8
+ move_down 50
9
+ # TODO: Figure out where to set the y cursor to.
10
+ stroke_horizontal_rule
11
+ text "Hi there"
12
+ pad(50) { text "I'm Padded" }
13
+ text "I'm far away"
14
+ stroke_horizontal_line 50, 100
15
+ stroke_horizontal_line 50, 100, :at => 300
16
+ stroke_vertical_line 300, 50, :at => 250
17
+
18
+ end
@@ -0,0 +1,34 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'prawn'
3
+
4
+ class Array
5
+ def combine(arr)
6
+ output = []
7
+ self.each do |i1|
8
+ arr.each do |i2|
9
+ output += [[i1,i2]]
10
+ end
11
+ end
12
+ output
13
+ end
14
+ end
15
+
16
+ def recurse_bounding_box(pdf, max_depth=5, depth=1)
17
+ box = pdf.bounds
18
+ width = (box.width-15)/2
19
+ height = (box.height-15)/2
20
+ left_top_corners = [5, box.right-width-5].combine [box.top-5, height+5]
21
+ left_top_corners.each do |lt|
22
+ pdf.bounding_box(lt, :width=>width, :height=>height) do
23
+ pdf.stroke_rectangle [0,height], width, height
24
+ recurse_bounding_box(pdf, max_depth, depth+1) if depth<max_depth
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ Prawn::Document.generate("russian_boxes.pdf") do |pdf|
31
+ recurse_bounding_box(pdf)
32
+ end
33
+
34
+
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate "hello.pdf" do
7
+ fill_color "0000ff"
8
+ text "Hello World", :at => [200,420], :size => 32, :rotate => 45
9
+ font "Times-Roman"
10
+ fill_color "ff0000"
11
+ text "Overcoming singular font limitation", :at => [5,5]
12
+ start_new_page
13
+ font "Courier"
14
+ text "Goodbye World", :at => [288,50]
15
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate "hello-ttf.pdf" do
7
+ fill_color "0000ff"
8
+ font "#{Prawn::BASEDIR}/data/fonts/comicsans.ttf"
9
+ text "Hello World", :at => [200,720], :size => 32
10
+
11
+ font "#{Prawn::BASEDIR}/data/fonts/Chalkboard.ttf"
12
+
13
+ pad(20) do
14
+ text "This is chalkboard wrapping " * 20
15
+ end
16
+ end
data/examples/sjis.rb ADDED
@@ -0,0 +1,21 @@
1
+ # coding: utf-8
2
+
3
+ # Tests passing non utf-8 data into Prawns text function. Should
4
+ # be transparently converted to utf-8 and rendered as usual.
5
+ #
6
+ # NOTE: only works on ruby1.9 compatible VMs, and requires the current
7
+ # font to include japanese glyphs. On 1.8.x comaptible VMs, an exception
8
+ # will be raised.
9
+
10
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
11
+ require "prawn"
12
+
13
+ ruby_19 do
14
+ datafile = File.join(File.dirname(__FILE__), "..", "data", "shift_jis_text.txt")
15
+ sjis_str = File.open(datafile, "r:shift_jis") { |f| f.gets }
16
+
17
+ Prawn::Document.generate("sjis.pdf") do
18
+ font "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
19
+ text sjis_str
20
+ end
21
+ end
data/examples/span.rb ADDED
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate("span.pdf") do
7
+
8
+ # Spans will typically be used outside of bounding boxes as a way to build
9
+ # single columns of flowing text that span across pages.
10
+ #
11
+ span(350, :position => :center) do
12
+ text "Here's some centered text in a 350 point column. " * 100
13
+ end
14
+
15
+ # Spans are not really compatible with bounding boxes because they break
16
+ # the nesting chain and also may position text outside of the bounding box
17
+ # boundaries, but sometimes you may wish to use them anyway for convenience
18
+ # Here's an example of how to do that dynamically.
19
+ #
20
+ bounding_box([50,300], :width => 400) do
21
+ text "Here's some default bounding box text. " * 10
22
+ span(bounds.width,
23
+ :position => bounds.absolute_left - margin_box.absolute_left) do
24
+ text "The rain in spain falls mainly on the plains. " * 300
25
+ end
26
+ end
27
+ end
data/examples/table.rb ADDED
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate("table.pdf") do
7
+ font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
8
+ table [["ὕαλον ϕαγεῖν", "baaar", "1" ],
9
+ ["This is","a sample", "2" ],
10
+ ["Table", "dont\ncha\nknow?", "3" ],
11
+ [ "It", "Rules", "4" ],
12
+ [ "It", "Rules", "4" ],
13
+ [ "It", "Rules", "4123231" ],
14
+ [ "It", "Rules", "22.5" ],
15
+ [ "It", "Rules", "4" ],
16
+ [ "It", "Rules", "4" ],
17
+ [ "It", "Rules", "4" ],
18
+ [ "It", "Rules", "4" ],
19
+ [ "It", "Rules", "4" ],
20
+ [ "It", "Rules\nwith an iron fist", "x" ],
21
+ [ "It", "Rules", "4" ],
22
+ [ "It", "Rules", "4" ],
23
+ [ "It", "Rules", "4" ],
24
+ [ "It", "Rules", "4" ],
25
+ [ "It", "Rules", "4" ],
26
+ [ "It", "Rules", "4" ],
27
+ [ "It", "Rules", "4" ],
28
+ [ "It", "Rules", "4" ],
29
+ [ "It", "Rules", "4" ]],
30
+
31
+ :font_size => 24,
32
+ :horizontal_padding => 10,
33
+ :vertical_padding => 3,
34
+ :border_width => 2,
35
+ :position => :center,
36
+ :headers => ["Column A","Column B","#"],
37
+ :align => {1 => :center},
38
+ :align_headers => :center
39
+
40
+ text "This should appear in the original font size, just below the table"
41
+ move_down 10
42
+
43
+ table [[ "Wide", "columns", "streeetch"],
44
+ ["are","mighty fine", "streeeeeeeech"]],
45
+ :widths => { 0 => 200, 1 => 250 }, :position => 5
46
+
47
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate "table_header_color.pdf" do
7
+ table [ ['01/01/2008', 'John Doe', '4.2', '125.00', '525.00'],
8
+ ['01/12/2008', 'Jane Doe', '3.2', '75.50', '241.60'] ] * 20,
9
+ :position => :center,
10
+ :headers => ['Date', 'Employee', 'Hours', 'Rate', 'Total'],
11
+ :widths => { 0 => 75, 1 => 100, 2 => 50, 3 => 50, 4 => 50},
12
+ :border_style => :grid,
13
+ :header_color => 'f07878',
14
+ :header_text_color => "990000",
15
+ :row_colors => ["FFCCFF","CCFFCC"]
16
+ end
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ content = <<-EOS
7
+ How does
8
+ Prawn deal with
9
+ white
10
+ space
11
+
12
+ and
13
+
14
+ line
15
+ breaks?
16
+ EOS
17
+
18
+ poem = <<-EOS
19
+ GOOD-BYE
20
+
21
+ Good-bye, proud world! I'm going home: Thou art not my friend, and I'm not thine. Long through thy weary crowds I roam; A river-ark on the ocean brine, Long I've been tossed like the driven foam: But now, proud world! I'm going home.
22
+
23
+ Good-bye to Flattery's fawning face; To Grandeur with his wise grimace; To upstart Wealth's averted eye; To supple Office, low and high; To crowded halls, to court and street; To frozen hearts and hasting feet; To those who go, and those who come; Good-bye, proud world! I'm going home.
24
+
25
+ I am going to my own hearth-stone, Bosomed in yon green hills alone,-- secret nook in a pleasant land, Whose groves the frolic fairies planned; Where arches green, the livelong day, Echo the blackbird's roundelay, And vulgar feet have never trod A spot that is sacred to thought and God.
26
+
27
+ O, when I am safe in my sylvan home, I tread on the pride of Greece and Rome; And when I am stretched beneath the pines, Where the evening star so holy shines, I laugh at the lore and the pride of man, At the sophist schools and the learned clan; For what are they all, in their high conceit, When man in the bush with God may meet?
28
+ EOS
29
+
30
+ overflow = "This text should flow gracefully onto the next page, like a stream"+
31
+ " flows elegantly from a mountain lake down into the village below."
32
+
33
+ Prawn::Document.generate("flow.pdf") do |pdf|
34
+
35
+ pdf.font "Times-Roman"
36
+ pdf.stroke_line [pdf.bounds.left, pdf.bounds.top],
37
+ [pdf.bounds.right, pdf.bounds.top]
38
+
39
+ pdf.text content, :size => 10
40
+
41
+ pdf.bounding_box([100,600], :width => 200, :height => 525) do
42
+ pdf.stroke_line [pdf.bounds.left, pdf.bounds.top],
43
+ [pdf.bounds.right, pdf.bounds.top]
44
+ pdf.text poem, :size => 12
45
+ end
46
+
47
+ pdf.bounding_box([325,600], :width => 200, :height => 525) do
48
+ pdf.stroke_line [pdf.bounds.left, pdf.bounds.top],
49
+ [pdf.bounds.right, pdf.bounds.top]
50
+ pdf.text poem.reverse, :size => 12
51
+ end
52
+
53
+ pdf.text overflow * 10, :size => 14
54
+
55
+ pdf.text "Hooray! We've conquered the evil PDF gods", :size => 36
56
+
57
+ pdf.bounding_box([100,450], :width => 300) do
58
+ pdf.stroke_line [pdf.bounds.left, pdf.bounds.top],
59
+ [pdf.bounds.right, pdf.bounds.top]
60
+ pdf.text poem, :size => 12, :spacing => 5
61
+ end
62
+
63
+ pdf.text "And this text automatically goes below the poem", :size => 18
64
+
65
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+ require "rubygems"
6
+
7
+ headers, body = nil, nil
8
+
9
+ ruby_18 do
10
+ require "fastercsv"
11
+ headers, *body = FasterCSV.read("#{Prawn::BASEDIR}/examples/addressbook.csv")
12
+ end
13
+
14
+ ruby_19 do
15
+ require "csv"
16
+ headers, *body = CSV.read("#{Prawn::BASEDIR}/examples/addressbook.csv")
17
+ headers.map! { |e| e.encode("UTF-8") }
18
+ body.map! { |e| e.map! { |x| x.encode("UTF-8") } }
19
+ end
20
+
21
+ Prawn::Document.generate("top_and_bottom_cells.pdf", :page_layout => :portrait) do
22
+
23
+ table(body, :headers => headers, :align => :center, :border_style => :top_and_bottom)
24
+
25
+ move_down(50)
26
+
27
+ table(body, :headers => headers, :align => :center, :border_style => :top_and_bottom, :header_border_style => :sides)
28
+
29
+ move_down(50)
30
+
31
+ table(body, :headers => headers, :align => :center, :border_style => :grid, :header_border_style => :bottom_only)
32
+
33
+
34
+ # cell([500,300], :text => "This free flowing textbox shows how you can use Prawn's "+
35
+ # "cells outside of a table with ease. Think of a 'cell' as " +
36
+ # "simply a limited purpose bounding box that is meant for laying " +
37
+ # "out blocks of text and optionally placing a border around it",
38
+ # :width => 225, :padding => 10, :border_width => 2, :border_style => :top_and_bottom)
39
+
40
+ end
data/examples/utf8.rb ADDED
@@ -0,0 +1,12 @@
1
+ # coding: utf-8
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require "prawn"
5
+
6
+ Prawn::Document.generate("utf8.pdf") do
7
+ font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
8
+ text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει." * 20
9
+ end
10
+
11
+
12
+
data/lib/prawn.rb ADDED
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ # prawn.rb : A library for PDF generation in Ruby
4
+ #
5
+ # Copyright April 2008, Gregory Brown. All Rights Reserved.
6
+ #
7
+ # This is free software. Please see the LICENSE and COPYING files for details.
8
+
9
+ %w[ttfunk/lib].each do |dep|
10
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../vendor/#{dep}")
11
+ end
12
+
13
+ require 'ttfunk'
14
+
15
+ module Prawn
16
+ file = __FILE__
17
+ file = File.readlink(file) if File.symlink?(file)
18
+ dir = File.dirname(file)
19
+
20
+ # The base source directory for Prawn as installed on the system
21
+ BASEDIR = File.expand_path(File.join(dir, '..'))
22
+
23
+ extend self
24
+
25
+ attr_accessor :debug
26
+
27
+ def verify_options(accepted,actual) #:nodoc:
28
+ return unless debug || $DEBUG
29
+ require "set"
30
+ unless (act=Set[*actual.keys]).subset?(acc=Set[*accepted])
31
+ raise Prawn::Errors::UnknownOption,
32
+ "\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" <<
33
+ "Accepted options are: #{accepted.inspect}"
34
+ end
35
+ yield if block_given?
36
+ end
37
+
38
+ module Configurable #:nodoc:
39
+ def configuration(*args)
40
+ @config ||= Marshal.load(Marshal.dump(default_configuration))
41
+ if Hash === args[0]
42
+ @config.update(args[0])
43
+ elsif args.length > 1
44
+ @config.values_at(*args)
45
+ elsif args.length == 1
46
+ @config[args[0]]
47
+ else
48
+ @config
49
+ end
50
+ end
51
+
52
+ alias_method :C, :configuration
53
+ end
54
+ end
55
+
56
+ require "prawn/compatibility"
57
+ require "prawn/errors"
58
+ require "prawn/pdf_object"
59
+ require "prawn/graphics"
60
+ require "prawn/images"
61
+ require "prawn/images/jpg"
62
+ require "prawn/images/png"
63
+ require "prawn/document"
64
+ require "prawn/reference"
65
+ require "prawn/font"
66
+ require "prawn/encoding"
67
+ require "prawn/measurements"