prawn 0.13.0 → 2.4.0

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 (348) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +10 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -16
  6. data/Rakefile +17 -39
  7. data/lib/prawn/document/bounding_box.rb +85 -42
  8. data/lib/prawn/document/column_box.rb +21 -11
  9. data/lib/prawn/document/internals.rb +40 -147
  10. data/lib/prawn/document/span.rb +25 -17
  11. data/lib/prawn/document.rb +286 -245
  12. data/lib/prawn/encoding.rb +68 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +204 -155
  15. data/lib/prawn/font_metric_cache.rb +25 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +7 -13
  18. data/lib/prawn/fonts/otf.rb +11 -0
  19. data/lib/prawn/fonts/ttc.rb +36 -0
  20. data/lib/prawn/{font → fonts}/ttf.rb +142 -80
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +6 -5
  23. data/lib/prawn/graphics/color.rb +47 -44
  24. data/lib/prawn/graphics/dash.rb +30 -13
  25. data/lib/prawn/graphics/join_style.rb +13 -6
  26. data/lib/prawn/graphics/patterns.rb +221 -90
  27. data/lib/prawn/graphics/transformation.rb +21 -12
  28. data/lib/prawn/graphics/transparency.rb +21 -17
  29. data/lib/prawn/graphics.rb +155 -128
  30. data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
  31. data/lib/prawn/image_handler.rb +16 -2
  32. data/lib/prawn/images/image.rb +4 -2
  33. data/lib/prawn/images/jpg.rb +39 -30
  34. data/lib/prawn/images/png.rb +132 -169
  35. data/lib/prawn/images.rb +70 -62
  36. data/lib/prawn/measurement_extensions.rb +15 -10
  37. data/lib/prawn/measurements.rb +22 -23
  38. data/lib/prawn/outline.rb +301 -13
  39. data/lib/prawn/repeater.rb +19 -17
  40. data/lib/prawn/security/arcfour.rb +54 -0
  41. data/lib/prawn/security.rb +108 -86
  42. data/lib/prawn/soft_mask.rb +40 -41
  43. data/lib/prawn/stamp.rb +29 -12
  44. data/lib/prawn/text/box.rb +27 -29
  45. data/lib/prawn/text/formatted/arranger.rb +110 -67
  46. data/lib/prawn/text/formatted/box.rb +233 -165
  47. data/lib/prawn/text/formatted/fragment.rb +27 -27
  48. data/lib/prawn/text/formatted/line_wrap.rb +137 -97
  49. data/lib/prawn/text/formatted/parser.rb +149 -127
  50. data/lib/prawn/text/formatted/wrap.rb +57 -37
  51. data/lib/prawn/text/formatted.rb +6 -4
  52. data/lib/prawn/text.rb +105 -73
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +11 -21
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +42 -68
  58. data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
  59. data/manual/basic_concepts/adding_pages.rb +9 -10
  60. data/manual/basic_concepts/basic_concepts.rb +33 -24
  61. data/manual/basic_concepts/creation.rb +10 -11
  62. data/manual/basic_concepts/cursor.rb +9 -10
  63. data/manual/basic_concepts/measurement.rb +10 -11
  64. data/manual/basic_concepts/origin.rb +8 -9
  65. data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
  66. data/manual/basic_concepts/view.rb +48 -0
  67. data/manual/bounding_box/bounding_box.rb +31 -29
  68. data/manual/bounding_box/bounds.rb +17 -18
  69. data/manual/bounding_box/canvas.rb +8 -9
  70. data/manual/bounding_box/creation.rb +8 -9
  71. data/manual/bounding_box/indentation.rb +22 -23
  72. data/manual/bounding_box/nesting.rb +32 -25
  73. data/manual/bounding_box/russian_boxes.rb +19 -19
  74. data/manual/bounding_box/stretchy.rb +18 -20
  75. data/manual/contents.rb +35 -0
  76. data/manual/cover.rb +43 -0
  77. data/manual/document_and_page_options/background.rb +16 -14
  78. data/manual/document_and_page_options/document_and_page_options.rb +26 -23
  79. data/manual/document_and_page_options/metadata.rb +21 -19
  80. data/manual/document_and_page_options/page_margins.rb +20 -22
  81. data/manual/document_and_page_options/page_size.rb +15 -15
  82. data/manual/document_and_page_options/print_scaling.rb +23 -0
  83. data/manual/example_helper.rb +5 -408
  84. data/manual/graphics/blend_mode.rb +52 -0
  85. data/manual/graphics/circle_and_ellipse.rb +8 -9
  86. data/manual/graphics/color.rb +11 -13
  87. data/manual/graphics/common_lines.rb +13 -12
  88. data/manual/graphics/fill_and_stroke.rb +10 -11
  89. data/manual/graphics/fill_rules.rb +13 -12
  90. data/manual/graphics/gradients.rb +28 -22
  91. data/manual/graphics/graphics.rb +52 -46
  92. data/manual/graphics/helper.rb +20 -10
  93. data/manual/graphics/line_width.rb +13 -12
  94. data/manual/graphics/lines_and_curves.rb +13 -14
  95. data/manual/graphics/polygon.rb +10 -12
  96. data/manual/graphics/rectangle.rb +7 -8
  97. data/manual/graphics/rotate.rb +9 -12
  98. data/manual/graphics/scale.rb +19 -18
  99. data/manual/graphics/soft_masks.rb +5 -7
  100. data/manual/graphics/stroke_cap.rb +10 -11
  101. data/manual/graphics/stroke_dash.rb +16 -17
  102. data/manual/graphics/stroke_join.rb +10 -11
  103. data/manual/graphics/translate.rb +13 -13
  104. data/manual/graphics/transparency.rb +11 -13
  105. data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
  106. data/manual/images/absolute_position.rb +9 -10
  107. data/manual/images/fit.rb +9 -10
  108. data/manual/images/horizontal.rb +13 -14
  109. data/manual/images/images.rb +31 -30
  110. data/manual/images/plain_image.rb +6 -7
  111. data/manual/images/scale.rb +12 -13
  112. data/manual/images/vertical.rb +19 -17
  113. data/manual/images/width_and_height.rb +13 -14
  114. data/manual/layout/boxes.rb +14 -15
  115. data/manual/layout/content.rb +12 -13
  116. data/manual/layout/layout.rb +19 -20
  117. data/manual/layout/simple_grid.rb +8 -9
  118. data/manual/outline/add_subsection_to.rb +26 -27
  119. data/manual/outline/insert_section_after.rb +19 -20
  120. data/manual/outline/outline.rb +23 -22
  121. data/manual/outline/sections_and_pages.rb +24 -25
  122. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  123. data/manual/repeatable_content/page_numbering.rb +20 -19
  124. data/manual/repeatable_content/repeatable_content.rb +26 -22
  125. data/manual/repeatable_content/repeater.rb +18 -19
  126. data/manual/repeatable_content/stamp.rb +18 -19
  127. data/manual/security/encryption.rb +8 -11
  128. data/manual/security/permissions.rb +20 -15
  129. data/manual/security/security.rb +20 -20
  130. data/manual/table.rb +16 -0
  131. data/manual/text/alignment.rb +17 -18
  132. data/manual/text/color.rb +13 -13
  133. data/manual/text/column_box.rb +10 -12
  134. data/manual/text/fallback_fonts.rb +29 -25
  135. data/manual/text/font.rb +17 -18
  136. data/manual/text/font_size.rb +21 -22
  137. data/manual/text/font_style.rb +12 -10
  138. data/manual/text/formatted_callbacks.rb +36 -26
  139. data/manual/text/formatted_text.rb +41 -34
  140. data/manual/text/free_flowing_text.rb +28 -29
  141. data/manual/text/inline.rb +23 -26
  142. data/manual/text/kerning_and_character_spacing.rb +20 -21
  143. data/manual/text/leading.rb +10 -11
  144. data/manual/text/line_wrapping.rb +40 -21
  145. data/manual/text/paragraph_indentation.rb +17 -12
  146. data/manual/text/positioned_text.rb +19 -20
  147. data/manual/text/registering_families.rb +33 -30
  148. data/manual/text/rendering_and_color.rb +11 -12
  149. data/manual/text/right_to_left_text.rb +31 -20
  150. data/manual/text/rotation.rb +36 -27
  151. data/manual/text/single_usage.rb +13 -14
  152. data/manual/text/text.rb +62 -62
  153. data/manual/text/text_box_excess.rb +22 -19
  154. data/manual/text/text_box_extensions.rb +21 -18
  155. data/manual/text/text_box_overflow.rb +28 -21
  156. data/manual/text/utf8.rb +16 -17
  157. data/manual/text/win_ansi_charset.rb +29 -26
  158. data/prawn.gemspec +45 -43
  159. data/spec/extensions/encoding_helpers.rb +4 -3
  160. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  161. data/spec/prawn/document/column_box_spec.rb +75 -0
  162. data/spec/prawn/document/security_spec.rb +176 -0
  163. data/spec/prawn/document_annotations_spec.rb +76 -0
  164. data/spec/prawn/document_destinations_spec.rb +15 -0
  165. data/spec/prawn/document_grid_spec.rb +99 -0
  166. data/spec/prawn/document_reference_spec.rb +27 -0
  167. data/spec/prawn/document_span_spec.rb +44 -0
  168. data/spec/prawn/document_spec.rb +805 -0
  169. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  170. data/spec/prawn/font_spec.rb +544 -0
  171. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  172. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  173. data/spec/prawn/graphics_spec.rb +872 -0
  174. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  175. data/spec/prawn/image_handler_spec.rb +53 -0
  176. data/spec/prawn/images/jpg_spec.rb +20 -0
  177. data/spec/prawn/images/png_spec.rb +283 -0
  178. data/spec/prawn/images_spec.rb +229 -0
  179. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  180. data/spec/prawn/outline_spec.rb +512 -0
  181. data/spec/prawn/repeater_spec.rb +166 -0
  182. data/spec/prawn/soft_mask_spec.rb +74 -0
  183. data/spec/prawn/stamp_spec.rb +173 -0
  184. data/spec/prawn/text/box_spec.rb +1110 -0
  185. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  186. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  187. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  188. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  189. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  190. data/spec/prawn/text_draw_text_spec.rb +150 -0
  191. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  192. data/spec/prawn/text_spacing_spec.rb +95 -0
  193. data/spec/prawn/text_spec.rb +603 -0
  194. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  195. data/spec/prawn/transformation_stack_spec.rb +66 -0
  196. data/spec/prawn/view_spec.rb +63 -0
  197. data/spec/prawn_manual_spec.rb +35 -0
  198. data/spec/spec_helper.rb +22 -21
  199. data.tar.gz.sig +0 -0
  200. metadata +168 -307
  201. metadata.gz.sig +0 -0
  202. data/README.md +0 -109
  203. data/data/encodings/win_ansi.txt +0 -29
  204. data/data/images/16bit.alpha +0 -0
  205. data/data/images/16bit.dat +0 -0
  206. data/data/images/16bit.png +0 -0
  207. data/data/images/arrow.png +0 -0
  208. data/data/images/arrow2.png +0 -0
  209. data/data/images/barcode_issue.png +0 -0
  210. data/data/images/dice.alpha +0 -0
  211. data/data/images/dice.dat +0 -0
  212. data/data/images/dice.png +0 -0
  213. data/data/images/dice_interlaced.png +0 -0
  214. data/data/images/indexed_color.dat +0 -0
  215. data/data/images/indexed_color.png +0 -0
  216. data/data/images/letterhead.jpg +0 -0
  217. data/data/images/page_white_text.alpha +0 -0
  218. data/data/images/page_white_text.dat +0 -0
  219. data/data/images/page_white_text.png +0 -0
  220. data/data/images/pigs.jpg +0 -0
  221. data/data/images/prawn.png +0 -0
  222. data/data/images/ruport.png +0 -0
  223. data/data/images/ruport_data.dat +0 -0
  224. data/data/images/ruport_transparent.png +0 -0
  225. data/data/images/ruport_type0.png +0 -0
  226. data/data/images/stef.jpg +0 -0
  227. data/data/images/tru256.bmp +0 -0
  228. data/data/images/web-links.dat +0 -1
  229. data/data/images/web-links.png +0 -0
  230. data/data/pdfs/complex_template.pdf +0 -0
  231. data/data/pdfs/contains_ttf_font.pdf +0 -0
  232. data/data/pdfs/encrypted.pdf +0 -0
  233. data/data/pdfs/form.pdf +1 -819
  234. data/data/pdfs/hexagon.pdf +0 -61
  235. data/data/pdfs/indirect_reference.pdf +0 -86
  236. data/data/pdfs/multipage_template.pdf +0 -127
  237. data/data/pdfs/nested_pages.pdf +0 -118
  238. data/data/pdfs/page_without_mediabox.pdf +0 -193
  239. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  240. data/data/pdfs/two_hexagons.pdf +0 -90
  241. data/data/pdfs/version_1_6.pdf +0 -61
  242. data/data/shift_jis_text.txt +0 -1
  243. data/lib/pdf/core/annotations.rb +0 -60
  244. data/lib/pdf/core/byte_string.rb +0 -9
  245. data/lib/pdf/core/destinations.rb +0 -90
  246. data/lib/pdf/core/document_state.rb +0 -78
  247. data/lib/pdf/core/filter_list.rb +0 -51
  248. data/lib/pdf/core/filters.rb +0 -36
  249. data/lib/pdf/core/graphics_state.rb +0 -68
  250. data/lib/pdf/core/literal_string.rb +0 -16
  251. data/lib/pdf/core/name_tree.rb +0 -177
  252. data/lib/pdf/core/object_store.rb +0 -320
  253. data/lib/pdf/core/outline.rb +0 -315
  254. data/lib/pdf/core/page.rb +0 -212
  255. data/lib/pdf/core/page_geometry.rb +0 -126
  256. data/lib/pdf/core/pdf_object.rb +0 -124
  257. data/lib/pdf/core/reference.rb +0 -103
  258. data/lib/pdf/core/stream.rb +0 -98
  259. data/lib/pdf/core/text.rb +0 -275
  260. data/lib/pdf/core.rb +0 -35
  261. data/lib/prawn/compatibility.rb +0 -91
  262. data/lib/prawn/document/graphics_state.rb +0 -73
  263. data/lib/prawn/document/snapshot.rb +0 -89
  264. data/lib/prawn/font/afm.rb +0 -203
  265. data/lib/prawn/layout.rb +0 -20
  266. data/lib/prawn/table/cell/image.rb +0 -70
  267. data/lib/prawn/table/cell/in_table.rb +0 -27
  268. data/lib/prawn/table/cell/span_dummy.rb +0 -92
  269. data/lib/prawn/table/cell/subtable.rb +0 -65
  270. data/lib/prawn/table/cell/text.rb +0 -153
  271. data/lib/prawn/table/cell.rb +0 -770
  272. data/lib/prawn/table/cells.rb +0 -295
  273. data/lib/prawn/table.rb +0 -643
  274. data/manual/example_file.rb +0 -116
  275. data/manual/example_package.rb +0 -53
  276. data/manual/example_section.rb +0 -46
  277. data/manual/manual/cover.rb +0 -35
  278. data/manual/manual/foreword.rb +0 -85
  279. data/manual/manual/manual.rb +0 -35
  280. data/manual/syntax_highlight.rb +0 -52
  281. data/manual/table/basic_block.rb +0 -53
  282. data/manual/table/before_rendering_page.rb +0 -26
  283. data/manual/table/cell_border_lines.rb +0 -24
  284. data/manual/table/cell_borders_and_bg.rb +0 -31
  285. data/manual/table/cell_dimensions.rb +0 -30
  286. data/manual/table/cell_text.rb +0 -38
  287. data/manual/table/column_widths.rb +0 -30
  288. data/manual/table/content_and_subtables.rb +0 -39
  289. data/manual/table/creation.rb +0 -27
  290. data/manual/table/filtering.rb +0 -36
  291. data/manual/table/flow_and_header.rb +0 -17
  292. data/manual/table/image_cells.rb +0 -33
  293. data/manual/table/position.rb +0 -29
  294. data/manual/table/row_colors.rb +0 -20
  295. data/manual/table/span.rb +0 -30
  296. data/manual/table/style.rb +0 -22
  297. data/manual/table/table.rb +0 -52
  298. data/manual/table/width.rb +0 -27
  299. data/manual/templates/full_template.rb +0 -25
  300. data/manual/templates/page_template.rb +0 -48
  301. data/manual/templates/templates.rb +0 -27
  302. data/manual/text/group.rb +0 -29
  303. data/spec/acceptance/png.rb +0 -23
  304. data/spec/annotations_spec.rb +0 -74
  305. data/spec/bounding_box_spec.rb +0 -493
  306. data/spec/cell_spec.rb +0 -628
  307. data/spec/column_box_spec.rb +0 -33
  308. data/spec/destinations_spec.rb +0 -15
  309. data/spec/document_spec.rb +0 -761
  310. data/spec/extensions/mocha.rb +0 -44
  311. data/spec/filters_spec.rb +0 -34
  312. data/spec/font_metric_cache_spec.rb +0 -52
  313. data/spec/font_spec.rb +0 -464
  314. data/spec/formatted_text_arranger_spec.rb +0 -421
  315. data/spec/formatted_text_box_spec.rb +0 -650
  316. data/spec/formatted_text_fragment_spec.rb +0 -298
  317. data/spec/graphics_spec.rb +0 -651
  318. data/spec/grid_spec.rb +0 -85
  319. data/spec/image_handler_spec.rb +0 -42
  320. data/spec/images_spec.rb +0 -157
  321. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  322. data/spec/jpg_spec.rb +0 -25
  323. data/spec/line_wrap_spec.rb +0 -333
  324. data/spec/measurement_units_spec.rb +0 -23
  325. data/spec/name_tree_spec.rb +0 -112
  326. data/spec/object_store_spec.rb +0 -170
  327. data/spec/outline_spec.rb +0 -448
  328. data/spec/pdf_object_spec.rb +0 -172
  329. data/spec/png_spec.rb +0 -240
  330. data/spec/reference_spec.rb +0 -82
  331. data/spec/repeater_spec.rb +0 -158
  332. data/spec/security_spec.rb +0 -158
  333. data/spec/snapshot_spec.rb +0 -186
  334. data/spec/soft_mask_spec.rb +0 -117
  335. data/spec/span_spec.rb +0 -44
  336. data/spec/stamp_spec.rb +0 -158
  337. data/spec/stream_spec.rb +0 -58
  338. data/spec/stroke_styles_spec.rb +0 -211
  339. data/spec/table/span_dummy_spec.rb +0 -17
  340. data/spec/table_spec.rb +0 -1355
  341. data/spec/template_spec.rb +0 -351
  342. data/spec/text_at_spec.rb +0 -130
  343. data/spec/text_box_spec.rb +0 -1030
  344. data/spec/text_rendering_mode_spec.rb +0 -45
  345. data/spec/text_spacing_spec.rb +0 -93
  346. data/spec/text_spec.rb +0 -425
  347. data/spec/text_with_inline_formatting_spec.rb +0 -35
  348. data/spec/transparency_spec.rb +0 -89
