prawn 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +2 -2
  3. data/Gemfile +18 -0
  4. data/LICENSE +1 -1
  5. data/README.md +17 -4
  6. data/Rakefile +18 -22
  7. data/data/images/indexed_color.dat +0 -0
  8. data/data/images/indexed_color.png +0 -0
  9. data/data/pdfs/nested_pages.pdf +13 -13
  10. data/lib/pdf/core.rb +35 -0
  11. data/lib/{prawn → pdf}/core/annotations.rb +6 -7
  12. data/lib/{prawn → pdf}/core/byte_string.rb +1 -1
  13. data/lib/{prawn → pdf}/core/destinations.rb +23 -23
  14. data/lib/{prawn → pdf}/core/document_state.rb +8 -8
  15. data/lib/pdf/core/filter_list.rb +51 -0
  16. data/lib/pdf/core/filters.rb +36 -0
  17. data/lib/pdf/core/graphics_state.rb +68 -0
  18. data/lib/{prawn → pdf}/core/literal_string.rb +1 -1
  19. data/lib/{prawn → pdf}/core/name_tree.rb +14 -2
  20. data/lib/{prawn → pdf}/core/object_store.rb +80 -24
  21. data/lib/pdf/core/outline.rb +315 -0
  22. data/lib/{prawn → pdf}/core/page.rb +23 -26
  23. data/lib/{prawn/document → pdf/core}/page_geometry.rb +11 -21
  24. data/lib/{prawn → pdf}/core/pdf_object.rb +48 -32
  25. data/lib/{prawn → pdf}/core/reference.rb +35 -44
  26. data/lib/pdf/core/stream.rb +98 -0
  27. data/lib/{prawn → pdf}/core/text.rb +24 -17
  28. data/lib/prawn.rb +95 -17
  29. data/lib/prawn/compatibility.rb +66 -26
  30. data/lib/prawn/document.rb +48 -30
  31. data/lib/prawn/document/bounding_box.rb +3 -3
  32. data/lib/prawn/document/column_box.rb +46 -8
  33. data/lib/prawn/document/graphics_state.rb +10 -73
  34. data/lib/prawn/document/internals.rb +24 -23
  35. data/lib/prawn/document/snapshot.rb +6 -7
  36. data/lib/prawn/document/span.rb +10 -10
  37. data/lib/prawn/encoding.rb +7 -7
  38. data/lib/prawn/errors.rb +18 -29
  39. data/lib/prawn/font.rb +64 -28
  40. data/lib/prawn/font/afm.rb +32 -74
  41. data/lib/prawn/font/dfont.rb +2 -2
  42. data/lib/prawn/font/ttf.rb +28 -57
  43. data/lib/prawn/font_metric_cache.rb +45 -0
  44. data/lib/prawn/graphics.rb +307 -41
  45. data/lib/prawn/graphics/cap_style.rb +3 -3
  46. data/lib/prawn/graphics/color.rb +12 -5
  47. data/lib/prawn/graphics/dash.rb +52 -31
  48. data/lib/prawn/graphics/join_style.rb +7 -7
  49. data/lib/prawn/graphics/patterns.rb +137 -0
  50. data/lib/prawn/graphics/transformation.rb +9 -9
  51. data/lib/prawn/graphics/transparency.rb +1 -1
  52. data/lib/prawn/image_handler.rb +30 -0
  53. data/lib/prawn/images.rb +86 -105
  54. data/lib/prawn/images/image.rb +48 -0
  55. data/lib/prawn/images/jpg.rb +14 -10
  56. data/lib/prawn/images/png.rb +50 -37
  57. data/lib/prawn/layout.rb +2 -2
  58. data/lib/prawn/layout/grid.rb +51 -51
  59. data/lib/prawn/measurement_extensions.rb +5 -5
  60. data/lib/prawn/measurements.rb +25 -21
  61. data/lib/prawn/outline.rb +4 -308
  62. data/lib/prawn/repeater.rb +8 -8
  63. data/lib/prawn/security.rb +50 -36
  64. data/lib/prawn/soft_mask.rb +94 -0
  65. data/lib/prawn/stamp.rb +3 -3
  66. data/lib/prawn/table.rb +292 -118
  67. data/lib/prawn/table/cell.rb +272 -45
  68. data/lib/prawn/table/cell/image.rb +70 -0
  69. data/lib/prawn/table/cell/in_table.rb +2 -2
  70. data/lib/prawn/table/cell/span_dummy.rb +92 -0
  71. data/lib/prawn/table/cell/subtable.rb +2 -2
  72. data/lib/prawn/table/cell/text.rb +42 -24
  73. data/lib/prawn/table/cells.rb +137 -48
  74. data/lib/prawn/text.rb +35 -23
  75. data/lib/prawn/text/box.rb +18 -5
  76. data/lib/prawn/text/formatted.rb +5 -4
  77. data/lib/prawn/text/formatted/arranger.rb +292 -0
  78. data/lib/prawn/text/formatted/box.rb +52 -13
  79. data/lib/prawn/text/formatted/fragment.rb +37 -22
  80. data/lib/prawn/text/formatted/line_wrap.rb +286 -0
  81. data/lib/prawn/text/formatted/parser.rb +14 -6
  82. data/lib/prawn/text/formatted/wrap.rb +151 -0
  83. data/lib/prawn/utilities.rb +44 -0
  84. data/manual/basic_concepts/adding_pages.rb +27 -0
  85. data/manual/basic_concepts/basic_concepts.rb +34 -0
  86. data/manual/basic_concepts/creation.rb +39 -0
  87. data/manual/basic_concepts/cursor.rb +33 -0
  88. data/manual/basic_concepts/measurement.rb +25 -0
  89. data/manual/basic_concepts/origin.rb +38 -0
  90. data/manual/basic_concepts/other_cursor_helpers.rb +40 -0
  91. data/manual/bounding_box/bounding_box.rb +39 -0
  92. data/manual/bounding_box/bounds.rb +49 -0
  93. data/manual/bounding_box/canvas.rb +24 -0
  94. data/manual/bounding_box/creation.rb +23 -0
  95. data/manual/bounding_box/indentation.rb +46 -0
  96. data/manual/bounding_box/nesting.rb +45 -0
  97. data/manual/bounding_box/russian_boxes.rb +40 -0
  98. data/manual/bounding_box/stretchy.rb +31 -0
  99. data/manual/document_and_page_options/background.rb +27 -0
  100. data/manual/document_and_page_options/document_and_page_options.rb +31 -0
  101. data/manual/document_and_page_options/metadata.rb +23 -0
  102. data/manual/document_and_page_options/page_margins.rb +38 -0
  103. data/manual/document_and_page_options/page_size.rb +34 -0
  104. data/manual/example_file.rb +116 -0
  105. data/manual/example_helper.rb +411 -0
  106. data/manual/example_package.rb +53 -0
  107. data/manual/example_section.rb +46 -0
  108. data/manual/graphics/circle_and_ellipse.rb +22 -0
  109. data/manual/graphics/color.rb +24 -0
  110. data/manual/graphics/common_lines.rb +28 -0
  111. data/manual/graphics/fill_and_stroke.rb +42 -0
  112. data/manual/graphics/fill_rules.rb +37 -0
  113. data/manual/graphics/gradients.rb +37 -0
  114. data/manual/graphics/graphics.rb +58 -0
  115. data/manual/graphics/helper.rb +24 -0
  116. data/manual/graphics/line_width.rb +35 -0
  117. data/manual/graphics/lines_and_curves.rb +41 -0
  118. data/manual/graphics/polygon.rb +29 -0
  119. data/manual/graphics/rectangle.rb +21 -0
  120. data/manual/graphics/rotate.rb +28 -0
  121. data/manual/graphics/scale.rb +41 -0
  122. data/manual/graphics/soft_masks.rb +46 -0
  123. data/manual/graphics/stroke_cap.rb +31 -0
  124. data/manual/graphics/stroke_dash.rb +48 -0
  125. data/manual/graphics/stroke_join.rb +30 -0
  126. data/manual/graphics/translate.rb +29 -0
  127. data/manual/graphics/transparency.rb +35 -0
  128. data/manual/images/absolute_position.rb +23 -0
  129. data/manual/images/fit.rb +21 -0
  130. data/manual/images/horizontal.rb +25 -0
  131. data/manual/images/images.rb +40 -0
  132. data/manual/images/plain_image.rb +18 -0
  133. data/manual/images/scale.rb +22 -0
  134. data/manual/images/vertical.rb +28 -0
  135. data/manual/images/width_and_height.rb +25 -0
  136. data/manual/layout/boxes.rb +27 -0
  137. data/manual/layout/content.rb +25 -0
  138. data/manual/layout/layout.rb +28 -0
  139. data/manual/layout/simple_grid.rb +23 -0
  140. data/manual/manual/cover.rb +35 -0
  141. data/manual/manual/foreword.rb +85 -0
  142. data/manual/manual/how_to_read_this_manual.rb +41 -0
  143. data/manual/manual/manual.rb +35 -0
  144. data/manual/outline/add_subsection_to.rb +61 -0
  145. data/manual/outline/insert_section_after.rb +47 -0
  146. data/manual/outline/outline.rb +32 -0
  147. data/manual/outline/sections_and_pages.rb +67 -0
  148. data/manual/repeatable_content/page_numbering.rb +54 -0
  149. data/manual/repeatable_content/repeatable_content.rb +31 -0
  150. data/manual/repeatable_content/repeater.rb +55 -0
  151. data/manual/repeatable_content/stamp.rb +41 -0
  152. data/manual/security/encryption.rb +31 -0
  153. data/manual/security/permissions.rb +38 -0
  154. data/manual/security/security.rb +28 -0
  155. data/manual/syntax_highlight.rb +52 -0
  156. data/manual/table/basic_block.rb +53 -0
  157. data/manual/table/before_rendering_page.rb +26 -0
  158. data/manual/table/cell_border_lines.rb +24 -0
  159. data/manual/table/cell_borders_and_bg.rb +31 -0
  160. data/manual/table/cell_dimensions.rb +30 -0
  161. data/manual/table/cell_text.rb +38 -0
  162. data/manual/table/column_widths.rb +30 -0
  163. data/manual/table/content_and_subtables.rb +39 -0
  164. data/manual/table/creation.rb +27 -0
  165. data/manual/table/filtering.rb +36 -0
  166. data/manual/table/flow_and_header.rb +17 -0
  167. data/manual/table/image_cells.rb +33 -0
  168. data/manual/table/position.rb +29 -0
  169. data/manual/table/row_colors.rb +20 -0
  170. data/manual/table/span.rb +30 -0
  171. data/manual/table/style.rb +22 -0
  172. data/manual/table/table.rb +52 -0
  173. data/manual/table/width.rb +27 -0
  174. data/manual/templates/full_template.rb +25 -0
  175. data/manual/templates/page_template.rb +48 -0
  176. data/manual/templates/templates.rb +27 -0
  177. data/manual/text/alignment.rb +44 -0
  178. data/manual/text/color.rb +24 -0
  179. data/manual/text/column_box.rb +32 -0
  180. data/manual/text/fallback_fonts.rb +37 -0
  181. data/manual/text/font.rb +41 -0
  182. data/manual/text/font_size.rb +45 -0
  183. data/manual/text/font_style.rb +23 -0
  184. data/manual/text/formatted_callbacks.rb +60 -0
  185. data/manual/text/formatted_text.rb +54 -0
  186. data/manual/text/free_flowing_text.rb +51 -0
  187. data/manual/text/group.rb +29 -0
  188. data/manual/text/inline.rb +43 -0
  189. data/manual/text/kerning_and_character_spacing.rb +39 -0
  190. data/manual/text/leading.rb +25 -0
  191. data/manual/text/line_wrapping.rb +41 -0
  192. data/manual/text/paragraph_indentation.rb +26 -0
  193. data/manual/text/positioned_text.rb +38 -0
  194. data/manual/text/registering_families.rb +48 -0
  195. data/manual/text/rendering_and_color.rb +37 -0
  196. data/manual/text/right_to_left_text.rb +43 -0
  197. data/manual/text/rotation.rb +43 -0
  198. data/manual/text/single_usage.rb +37 -0
  199. data/manual/text/text.rb +75 -0
  200. data/manual/text/text_box_excess.rb +32 -0
  201. data/manual/text/text_box_extensions.rb +45 -0
  202. data/manual/text/text_box_overflow.rb +44 -0
  203. data/manual/text/utf8.rb +28 -0
  204. data/{examples/m17n → manual/text}/win_ansi_charset.rb +14 -10
  205. data/prawn.gemspec +18 -12
  206. data/spec/acceptance/png.rb +23 -0
  207. data/spec/annotations_spec.rb +16 -32
  208. data/spec/bounding_box_spec.rb +128 -15
  209. data/spec/cell_spec.rb +169 -38
  210. data/spec/column_box_spec.rb +33 -0
  211. data/spec/destinations_spec.rb +5 -5
  212. data/spec/document_spec.rb +150 -104
  213. data/spec/extensions/encoding_helpers.rb +10 -0
  214. data/spec/extensions/mocha.rb +1 -0
  215. data/spec/filters_spec.rb +34 -0
  216. data/spec/font_metric_cache_spec.rb +52 -0
  217. data/spec/font_spec.rb +183 -97
  218. data/spec/formatted_text_arranger_spec.rb +43 -43
  219. data/spec/formatted_text_box_spec.rb +30 -20
  220. data/spec/formatted_text_fragment_spec.rb +8 -8
  221. data/spec/graphics_spec.rb +158 -69
  222. data/spec/grid_spec.rb +15 -15
  223. data/spec/image_handler_spec.rb +42 -0
  224. data/spec/images_spec.rb +49 -24
  225. data/spec/inline_formatted_text_parser_spec.rb +73 -19
  226. data/spec/jpg_spec.rb +4 -4
  227. data/spec/line_wrap_spec.rb +26 -26
  228. data/spec/measurement_units_spec.rb +6 -6
  229. data/spec/name_tree_spec.rb +21 -21
  230. data/spec/object_store_spec.rb +39 -39
  231. data/spec/outline_spec.rb +93 -53
  232. data/spec/pdf_object_spec.rb +88 -86
  233. data/spec/png_spec.rb +31 -28
  234. data/spec/reference_spec.rb +32 -32
  235. data/spec/repeater_spec.rb +25 -11
  236. data/spec/security_spec.rb +44 -12
  237. data/spec/snapshot_spec.rb +8 -9
  238. data/spec/soft_mask_spec.rb +117 -0
  239. data/spec/span_spec.rb +10 -15
  240. data/spec/spec_helper.rb +25 -8
  241. data/spec/stamp_spec.rb +29 -30
  242. data/spec/stream_spec.rb +58 -0
  243. data/spec/stroke_styles_spec.rb +36 -18
  244. data/spec/table/span_dummy_spec.rb +17 -0
  245. data/spec/table_spec.rb +697 -105
  246. data/spec/template_spec.rb +108 -54
  247. data/spec/text_at_spec.rb +18 -17
  248. data/spec/text_box_spec.rb +111 -62
  249. data/spec/text_rendering_mode_spec.rb +5 -5
  250. data/spec/text_spacing_spec.rb +4 -4
  251. data/spec/text_spec.rb +57 -49
  252. data/spec/transparency_spec.rb +5 -5
  253. metadata +421 -213
  254. data/data/fonts/Action Man.dfont +0 -0
  255. data/data/fonts/Activa.ttf +0 -0
  256. data/data/fonts/Chalkboard.ttf +0 -0
  257. data/data/fonts/DejaVuSans.ttf +0 -0
  258. data/data/fonts/Dustismo_Roman.ttf +0 -0
  259. data/data/fonts/comicsans.ttf +0 -0
  260. data/data/fonts/gkai00mp.ttf +0 -0
  261. data/data/images/rails.dat +0 -0
  262. data/data/images/rails.png +0 -0
  263. data/examples/bounding_box/russian_boxes.rb +0 -37
  264. data/examples/example_helper.rb +0 -11
  265. data/examples/general/context_sensitive_headers.rb +0 -38
  266. data/examples/graphics/cmyk.rb +0 -13
  267. data/examples/graphics/gradient.rb +0 -23
  268. data/examples/graphics/png_types.rb +0 -23
  269. data/examples/graphics/remote_images.rb +0 -13
  270. data/examples/m17n/full_win_ansi_character_list.rb +0 -20
  271. data/examples/m17n/sjis.rb +0 -29
  272. data/examples/table/bill.rb +0 -54
  273. data/examples/table/header.rb +0 -15
  274. data/examples/text/font_calculations.rb +0 -92
  275. data/examples/text/hyphenation.rb +0 -45
  276. data/examples/text/indent_paragraphs.rb +0 -24
  277. data/lib/prawn/core.rb +0 -85
  278. data/lib/prawn/core/text/formatted/arranger.rb +0 -294
  279. data/lib/prawn/core/text/formatted/line_wrap.rb +0 -273
  280. data/lib/prawn/core/text/formatted/wrap.rb +0 -153
  281. data/lib/prawn/graphics/gradient.rb +0 -84
  282. data/lib/prawn/security/arcfour.rb +0 -51