@@ -1,298 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
-
5
- describe "Text::Formatted::Fragment#space_count" do
6
- it "should return the number of spaces in the fragment" do
7
- create_pdf
8
- format_state = { }
9
- fragment = Prawn::Text::Formatted::Fragment.new("hello world ",
10
- format_state,
11
- @pdf)
12
- fragment.space_count.should == 2
13
- end
14
- it "should exclude trailing spaces from the count when " +
15
- ":exclude_trailing_white_space => true" do
16
- create_pdf
17
- format_state = { :exclude_trailing_white_space => true }
18
- fragment = Prawn::Text::Formatted::Fragment.new("hello world ",
19
- format_state,
20
- @pdf)
21
- fragment.space_count.should == 1
22
- end
23
- end
24
-
25
- describe "Text::Formatted::Fragment#include_trailing_white_space!" do
26
- it "should make the fragment include trailing white space" do
27
- create_pdf
28
- format_state = { :exclude_trailing_white_space => true }
29
- fragment = Prawn::Text::Formatted::Fragment.new("hello world ",
30
- format_state,
31
- @pdf)
32
- fragment.space_count.should == 1
33
- fragment.include_trailing_white_space!
34
- fragment.space_count.should == 2
35
- end
36
- end
37
-
38
- describe "Text::Formatted::Fragment#text" do
39
- it "should return the fragment text" do
40
- create_pdf
41
- format_state = { }
42
- fragment = Prawn::Text::Formatted::Fragment.new("hello world ",
43
- format_state,
44
- @pdf)
45
- fragment.text.should == "hello world "
46
- end
47
- it "should return the fragment text without trailing spaces when " +
48
- ":exclude_trailing_white_space => true" do
49
- create_pdf
50
- format_state = { :exclude_trailing_white_space => true }
51
- fragment = Prawn::Text::Formatted::Fragment.new("hello world ",
52
- format_state,
53
- @pdf)
54
- fragment.text.should == "hello world"
55
- end
56
- end
57
-
58
- describe "Text::Formatted::Fragment#word_spacing=" do
59
- before(:each) do
60
- create_pdf
61
- format_state = { :styles => [:bold, :italic],
62
- :color => nil,
63
- :link => nil,
64
- :anchor => nil,
65
- :font => nil,
66
- :size => nil }
67
- @fragment = Prawn::Text::Formatted::Fragment.new("hello world",
68
- format_state,
69
- @pdf)
70
- @fragment.width = 100
71
- @fragment.left = 50
72
- @fragment.baseline = 200
73
- @fragment.line_height = 27
74
- @fragment.descender = 7
75
- @fragment.ascender = 17
76
- @fragment.word_spacing = 10
77
- end
78
-
79
- it "should account for word_spacing in #width" do
80
- @fragment.width.should == 110
81
- end
82
- it "should account for word_spacing in #bounding_box" do
83
- target_box = [50, 193, 160, 217]
84
- @fragment.bounding_box.should == target_box
85
- end
86
- it "should account for word_spacing in #absolute_bounding_box" do
87
- target_box = [50, 193, 160, 217]
88
- target_box[0] += @pdf.bounds.absolute_left
89
- target_box[1] += @pdf.bounds.absolute_bottom
90
- target_box[2] += @pdf.bounds.absolute_left
91
- target_box[3] += @pdf.bounds.absolute_bottom
92
- @fragment.absolute_bounding_box.should == target_box
93
- end
94
- it "should account for word_spacing in #underline_points" do
95
- y = 198.75
96
- target_points = [[50, y], [160, y]]
97
- @fragment.underline_points.should == target_points
98
- end
99
- it "should account for word_spacing in #strikethrough_points" do
100
- y = 200 + @fragment.ascender * 0.3
101
- target_points = [[50, y], [160, y]]
102
- @fragment.strikethrough_points.should == target_points
103
- end
104
- end
105
-
106
- describe "Text::Formatted::Fragment" do
107
- before(:each) do
108
- create_pdf
109
- format_state = { :styles => [:bold, :italic],
110
- :color => nil,
111
- :link => nil,
112
- :anchor => nil,
113
- :font => nil,
114
- :size => nil }
115
- @fragment = Prawn::Text::Formatted::Fragment.new("hello world",
116
- format_state,
117
- @pdf)
118
- @fragment.width = 100
119
- @fragment.left = 50
120
- @fragment.baseline = 200
121
- @fragment.line_height = 27
122
- @fragment.descender = 7
123
- @fragment.ascender = 17
124
- end
125
-
126
- describe "#width" do
127
- it "should return the width" do
128
- @fragment.width.should == 100
129
- end
130
- end
131
-
132
- describe "#styles" do
133
- it "should return the styles array" do
134
- @fragment.styles.should == [:bold, :italic]
135
- end
136
- it "should never return nil" do
137
- format_state = { :styles => nil,
138
- :color => nil,
139
- :link => nil,
140
- :anchor => nil,
141
- :font => nil,
142
- :size => nil }
143
- fragment = Prawn::Text::Formatted::Fragment.new("hello world",
144
- format_state,
145
- @pdf)
146
- fragment.styles.should == []
147
- end
148
- end
149
-
150
- describe "#line_height" do
151
- it "should return the line_height" do
152
- @fragment.line_height.should == 27
153
- end
154
- end
155
-
156
- describe "#ascender" do
157
- it "should return the ascender" do
158
- @fragment.ascender.should == 17
159
- end
160
- end
161
-
162
- describe "#descender" do
163
- it "should return the descender" do
164
- @fragment.descender.should == 7
165
- end
166
- end
167
-
168
- describe "#y_offset" do
169
- it "should be zero" do
170
- @fragment.y_offset.should == 0
171
- end
172
- end
173
-
174
- describe "#bounding_box" do
175
- it "should return the bounding box surrounding the fragment" do
176
- target_box = [50, 193, 150, 217]
177
- @fragment.bounding_box.should == target_box
178
- end
179
- end
180
-
181
- describe "#absolute_bounding_box" do
182
- it "should return the bounding box surrounding the fragment" +
183
- " in absolute coordinates" do
184
- target_box = [50, 193, 150, 217]
185
- target_box[0] += @pdf.bounds.absolute_left
186
- target_box[1] += @pdf.bounds.absolute_bottom
187
- target_box[2] += @pdf.bounds.absolute_left
188
- target_box[3] += @pdf.bounds.absolute_bottom
189
- @fragment.absolute_bounding_box.should == target_box
190
- end
191
- end
192
-
193
- describe "#underline_points" do
194
- it "should define a line under the fragment" do
195
- y = 198.75
196
- target_points = [[50, y], [150, y]]
197
- @fragment.underline_points.should == target_points
198
- end
199
- end
200
-
201
- describe "#strikethrough_points" do
202
- it "should define a line through the fragment" do
203
- y = 200 + @fragment.ascender * 0.3
204
- target_points = [[50, y], [150, y]]
205
- @fragment.strikethrough_points.should == target_points
206
- end
207
- end
208
- end
209
-
210
- describe "Text::Formatted::Fragment that is a subscript" do
211
- before(:each) do
212
- create_pdf
213
- format_state = { :styles => [:subscript],
214
- :color => nil,
215
- :link => nil,
216
- :anchor => nil,
217
- :font => nil,
218
- :size => nil }
219
- @fragment = Prawn::Text::Formatted::Fragment.new("hello world",
220
- format_state,
221
- @pdf)
222
- @fragment.line_height = 27
223
- @fragment.descender = 7
224
- @fragment.ascender = 17
225
- end
226
- describe "#subscript?" do
227
- it "should be_true" do
228
- @fragment.should be_subscript
229
- end
230
- end
231
- describe "#y_offset" do
232
- it "should return a negative value" do
233
- @fragment.y_offset.should be < 0
234
- end
235
- end
236
- end
237
-
238
- describe "Text::Formatted::Fragment that is a superscript" do
239
- before(:each) do
240
- create_pdf
241
- format_state = { :styles => [:superscript],
242
- :color => nil,
243
- :link => nil,
244
- :anchor => nil,
245
- :font => nil,
246
- :size => nil }
247
- @fragment = Prawn::Text::Formatted::Fragment.new("hello world",
248
- format_state,
249
- @pdf)
250
- @fragment.line_height = 27
251
- @fragment.descender = 7
252
- @fragment.ascender = 17
253
- end
254
- describe "#superscript?" do
255
- it "should be_true" do
256
- @fragment.should be_superscript
257
- end
258
- end
259
- describe "#y_offset" do
260
- it "should return a positive value" do
261
- @fragment.y_offset.should be > 0
262
- end
263
- end
264
- end
265
-
266
- describe "Text::Formatted::Fragment with :direction => :rtl" do
267
- it "#text should be reversed" do
268
- create_pdf
269
- format_state = { :direction => :rtl }
270
- fragment = Prawn::Text::Formatted::Fragment.new("hello world",
271
- format_state,
272
- @pdf)
273
- fragment.text.should == "dlrow olleh"
274
- end
275
- end
276
-
277
- describe "Text::Formatted::Fragment default_direction=" do
278
- it "should set the direction if there is no fragment level direction " +
279
- "specification" do
280
- create_pdf
281
- format_state = { }
282
- fragment = Prawn::Text::Formatted::Fragment.new("hello world",
283
- format_state,
284
- @pdf)
285
- fragment.default_direction = :rtl
286
- fragment.direction.should == :rtl
287
- end
288
- it "should not set the direction if there is a fragment level direction " +
289
- "specification" do
290
- create_pdf
291
- format_state = { :direction => :rtl }
292
- fragment = Prawn::Text::Formatted::Fragment.new("hello world",
293
- format_state,
294
- @pdf)
295
- fragment.default_direction = :ltr
296
- fragment.direction.should == :rtl
297
- end
298
- end