@@ -5,7 +5,7 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
5
5
  describe "Core::Text::Formatted::Arranger#format_array" do
6
6
  it "should populate unconsumed array" do
7
7
  create_pdf
8
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
8
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
9
9
  array = [{ :text => "hello " },
10
10
  { :text => "world how ", :styles => [:bold] },
11
11
  { :text => "are", :styles => [:bold, :italic] },
@@ -20,7 +20,7 @@ describe "Core::Text::Formatted::Arranger#format_array" do
20
20
  end
21
21
  it "should split newlines into their own elements" do
22
22
  create_pdf
23
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
23
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
24
24
  array = [{ :text => "\nhello\nworld" }]
25
25
  arranger.format_array = array
26
26
  arranger.unconsumed[0].should == { :text => "\n" }
@@ -32,7 +32,7 @@ end
32
32
  describe "Core::Text::Formatted::Arranger#preview_next_string" do
33
33
  it "should not populate the consumed array" do
34
34
  create_pdf
35
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
35
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
36
36
  array = [{ :text => "hello" }]
37
37
  arranger.format_array = array
38
38
  arranger.preview_next_string
@@ -40,7 +40,7 @@ describe "Core::Text::Formatted::Arranger#preview_next_string" do
40
40
  end
41
41
  it "should not consumed array" do
42
42
  create_pdf
43
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
43
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
44
44
  array = [{ :text => "hello" }]
45
45
  arranger.format_array = array
46
46
  arranger.preview_next_string.should == "hello"
@@ -49,19 +49,19 @@ end
49
49
  describe "Core::Text::Formatted::Arranger#next_string" do
50
50
  before(:each) do
51
51
  create_pdf
52
- @arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
52
+ @arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
53
53
  array = [{ :text => "hello " },
54
54
  { :text => "world how ", :styles => [:bold] },
55
55
  { :text => "are", :styles => [:bold, :italic] },
56
56
  { :text => " you?" }]
57
57
  @arranger.format_array = array
58
58
  end
59
- it "should raise an error if called after a line was finalized and" +
59
+ it "should raise_error an error if called after a line was finalized and" +
60
60
  " before a new line was initialized" do
61
61
  @arranger.finalize_line
62
62
  lambda do
63
63
  @arranger.next_string
64
- end.should.raise(RuntimeError)
64
+ end.should raise_error(RuntimeError)
65
65
  end
66
66
  it "should populate consumed array" do
67
67
  while string = @arranger.next_string
@@ -75,7 +75,7 @@ describe "Core::Text::Formatted::Arranger#next_string" do
75
75
  end
76
76
  it "should populate current_format_state array" do
77
77
  create_pdf
78
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
78
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
79
79
  array = [{ :text => "hello " },
80
80
  { :text => "world how ", :styles => [:bold] },
81
81
  { :text => "are", :styles => [:bold, :italic] },
@@ -99,9 +99,9 @@ describe "Core::Text::Formatted::Arranger#next_string" do
99
99
  end
100
100
 
101
101
  describe "Core::Text::Formatted::Arranger#retrieve_fragment" do
102
- it "should raise an error if called before finalize_line was called" do
102
+ it "should raise_error an error if called before finalize_line was called" do
103
103
  create_pdf
104
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
104
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
105
105
  array = [{ :text => "hello " },
106
106
  { :text => "world how ", :styles => [:bold] },
107
107
  { :text => "are", :styles => [:bold, :italic] },
@@ -111,12 +111,12 @@ describe "Core::Text::Formatted::Arranger#retrieve_fragment" do
111
111
  end
112
112
  lambda do
113
113
  arranger.retrieve_fragment
114
- end.should.raise(RuntimeError)
114
+ end.should raise_error(RuntimeError)
115
115
  end
116
116
  it "should return the consumed fragments in order of consumption" +
117
117
  " and update" do
118
118
  create_pdf
119
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
119
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
120
120
  array = [{ :text => "hello " },
121
121
  { :text => "world how ", :styles => [:bold] },
122
122
  { :text => "are", :styles => [:bold, :italic] },
@@ -132,7 +132,7 @@ describe "Core::Text::Formatted::Arranger#retrieve_fragment" do
132
132
  end
133
133
  it "should never return a fragment whose text is an empty string" do
134
134
  create_pdf
135
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
135
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
136
136
  array = [{ :text => "hello\nworld\n\n\nhow are you?" },
137
137
  { :text => "\n" },
138
138
  { :text => "\n" },
@@ -147,12 +147,12 @@ describe "Core::Text::Formatted::Arranger#retrieve_fragment" do
147
147
  end
148
148
  arranger.finalize_line
149
149
  while fragment = arranger.retrieve_fragment
150
- fragment.text.should.not.be.empty
150
+ fragment.text.should_not be_empty
151
151
  end
152
152
  end
153
153
  it "should not alter the current font style" do
154
154
  create_pdf
155
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
155
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
156
156
  array = [{ :text => "hello " },
157
157
  { :text => "world how ", :styles => [:bold] },
158
158
  { :text => "are", :styles => [:bold, :italic] },
@@ -162,7 +162,7 @@ describe "Core::Text::Formatted::Arranger#retrieve_fragment" do
162
162
  end
163
163
  arranger.finalize_line
164
164
  arranger.retrieve_fragment
165
- arranger.current_format_state[:styles].should.be.nil
165
+ arranger.current_format_state[:styles].should be_nil
166
166
  end
167
167
  end
168
168
 
@@ -170,7 +170,7 @@ describe "Core::Text::Formatted::Arranger#update_last_string" do
170
170
  it "should update the last retrieved string with what actually fit on" +
171
171
  "the line and the list of unconsumed with what did not" do
172
172
  create_pdf
173
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
173
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
174
174
  array = [{ :text => "hello " },
175
175
  { :text => "world how ", :styles => [:bold] },
176
176
  { :text => "are", :styles => [:bold, :italic] },
@@ -186,7 +186,7 @@ describe "Core::Text::Formatted::Arranger#update_last_string" do
186
186
  end
187
187
  it "should set the format state to the previously processed fragment" do
188
188
  create_pdf
189
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
189
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
190
190
  array = [{ :text => "hello " },
191
191
  { :text => "world how ", :styles => [:bold] },
192
192
  { :text => "are", :styles => [:bold, :italic] },
@@ -201,7 +201,7 @@ describe "Core::Text::Formatted::Arranger#update_last_string" do
201
201
  context "when the entire string was used" do
202
202
  it "should not push empty string onto unconsumed" do
203
203
  create_pdf
204
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
204
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
205
205
  array = [{ :text => "hello " },
206
206
  { :text => "world how ", :styles => [:bold] },
207
207
  { :text => "are", :styles => [:bold, :italic] },
@@ -217,7 +217,7 @@ end
217
217
  describe "Core::Text::Formatted::Arranger#space_count" do
218
218
  before(:each) do
219
219
  create_pdf
220
- @arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
220
+ @arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
221
221
  array = [{ :text => "hello " },
222
222
  { :text => "world how ", :styles => [:bold] },
223
223
  { :text => "are", :styles => [:bold, :italic] },
@@ -226,10 +226,10 @@ describe "Core::Text::Formatted::Arranger#space_count" do
226
226
  while string = @arranger.next_string
227
227
  end
228
228
  end
229
- it "should raise an error if called before finalize_line was called" do
229
+ it "should raise_error an error if called before finalize_line was called" do
230
230
  lambda do
231
231
  @arranger.space_count
232
- end.should.raise(RuntimeError)
232
+ end.should raise_error(RuntimeError)
233
233
  end
234
234
  it "should return the total number of spaces in all fragments" do
235
235
  @arranger.finalize_line
@@ -240,7 +240,7 @@ describe "Core::Text::Formatted::Arranger#finalize_line" do
240
240
  it "should make it so that all trailing white space fragments " +
241
241
  "exclude trailing white space" do
242
242
  create_pdf
243
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
243
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
244
244
  array = [{ :text => "hello " },
245
245
  { :text => "world how ", :styles => [:bold] },
246
246
  { :text => " ", :styles => [:bold, :italic] }]
@@ -264,28 +264,28 @@ end
264
264
  describe "Core::Text::Formatted::Arranger#line_width" do
265
265
  before(:each) do
266
266
  create_pdf
267
- @arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
267
+ @arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
268
268
  array = [{ :text => "hello " },
269
269
  { :text => "world", :styles => [:bold] }]
270
270
  @arranger.format_array = array
271
271
  while string = @arranger.next_string
272
272
  end
273
273
  end
274
- it "should raise an error if called before finalize_line was called" do
274
+ it "should raise_error an error if called before finalize_line was called" do
275
275
  lambda do
276
276
  @arranger.line_width
277
- end.should.raise(RuntimeError)
277
+ end.should raise_error(RuntimeError)
278
278
  end
279
279
  it "should return the width of the complete line" do
280
280
  @arranger.finalize_line
281
- @arranger.line_width.should.be > 0
281
+ @arranger.line_width.should be > 0
282
282
  end
283
283
  end
284
284
 
285
285
  describe "Core::Text::Formatted::Arranger#line_width with character_spacing > 0" do
286
286
  it "should return a width greater than a line without a character_spacing" do
287
287
  create_pdf
288
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
288
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
289
289
 
290
290
  array = [{ :text => "hello " },
291
291
  { :text => "world", :styles => [:bold] }]
@@ -304,24 +304,24 @@ describe "Core::Text::Formatted::Arranger#line_width with character_spacing > 0"
304
304
  while string = arranger.next_string
305
305
  end
306
306
  arranger.finalize_line
307
- arranger.line_width.should.be > base_line_width
307
+ arranger.line_width.should be > base_line_width
308
308
  end
309
309
  end
310
310
 
311
311
  describe "Core::Text::Formatted::Arranger#line" do
312
312
  before(:each) do
313
313
  create_pdf
314
- @arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
314
+ @arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
315
315
  array = [{ :text => "hello " },
316
316
  { :text => "world", :styles => [:bold] }]
317
317
  @arranger.format_array = array
318
318
  while string = @arranger.next_string
319
319
  end
320
320
  end
321
- it "should raise an error if called before finalize_line was called" do
321
+ it "should raise_error an error if called before finalize_line was called" do
322
322
  lambda do
323
323
  @arranger.line
324
- end.should.raise(RuntimeError)
324
+ end.should raise_error(RuntimeError)
325
325
  end
326
326
  it "should return the complete line" do
327
327
  @arranger.finalize_line
@@ -332,7 +332,7 @@ end
332
332
  describe "Core::Text::Formatted::Arranger#unconsumed" do
333
333
  it "should return the original array if nothing was consumed" do
334
334
  create_pdf
335
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
335
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
336
336
  array = [{ :text => "hello " },
337
337
  { :text => "world how ", :styles => [:bold] },
338
338
  { :text => "are", :styles => [:bold, :italic] },
@@ -342,7 +342,7 @@ describe "Core::Text::Formatted::Arranger#unconsumed" do
342
342
  end
343
343
  it "should return an empty array if everything was consumed" do
344
344
  create_pdf
345
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
345
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
346
346
  array = [{ :text => "hello " },
347
347
  { :text => "world how ", :styles => [:bold] },
348
348
  { :text => "are", :styles => [:bold, :italic] },
@@ -355,9 +355,9 @@ describe "Core::Text::Formatted::Arranger#unconsumed" do
355
355
  end
356
356
 
357
357
  describe "Core::Text::Formatted::Arranger#finished" do
358
- it "should be false if anything was not printed" do
358
+ it "should be_false if anything was not printed" do
359
359
  create_pdf
360
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
360
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
361
361
  array = [{ :text => "hello " },
362
362
  { :text => "world how ", :styles => [:bold] },
363
363
  { :text => "are", :styles => [:bold, :italic] },
@@ -366,11 +366,11 @@ describe "Core::Text::Formatted::Arranger#finished" do
366
366
  while string = arranger.next_string
367
367
  end
368
368
  arranger.update_last_string(" you", "now?", nil)
369
- arranger.should.not.be.finished
369
+ arranger.should_not be_finished
370
370
  end
371
- it "should be false if everything was printed" do
371
+ it "should be_false if everything was printed" do
372
372
  create_pdf
373
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
373
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
374
374
  array = [{ :text => "hello " },
375
375
  { :text => "world how ", :styles => [:bold] },
376
376
  { :text => "are", :styles => [:bold, :italic] },
@@ -378,14 +378,14 @@ describe "Core::Text::Formatted::Arranger#finished" do
378
378
  arranger.format_array = array
379
379
  while string = arranger.next_string
380
380
  end
381
- arranger.should.be.finished
381
+ arranger.should be_finished
382
382
  end
383
383
  end
384
384
 
385
385
  describe "Core::Text::Formatted::Arranger.max_line_height" do
386
386
  it "should be the height of the maximum consumed fragment" do
387
387
  create_pdf
388
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
388
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
389
389
  array = [{ :text => "hello " },
390
390
  { :text => "world how ", :styles => [:bold] },
391
391
  { :text => "are", :styles => [:bold, :italic],
@@ -395,14 +395,14 @@ describe "Core::Text::Formatted::Arranger.max_line_height" do
395
395
  while string = arranger.next_string
396
396
  end
397
397
  arranger.finalize_line
398
- arranger.max_line_height.should.be.close(33.32, 0.0001)
398
+ arranger.max_line_height.should be_within(0.0001).of(33.32)
399
399
  end
400
400
  end
401
401
 
402
402
  describe "Core::Text::Formatted::Arranger#repack_unretrieved" do
403
403
  it "should restore part of the original string" do
404
404
  create_pdf
405
- arranger = Prawn::Core::Text::Formatted::Arranger.new(@pdf)
405
+ arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
406
406
  array = [{ :text => "hello " },
407
407
  { :text => "world how ", :styles => [:bold] },
408
408
  { :text => "are", :styles => [:bold, :italic] },
@@ -18,10 +18,10 @@ describe "Text::Formatted::Box wrapping" do
18
18
  text_box.text.should == "Hello\nWorld2"
19
19
  end
20
20
 
21
- it "should not raise Encoding::CompatibilityError when keeping a TTF and an " +
21
+ it "should not raise an Encoding::CompatibilityError when keeping a TTF and an " +
22
22
  "AFM font together" do
23
23
  ruby_19 do
24
- file = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
24
+ file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
25
25
  @pdf.font_families["Kai"] = {
26
26
  :normal => { :file => file, :font => "Kai" }
27
27
  }
@@ -30,9 +30,8 @@ describe "Text::Formatted::Box wrapping" do
30
30
  { :text => "再见", :font => "Kai"},
31
31
  { :text => "World" }]
32
32
  text_box = Prawn::Text::Formatted::Box.new(texts, :document => @pdf, :width => @pdf.width_of("Hello World"))
33
- lambda {
34
- text_box.render
35
- }.should.not.raise(Encoding::CompatibilityError)
33
+
34
+ text_box.render
36
35
  end
37
36
  end
38
37
 
@@ -79,12 +78,12 @@ describe "Text::Formatted::Box wrapping" do
79
78
  it "should properly handle empty slices using default encoding" do
80
79
  texts = [{ :text => "Noua Delineatio Geographica generalis | Apostolicarum peregrinationum | S FRANCISCI XAUERII | Indiarum & Iaponiæ Apostoli", :font => 'Courier', :size => 10 }]
81
80
  text_box = Prawn::Text::Formatted::Box.new(texts, :document => @pdf, :width => @pdf.width_of("Noua Delineatio Geographica gen"))
82
- assert_nothing_raised do
81
+ lambda {
83
82
  text_box.render
84
- end
83
+ }.should_not raise_error
85
84
  text_box.text.should == "Noua Delineatio Geographica\ngeneralis | Apostolicarum\nperegrinationum | S FRANCISCI\nXAUERII | Indiarum & Iaponi\346\nApostoli"
86
85
  end
87
-
86
+
88
87
  describe "Unicode" do
89
88
  before do
90
89
  if RUBY_VERSION < '1.9'
@@ -96,7 +95,7 @@ describe "Text::Formatted::Box wrapping" do
96
95
  Encoding.default_internal = Encoding::UTF_8
97
96
  end
98
97
  end
99
-
98
+
100
99
  after do
101
100
  if RUBY_VERSION < '1.9'
102
101
  $KCODE=@reset_value
@@ -109,9 +108,9 @@ describe "Text::Formatted::Box wrapping" do
109
108
  it "should properly handle empty slices using Unicode encoding" do
110
109
  texts = [{ :text => "Noua Delineatio Geographica generalis | Apostolicarum peregrinationum | S FRANCISCI XAUERII | Indiarum & Iaponiæ Apostoli", :font => 'Courier', :size => 10 }]
111
110
  text_box = Prawn::Text::Formatted::Box.new(texts, :document => @pdf, :width => @pdf.width_of("Noua Delineatio Geographica gen"))
112
- assert_nothing_raised do
111
+ lambda {
113
112
  text_box.render
114
- end
113
+ }.should_not raise_error
115
114
  text_box.text.should == "Noua Delineatio Geographica\ngeneralis | Apostolicarum\nperegrinationum | S FRANCISCI\nXAUERII | Indiarum & Iaponi\346\nApostoli"
116
115
  end
117
116
  end
@@ -121,7 +120,7 @@ describe "Text::Formatted::Box with :fallback_fonts option that includes" +
121
120
  "a Chinese font and set of Chinese glyphs not in the current font" do
122
121
  it "should change the font to the Chinese font for the Chinese glyphs" do
123
122
  create_pdf
124
- file = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
123
+ file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
125
124
  @pdf.font_families["Kai"] = {
126
125
  :normal => { :file => file, :font => "Kai" }
127
126
  }
@@ -149,7 +148,7 @@ describe "Text::Formatted::Box with :fallback_fonts option that includes" +
149
148
  "an AFM font and Win-Ansi glyph not in the current Chinese font" do
150
149
  it "should change the font to the AFM font for the Win-Ansi glyph" do
151
150
  create_pdf
152
- file = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
151
+ file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
153
152
  @pdf.font_families["Kai"] = {
154
153
  :normal => { :file => file, :font => "Kai" }
155
154
  }
@@ -178,7 +177,7 @@ describe "Text::Formatted::Box with :fallback_fonts option and fragment " +
178
177
  "level font" do
179
178
  it "should use the fragment level font except for glyphs not in that font" do
180
179
  create_pdf
181
- file = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
180
+ file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
182
181
  @pdf.font_families["Kai"] = {
183
182
  :normal => { :file => file, :font => "Kai" }
184
183
  }
@@ -205,7 +204,7 @@ end
205
204
  describe "Text::Formatted::Box" do
206
205
  before(:each) do
207
206
  create_pdf
208
- file = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
207
+ file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
209
208
  @pdf.font_families["Kai"] = {
210
209
  :normal => { :file => file, :font => "Kai" }
211
210
  }
@@ -397,7 +396,8 @@ describe "Text::Formatted::Box#render" do
397
396
  { :text => "callback now",
398
397
  :callback => [behind, in_front] }]
399
398
  text_box = Prawn::Text::Formatted::Box.new(array, :document => @pdf)
400
- lambda { text_box.render }.should.not.raise(NoMethodError)
399
+
400
+ text_box.render # trigger callbacks
401
401
  end
402
402
  it "should be able to set the font" do
403
403
  create_pdf
@@ -449,7 +449,7 @@ describe "Text::Formatted::Box#render" do
449
449
  text_box.render
450
450
  contents = PDF::Inspector::Text.analyze(@pdf.render)
451
451
  contents.font_settings[0][:size].should == 12
452
- contents.font_settings[1][:size].should.be.close(18 * 0.583, 0.0001)
452
+ contents.font_settings[1][:size].should be_within(0.0001).of(18 * 0.583)
453
453
  end
454
454
  it "should be able to set superscript" do
455
455
  create_pdf
@@ -460,7 +460,7 @@ describe "Text::Formatted::Box#render" do
460
460
  text_box.render
461
461
  contents = PDF::Inspector::Text.analyze(@pdf.render)
462
462
  contents.font_settings[0][:size].should == 12
463
- contents.font_settings[1][:size].should.be.close(18 * 0.583, 0.0001)
463
+ contents.font_settings[1][:size].should be_within(0.0001).of(18 * 0.583)
464
464
  end
465
465
  it "should be able to set compound bold and italic text" do
466
466
  create_pdf
@@ -512,6 +512,16 @@ describe "Text::Formatted::Box#render" do
512
512
  text_box = Prawn::Text::Formatted::Box.new(array, :document => @pdf)
513
513
  text_box.render
514
514
  end
515
+ it "should be able to add local actions" do
516
+ create_pdf
517
+ @pdf.expects(:link_annotation).with(kind_of(Array), :Border => [0,0,0],
518
+ :A => { :Type => :Action, :S => :Launch, :F => "../example.pdf", :NewWindow => true })
519
+ array = [{ :text => "click " },
520
+ { :text => "here", :local => "../example.pdf" },
521
+ { :text => " to open a local file" }]
522
+ text_box = Prawn::Text::Formatted::Box.new(array, :document => @pdf)
523
+ text_box.render
524
+ end
515
525
  it "should be able to set font size" do
516
526
  create_pdf
517
527
  array = [{ :text => "this contains " },
@@ -531,7 +541,7 @@ describe "Text::Formatted::Box#render" do
531
541
  text_box = Prawn::Text::Formatted::Box.new(array, :document => @pdf)
532
542
  text_box.render
533
543
  @pdf.font_size(24) do
534
- text_box.height.should.be.close(@pdf.font.ascender + @pdf.font.descender, 0.001)
544
+ text_box.height.should be_within(0.001).of(@pdf.font.ascender + @pdf.font.descender)
535
545
  end
536
546
  end
537
547
  it "should be able to set color via an rgb hex string" do
@@ -591,7 +601,7 @@ describe "Text::Formatted::Box#render with :align => :justify" do
591
601
  text_box = Prawn::Text::Formatted::Box.new(array, options)
592
602
  text_box.render
593
603
  contents = PDF::Inspector::Text.analyze(@pdf.render)
594
- contents.word_spacing.should.be.empty
604
+ contents.word_spacing.should be_empty
595
605
  end
596
606
  end
597
607