prawn-graph 0.0.1

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 (317) hide show
  1. data/README.markdown +3 -0
  2. data/Rakefile +34 -0
  3. data/examples/example_helper.rb +10 -0
  4. data/examples/graph/advanced_bar_chart.rb +22 -0
  5. data/examples/graph/bar_chart.rb +18 -0
  6. data/examples/graph/line_chart.rb +18 -0
  7. data/lib/prawn/graph.rb +94 -0
  8. data/lib/prawn/graph/bar.rb +172 -0
  9. data/lib/prawn/graph/chart.rb +4 -0
  10. data/lib/prawn/graph/errors.rb +6 -0
  11. data/lib/prawn/graph/grid.rb +43 -0
  12. data/lib/prawn/graph/line.rb +43 -0
  13. data/vendor/prawn-core/COPYING +340 -0
  14. data/vendor/prawn-core/HACKING +46 -0
  15. data/vendor/prawn-core/LICENSE +56 -0
  16. data/vendor/prawn-core/README +138 -0
  17. data/vendor/prawn-core/Rakefile +75 -0
  18. data/vendor/prawn-core/bench/afm_text_bench.rb +18 -0
  19. data/vendor/prawn-core/bench/png_type_6.rb +15 -0
  20. data/vendor/prawn-core/bench/ttf_text_bench.rb +19 -0
  21. data/vendor/prawn-core/bugs/indentation_across_pagebreaks.rb +15 -0
  22. data/vendor/prawn-core/bugs/resolved/canvas_sets_y_to_0.rb +15 -0
  23. data/vendor/prawn-core/bugs/resolved/png_barcode_issue.rb +11 -0
  24. data/vendor/prawn-core/bugs/resolved/transaction_page_number_issue_79.rb +21 -0
  25. data/vendor/prawn-core/bugs/resolved/ttf_fails_in_transactions.rb +24 -0
  26. data/vendor/prawn-core/data/encodings/win_ansi.txt +29 -0
  27. data/vendor/prawn-core/data/fonts/Action Man.dfont +0 -0
  28. data/vendor/prawn-core/data/fonts/Activa.ttf +0 -0
  29. data/vendor/prawn-core/data/fonts/Chalkboard.ttf +0 -0
  30. data/vendor/prawn-core/data/fonts/Courier-Bold.afm +342 -0
  31. data/vendor/prawn-core/data/fonts/Courier-BoldOblique.afm +342 -0
  32. data/vendor/prawn-core/data/fonts/Courier-Oblique.afm +342 -0
  33. data/vendor/prawn-core/data/fonts/Courier.afm +342 -0
  34. data/vendor/prawn-core/data/fonts/DejaVuSans.ttf +0 -0
  35. data/vendor/prawn-core/data/fonts/Dustismo_Roman.ttf +0 -0
  36. data/vendor/prawn-core/data/fonts/Helvetica-Bold.afm +2827 -0
  37. data/vendor/prawn-core/data/fonts/Helvetica-BoldOblique.afm +2827 -0
  38. data/vendor/prawn-core/data/fonts/Helvetica-Oblique.afm +3051 -0
  39. data/vendor/prawn-core/data/fonts/Helvetica.afm +3051 -0
  40. data/vendor/prawn-core/data/fonts/MustRead.html +19 -0
  41. data/vendor/prawn-core/data/fonts/Symbol.afm +213 -0
  42. data/vendor/prawn-core/data/fonts/Times-Bold.afm +2588 -0
  43. data/vendor/prawn-core/data/fonts/Times-BoldItalic.afm +2384 -0
  44. data/vendor/prawn-core/data/fonts/Times-Italic.afm +2667 -0
  45. data/vendor/prawn-core/data/fonts/Times-Roman.afm +2419 -0
  46. data/vendor/prawn-core/data/fonts/ZapfDingbats.afm +225 -0
  47. data/vendor/prawn-core/data/fonts/comicsans.ttf +0 -0
  48. data/vendor/prawn-core/data/fonts/gkai00mp.ttf +0 -0
  49. data/vendor/prawn-core/data/images/16bit.alpha +0 -0
  50. data/vendor/prawn-core/data/images/16bit.dat +0 -0
  51. data/vendor/prawn-core/data/images/16bit.png +0 -0
  52. data/vendor/prawn-core/data/images/arrow.png +0 -0
  53. data/vendor/prawn-core/data/images/arrow2.png +0 -0
  54. data/vendor/prawn-core/data/images/barcode_issue.png +0 -0
  55. data/vendor/prawn-core/data/images/dice.alpha +0 -0
  56. data/vendor/prawn-core/data/images/dice.dat +0 -0
  57. data/vendor/prawn-core/data/images/dice.png +0 -0
  58. data/vendor/prawn-core/data/images/dice_interlaced.png +0 -0
  59. data/vendor/prawn-core/data/images/fractal.jpg +0 -0
  60. data/vendor/prawn-core/data/images/letterhead.jpg +0 -0
  61. data/vendor/prawn-core/data/images/page_white_text.alpha +0 -0
  62. data/vendor/prawn-core/data/images/page_white_text.dat +0 -0
  63. data/vendor/prawn-core/data/images/page_white_text.png +0 -0
  64. data/vendor/prawn-core/data/images/pigs.jpg +0 -0
  65. data/vendor/prawn-core/data/images/rails.dat +0 -0
  66. data/vendor/prawn-core/data/images/rails.png +0 -0
  67. data/vendor/prawn-core/data/images/ruport.png +0 -0
  68. data/vendor/prawn-core/data/images/ruport_data.dat +0 -0
  69. data/vendor/prawn-core/data/images/ruport_transparent.png +0 -0
  70. data/vendor/prawn-core/data/images/ruport_type0.png +0 -0
  71. data/vendor/prawn-core/data/images/stef.jpg +0 -0
  72. data/vendor/prawn-core/data/images/tru256.bmp +0 -0
  73. data/vendor/prawn-core/data/images/web-links.dat +1 -0
  74. data/vendor/prawn-core/data/images/web-links.png +0 -0
  75. data/vendor/prawn-core/data/shift_jis_text.txt +1 -0
  76. data/vendor/prawn-core/examples/bounding_box/bounding_boxes.rb +43 -0
  77. data/vendor/prawn-core/examples/bounding_box/indentation.rb +34 -0
  78. data/vendor/prawn-core/examples/bounding_box/russian_boxes.rb +36 -0
  79. data/vendor/prawn-core/examples/bounding_box/stretched_nesting.rb +67 -0
  80. data/vendor/prawn-core/examples/column_box/column_box_example.rb +43 -0
  81. data/vendor/prawn-core/examples/example_helper.rb +3 -0
  82. data/vendor/prawn-core/examples/general/background.rb +23 -0
  83. data/vendor/prawn-core/examples/general/canvas.rb +15 -0
  84. data/vendor/prawn-core/examples/general/context_sensitive_headers.rb +37 -0
  85. data/vendor/prawn-core/examples/general/float.rb +11 -0
  86. data/vendor/prawn-core/examples/general/margin.rb +36 -0
  87. data/vendor/prawn-core/examples/general/measurement_units.rb +51 -0
  88. data/vendor/prawn-core/examples/general/metadata-info.rb +16 -0
  89. data/vendor/prawn-core/examples/general/multi_page_layout.rb +18 -0
  90. data/vendor/prawn-core/examples/general/outlines.rb +50 -0
  91. data/vendor/prawn-core/examples/general/page_geometry.rb +31 -0
  92. data/vendor/prawn-core/examples/general/page_numbering.rb +15 -0
  93. data/vendor/prawn-core/examples/general/repeaters.rb +47 -0
  94. data/vendor/prawn-core/examples/general/stamp.rb +41 -0
  95. data/vendor/prawn-core/examples/graphics/basic_images.rb +23 -0
  96. data/vendor/prawn-core/examples/graphics/cmyk.rb +12 -0
  97. data/vendor/prawn-core/examples/graphics/curves.rb +11 -0
  98. data/vendor/prawn-core/examples/graphics/hexagon.rb +13 -0
  99. data/vendor/prawn-core/examples/graphics/image_fit.rb +15 -0
  100. data/vendor/prawn-core/examples/graphics/image_flow.rb +37 -0
  101. data/vendor/prawn-core/examples/graphics/image_position.rb +17 -0
  102. data/vendor/prawn-core/examples/graphics/line.rb +32 -0
  103. data/vendor/prawn-core/examples/graphics/png_types.rb +22 -0
  104. data/vendor/prawn-core/examples/graphics/polygons.rb +16 -0
  105. data/vendor/prawn-core/examples/graphics/remote_images.rb +12 -0
  106. data/vendor/prawn-core/examples/graphics/rounded_polygons.rb +19 -0
  107. data/vendor/prawn-core/examples/graphics/rounded_rectangle.rb +20 -0
  108. data/vendor/prawn-core/examples/graphics/ruport_style_helpers.rb +19 -0
  109. data/vendor/prawn-core/examples/graphics/stroke_bounds.rb +20 -0
  110. data/vendor/prawn-core/examples/graphics/stroke_cap_and_join.rb +45 -0
  111. data/vendor/prawn-core/examples/graphics/stroke_dash.rb +42 -0
  112. data/vendor/prawn-core/examples/graphics/transformations.rb +52 -0
  113. data/vendor/prawn-core/examples/graphics/transparency.rb +26 -0
  114. data/vendor/prawn-core/examples/m17n/chinese_text_wrapping.rb +17 -0
  115. data/vendor/prawn-core/examples/m17n/euro.rb +15 -0
  116. data/vendor/prawn-core/examples/m17n/sjis.rb +28 -0
  117. data/vendor/prawn-core/examples/m17n/utf8.rb +13 -0
  118. data/vendor/prawn-core/examples/m17n/win_ansi_charset.rb +54 -0
  119. data/vendor/prawn-core/examples/text/alignment.rb +18 -0
  120. data/vendor/prawn-core/examples/text/dfont.rb +48 -0
  121. data/vendor/prawn-core/examples/text/family_based_styling.rb +24 -0
  122. data/vendor/prawn-core/examples/text/font_calculations.rb +91 -0
  123. data/vendor/prawn-core/examples/text/font_size.rb +33 -0
  124. data/vendor/prawn-core/examples/text/indent_paragraphs.rb +18 -0
  125. data/vendor/prawn-core/examples/text/kerning.rb +30 -0
  126. data/vendor/prawn-core/examples/text/rotated.rb +98 -0
  127. data/vendor/prawn-core/examples/text/simple_text.rb +17 -0
  128. data/vendor/prawn-core/examples/text/simple_text_ttf.rb +17 -0
  129. data/vendor/prawn-core/examples/text/span.rb +29 -0
  130. data/vendor/prawn-core/examples/text/text_box.rb +88 -0
  131. data/vendor/prawn-core/examples/text/text_box_returning_excess.rb +51 -0
  132. data/vendor/prawn-core/examples/text/text_flow.rb +67 -0
  133. data/vendor/prawn-core/lib/prawn/byte_string.rb +7 -0
  134. data/vendor/prawn-core/lib/prawn/compatibility.rb +51 -0
  135. data/vendor/prawn-core/lib/prawn/core.rb +87 -0
  136. data/vendor/prawn-core/lib/prawn/core/page.rb +88 -0
  137. data/vendor/prawn-core/lib/prawn/core/text.rb +65 -0
  138. data/vendor/prawn-core/lib/prawn/document.rb +596 -0
  139. data/vendor/prawn-core/lib/prawn/document/annotations.rb +65 -0
  140. data/vendor/prawn-core/lib/prawn/document/bounding_box.rb +402 -0
  141. data/vendor/prawn-core/lib/prawn/document/column_box.rb +113 -0
  142. data/vendor/prawn-core/lib/prawn/document/destinations.rb +92 -0
  143. data/vendor/prawn-core/lib/prawn/document/graphics_state.rb +49 -0
  144. data/vendor/prawn-core/lib/prawn/document/internals.rb +153 -0
  145. data/vendor/prawn-core/lib/prawn/document/page_geometry.rb +136 -0
  146. data/vendor/prawn-core/lib/prawn/document/snapshot.rb +80 -0
  147. data/vendor/prawn-core/lib/prawn/document/span.rb +55 -0
  148. data/vendor/prawn-core/lib/prawn/encoding.rb +121 -0
  149. data/vendor/prawn-core/lib/prawn/errors.rb +83 -0
  150. data/vendor/prawn-core/lib/prawn/font.rb +329 -0
  151. data/vendor/prawn-core/lib/prawn/font/afm.rb +217 -0
  152. data/vendor/prawn-core/lib/prawn/font/dfont.rb +34 -0
  153. data/vendor/prawn-core/lib/prawn/font/ttf.rb +341 -0
  154. data/vendor/prawn-core/lib/prawn/graphics.rb +321 -0
  155. data/vendor/prawn-core/lib/prawn/graphics/cap_style.rb +38 -0
  156. data/vendor/prawn-core/lib/prawn/graphics/color.rb +205 -0
  157. data/vendor/prawn-core/lib/prawn/graphics/dash.rb +71 -0
  158. data/vendor/prawn-core/lib/prawn/graphics/join_style.rb +38 -0
  159. data/vendor/prawn-core/lib/prawn/graphics/transformation.rb +157 -0
  160. data/vendor/prawn-core/lib/prawn/graphics/transparency.rb +99 -0
  161. data/vendor/prawn-core/lib/prawn/images.rb +337 -0
  162. data/vendor/prawn-core/lib/prawn/images/jpg.rb +46 -0
  163. data/vendor/prawn-core/lib/prawn/images/png.rb +219 -0
  164. data/vendor/prawn-core/lib/prawn/literal_string.rb +14 -0
  165. data/vendor/prawn-core/lib/prawn/measurement_extensions.rb +46 -0
  166. data/vendor/prawn-core/lib/prawn/measurements.rb +71 -0
  167. data/vendor/prawn-core/lib/prawn/name_tree.rb +166 -0
  168. data/vendor/prawn-core/lib/prawn/object_store.rb +93 -0
  169. data/vendor/prawn-core/lib/prawn/outline.rb +278 -0
  170. data/vendor/prawn-core/lib/prawn/pdf_object.rb +83 -0
  171. data/vendor/prawn-core/lib/prawn/reference.rb +92 -0
  172. data/vendor/prawn-core/lib/prawn/repeater.rb +129 -0
  173. data/vendor/prawn-core/lib/prawn/stamp.rb +128 -0
  174. data/vendor/prawn-core/lib/prawn/text.rb +271 -0
  175. data/vendor/prawn-core/lib/prawn/text/box.rb +414 -0
  176. data/vendor/prawn-core/meta/Rakefile +36 -0
  177. data/vendor/prawn-core/meta/lib/prawn.rb +2 -0
  178. data/vendor/prawn-core/reference_pdfs/alignment.pdf +229 -0
  179. data/vendor/prawn-core/reference_pdfs/background.pdf +0 -0
  180. data/vendor/prawn-core/reference_pdfs/basic_images.pdf +0 -0
  181. data/vendor/prawn-core/reference_pdfs/bounding_boxes.pdf +128 -0
  182. data/vendor/prawn-core/reference_pdfs/canvas.pdf +78 -0
  183. data/vendor/prawn-core/reference_pdfs/chinese_flow.pdf +0 -0
  184. data/vendor/prawn-core/reference_pdfs/cmyk.pdf +0 -0
  185. data/vendor/prawn-core/reference_pdfs/column_box.pdf +3671 -0
  186. data/vendor/prawn-core/reference_pdfs/context_sensitive_headers.pdf +2331 -0
  187. data/vendor/prawn-core/reference_pdfs/curves.pdf +62 -0
  188. data/vendor/prawn-core/reference_pdfs/dfont.pdf +0 -0
  189. data/vendor/prawn-core/reference_pdfs/euro.pdf +75 -0
  190. data/vendor/prawn-core/reference_pdfs/family_style.pdf +286 -0
  191. data/vendor/prawn-core/reference_pdfs/flow.pdf +964 -0
  192. data/vendor/prawn-core/reference_pdfs/font_calculations.pdf +0 -0
  193. data/vendor/prawn-core/reference_pdfs/font_size.pdf +142 -0
  194. data/vendor/prawn-core/reference_pdfs/hexagon.pdf +61 -0
  195. data/vendor/prawn-core/reference_pdfs/image-flow.pdf +0 -0
  196. data/vendor/prawn-core/reference_pdfs/image_fit.pdf +0 -0
  197. data/vendor/prawn-core/reference_pdfs/image_position.pdf +0 -0
  198. data/vendor/prawn-core/reference_pdfs/indentation.pdf +124 -0
  199. data/vendor/prawn-core/reference_pdfs/kerning.pdf +0 -0
  200. data/vendor/prawn-core/reference_pdfs/landscape_a4.pdf +52 -0
  201. data/vendor/prawn-core/reference_pdfs/landscape_legal.pdf +52 -0
  202. data/vendor/prawn-core/reference_pdfs/landscape_letter.pdf +52 -0
  203. data/vendor/prawn-core/reference_pdfs/lines.pdf +116 -0
  204. data/vendor/prawn-core/reference_pdfs/margin.pdf +3850 -0
  205. data/vendor/prawn-core/reference_pdfs/measurement_units.pdf +4667 -0
  206. data/vendor/prawn-core/reference_pdfs/metadata-info.pdf +88 -0
  207. data/vendor/prawn-core/reference_pdfs/multi-layout.pdf +209 -0
  208. data/vendor/prawn-core/reference_pdfs/page_with_numbering.pdf +156 -0
  209. data/vendor/prawn-core/reference_pdfs/png_types.pdf +0 -0
  210. data/vendor/prawn-core/reference_pdfs/portrait_a4.pdf +52 -0
  211. data/vendor/prawn-core/reference_pdfs/portrait_legal.pdf +52 -0
  212. data/vendor/prawn-core/reference_pdfs/portrait_letter.pdf +52 -0
  213. data/vendor/prawn-core/reference_pdfs/pretty_polygons.pdf +122 -0
  214. data/vendor/prawn-core/reference_pdfs/remote_images.pdf +0 -0
  215. data/vendor/prawn-core/reference_pdfs/ruport.pdf +101 -0
  216. data/vendor/prawn-core/reference_pdfs/russian_boxes.pdf +2780 -0
  217. data/vendor/prawn-core/reference_pdfs/simple_text.pdf +136 -0
  218. data/vendor/prawn-core/reference_pdfs/simple_text_ttf.pdf +0 -0
  219. data/vendor/prawn-core/reference_pdfs/sjis.pdf +0 -0
  220. data/vendor/prawn-core/reference_pdfs/span.pdf +1975 -0
  221. data/vendor/prawn-core/reference_pdfs/stamp.pdf +649 -0
  222. data/vendor/prawn-core/reference_pdfs/stretched_nesting.pdf +200 -0
  223. data/vendor/prawn-core/reference_pdfs/stroke_bounds.pdf +135 -0
  224. data/vendor/prawn-core/reference_pdfs/stroke_cap_and_join.pdf +80 -0
  225. data/vendor/prawn-core/reference_pdfs/stroke_dash.pdf +457 -0
  226. data/vendor/prawn-core/reference_pdfs/text_box.pdf +962 -0
  227. data/vendor/prawn-core/reference_pdfs/text_box_returning_excess.pdf +271 -0
  228. data/vendor/prawn-core/reference_pdfs/transparency.pdf +347 -0
  229. data/vendor/prawn-core/reference_pdfs/utf8.pdf +0 -0
  230. data/vendor/prawn-core/reference_pdfs/win-ansi.pdf +6172 -0
  231. data/vendor/prawn-core/spec/annotations_spec.rb +90 -0
  232. data/vendor/prawn-core/spec/bounding_box_spec.rb +185 -0
  233. data/vendor/prawn-core/spec/destinations_spec.rb +15 -0
  234. data/vendor/prawn-core/spec/document_spec.rb +408 -0
  235. data/vendor/prawn-core/spec/font_spec.rb +314 -0
  236. data/vendor/prawn-core/spec/graphics_spec.rb +438 -0
  237. data/vendor/prawn-core/spec/images_spec.rb +79 -0
  238. data/vendor/prawn-core/spec/jpg_spec.rb +25 -0
  239. data/vendor/prawn-core/spec/measurement_units_spec.rb +23 -0
  240. data/vendor/prawn-core/spec/name_tree_spec.rb +112 -0
  241. data/vendor/prawn-core/spec/object_store_spec.rb +75 -0
  242. data/vendor/prawn-core/spec/outline_spec.rb +229 -0
  243. data/vendor/prawn-core/spec/pdf_object_spec.rb +122 -0
  244. data/vendor/prawn-core/spec/png_spec.rb +236 -0
  245. data/vendor/prawn-core/spec/reference_spec.rb +82 -0
  246. data/vendor/prawn-core/spec/repeater_spec.rb +96 -0
  247. data/vendor/prawn-core/spec/snapshot_spec.rb +138 -0
  248. data/vendor/prawn-core/spec/span_spec.rb +49 -0
  249. data/vendor/prawn-core/spec/spec_helper.rb +24 -0
  250. data/vendor/prawn-core/spec/stamp_spec.rb +108 -0
  251. data/vendor/prawn-core/spec/stroke_styles_spec.rb +152 -0
  252. data/vendor/prawn-core/spec/text_at_spec.rb +119 -0
  253. data/vendor/prawn-core/spec/text_box_spec.rb +603 -0
  254. data/vendor/prawn-core/spec/text_spec.rb +308 -0
  255. data/vendor/prawn-core/spec/transparency_spec.rb +75 -0
  256. data/vendor/prawn-core/vendor/pdf-inspector/README +18 -0
  257. data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector.rb +26 -0
  258. data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/extgstate.rb +18 -0
  259. data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +131 -0
  260. data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/page.rb +25 -0
  261. data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/text.rb +31 -0
  262. data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +19 -0
  263. data/vendor/prawn-core/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
  264. data/vendor/prawn-core/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
  265. data/vendor/prawn-core/vendor/ttfunk/example.rb +45 -0
  266. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk.rb +102 -0
  267. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/directory.rb +17 -0
  268. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +88 -0
  269. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +69 -0
  270. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/reader.rb +44 -0
  271. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/resource_file.rb +78 -0
  272. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset.rb +18 -0
  273. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/base.rb +141 -0
  274. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +46 -0
  275. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +48 -0
  276. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +63 -0
  277. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +51 -0
  278. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset_collection.rb +72 -0
  279. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table.rb +46 -0
  280. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap.rb +34 -0
  281. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +54 -0
  282. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +126 -0
  283. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +79 -0
  284. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf.rb +64 -0
  285. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +81 -0
  286. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +37 -0
  287. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/head.rb +44 -0
  288. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hhea.rb +41 -0
  289. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +47 -0
  290. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern.rb +79 -0
  291. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +62 -0
  292. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/loca.rb +43 -0
  293. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/maxp.rb +40 -0
  294. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/name.rb +119 -0
  295. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/os2.rb +78 -0
  296. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post.rb +91 -0
  297. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +43 -0
  298. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +35 -0
  299. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +23 -0
  300. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +17 -0
  301. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +17 -0
  302. data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/simple.rb +14 -0
  303. data/vendor/prawn-core/www/index.html +196 -0
  304. data/vendor/prawn-core/www/media/bounding_boxes.pdf +146 -0
  305. data/vendor/prawn-core/www/media/bounding_boxes.png +0 -0
  306. data/vendor/prawn-core/www/media/bounding_boxes_out.png +0 -0
  307. data/vendor/prawn-core/www/media/fancy_table.pdf +350 -0
  308. data/vendor/prawn-core/www/media/image.pdf +0 -0
  309. data/vendor/prawn-core/www/media/images.png +0 -0
  310. data/vendor/prawn-core/www/media/prawn_logo.png +0 -0
  311. data/vendor/prawn-core/www/media/tables.png +0 -0
  312. data/vendor/prawn-core/www/media/utf8.pdf +0 -0
  313. data/vendor/prawn-core/www/media/utf8.png +0 -0
  314. data/vendor/prawn-core/www/prawn-Chinese.html +113 -0
  315. data/vendor/prawn-core/www/prawn.css +86 -0
  316. data/vendor/prawn-core/www/twilight.css +266 -0
  317. metadata +374 -0
@@ -0,0 +1,308 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
+
5
+ describe "#height_of" do
6
+ before(:each) { create_pdf }
7
+
8
+ it "should return the height that would be required to print a" +
9
+ "particular string of text" do
10
+ original_y = @pdf.y
11
+ @pdf.text("Foo")
12
+ new_y = @pdf.y
13
+ @pdf.height_of("Foo", :width => 300).should.be.close(original_y - new_y, 0.0001)
14
+ end
15
+
16
+ it "should raise CannotFit if a too-small width is given" do
17
+ lambda do
18
+ @pdf.height_of("text", :width => 1)
19
+ end.should.raise(Prawn::Errors::CannotFit)
20
+ end
21
+
22
+ it "should raise Prawn::Errors::UnknownOption if :indent_paragraphs option is provided" do
23
+ lambda {
24
+ @pdf.height_of("hai", :width => 300,
25
+ :indent_paragraphs => 60)
26
+ }.should.raise(Prawn::Errors::UnknownOption)
27
+ end
28
+
29
+ it "should not raise Prawn::Errors::UnknownOption if :final_gap option is provided" do
30
+ lambda {
31
+ @pdf.height_of("hai", :width => 300,
32
+ :final_gap => true)
33
+ }.should.not.raise(Prawn::Errors::UnknownOption)
34
+ end
35
+ end
36
+
37
+ describe "#text" do
38
+ before(:each) { create_pdf }
39
+
40
+ it "should raise ArgumentError if :at option included" do
41
+ lambda { @pdf.text("hai", :at => [0, 0]) }.should.raise(ArgumentError)
42
+ end
43
+
44
+ it "should advance down the document based on font_height" do
45
+ position = @pdf.y
46
+ @pdf.text "Foo"
47
+
48
+ @pdf.y.should.be.close(position - @pdf.font.height, 0.0001)
49
+
50
+ position = @pdf.y
51
+ @pdf.text "Foo\nBar\nBaz"
52
+ @pdf.y.should.be.close(position - 3*@pdf.font.height, 0.0001)
53
+ end
54
+
55
+ it "should advance down the document based on font_height" +
56
+ " with size option" do
57
+ position = @pdf.y
58
+ @pdf.text "Foo", :size => 15
59
+
60
+ @pdf.font_size = 15
61
+ @pdf.y.should.be.close(position - @pdf.font.height, 0.0001)
62
+
63
+ position = @pdf.y
64
+ @pdf.text "Foo\nBar\nBaz"
65
+ @pdf.y.should.be.close(position - 3*@pdf.font.height, 0.0001)
66
+ end
67
+
68
+ it "should advance down the document based on font_height" +
69
+ " with leading option" do
70
+ position = @pdf.y
71
+ leading = 2
72
+ @pdf.text "Foo", :leading => leading
73
+
74
+ @pdf.y.should.be.close(position - @pdf.font.height - leading, 0.0001)
75
+
76
+ position = @pdf.y
77
+ @pdf.text "Foo\nBar\nBaz"
78
+ @pdf.y.should.be.close(position - 3*@pdf.font.height, 0.0001)
79
+ end
80
+
81
+ it "should advance down the document based on font ascender only "+
82
+ "if final_gap is given" do
83
+ position = @pdf.y
84
+ @pdf.text "Foo", :final_gap => false
85
+
86
+ @pdf.y.should.be.close(position - @pdf.font.ascender, 0.0001)
87
+
88
+ position = @pdf.y
89
+ @pdf.text "Foo\nBar\nBaz", :final_gap => false
90
+ @pdf.y.should.be.close(position - 2*@pdf.font.height - @pdf.font.ascender, 0.0001)
91
+ end
92
+
93
+ it "should default to 12 point helvetica" do
94
+ @pdf.text "Blah"
95
+ text = PDF::Inspector::Text.analyze(@pdf.render)
96
+ text.font_settings[0][:name].should == :Helvetica
97
+ text.font_settings[0][:size].should == 12
98
+ text.strings.first.should == "Blah"
99
+ end
100
+
101
+ it "should allow setting font size" do
102
+ @pdf.text "Blah", :size => 16
103
+ text = PDF::Inspector::Text.analyze(@pdf.render)
104
+ text.font_settings[0][:size].should == 16
105
+ end
106
+
107
+ it "should allow setting a default font size" do
108
+ @pdf.font_size = 16
109
+ @pdf.text "Blah"
110
+ text = PDF::Inspector::Text.analyze(@pdf.render)
111
+ text.font_settings[0][:size].should == 16
112
+ end
113
+
114
+ it "should allow overriding default font for a single instance" do
115
+ @pdf.font_size = 16
116
+
117
+ @pdf.text "Blah", :size => 11
118
+ @pdf.text "Blaz"
119
+ text = PDF::Inspector::Text.analyze(@pdf.render)
120
+ text.font_settings[0][:size].should == 11
121
+ text.font_settings[1][:size].should == 16
122
+ end
123
+
124
+ it "should allow setting a font size transaction with a block" do
125
+ @pdf.font_size 16 do
126
+ @pdf.text 'Blah'
127
+ end
128
+
129
+ @pdf.text 'blah'
130
+
131
+ text = PDF::Inspector::Text.analyze(@pdf.render)
132
+ text.font_settings[0][:size].should == 16
133
+ text.font_settings[1][:size].should == 12
134
+ end
135
+
136
+ it "should allow manual setting the font size " +
137
+ "when in a font size block" do
138
+ @pdf.font_size(16) do
139
+ @pdf.text 'Foo'
140
+ @pdf.text 'Blah', :size => 11
141
+ @pdf.text 'Blaz'
142
+ end
143
+ text = PDF::Inspector::Text.analyze(@pdf.render)
144
+ text.font_settings[0][:size].should == 16
145
+ text.font_settings[1][:size].should == 11
146
+ text.font_settings[2][:size].should == 16
147
+ end
148
+
149
+ it "should allow registering of built-in font_settings on the fly" do
150
+ @pdf.font "Times-Roman"
151
+ @pdf.text "Blah"
152
+ @pdf.font "Courier"
153
+ @pdf.text "Blaz"
154
+ text = PDF::Inspector::Text.analyze(@pdf.render)
155
+ text.font_settings[0][:name].should == :"Times-Roman"
156
+ text.font_settings[1][:name].should == :Courier
157
+ end
158
+
159
+ it "should utilise the same default font across multiple pages" do
160
+ @pdf.text "Blah"
161
+ @pdf.start_new_page
162
+ @pdf.text "Blaz"
163
+ text = PDF::Inspector::Text.analyze(@pdf.render)
164
+
165
+ text.font_settings.size.should == 2
166
+ text.font_settings[0][:name].should == :Helvetica
167
+ text.font_settings[1][:name].should == :Helvetica
168
+ end
169
+
170
+ it "should raise an exception when an unknown font is used" do
171
+ lambda { @pdf.font "Pao bu" }.should.raise(Prawn::Errors::UnknownFont)
172
+ end
173
+
174
+ it "should correctly render a utf-8 string when using a built-in font" do
175
+ str = "©" # copyright symbol
176
+ @pdf.text str
177
+
178
+ # grab the text from the rendered PDF and ensure it matches
179
+ text = PDF::Inspector::Text.analyze(@pdf.render)
180
+ text.strings.first.should == str
181
+ end
182
+
183
+ it "should correctly render a string with higher bit characters across" +
184
+ " a page break when using a built-in font" do
185
+ str = "©"
186
+ @pdf.move_cursor_to(@pdf.font.height)
187
+ @pdf.text(str + "\n" + str)
188
+
189
+ # grab the text from the rendered PDF and ensure it matches
190
+ text = PDF::Inspector::Text.analyze(@pdf.render)
191
+ text.strings[1].should == str.strip
192
+ end
193
+
194
+ it "should correctly render a string with higher bit characters across" +
195
+ " a page break when using a built-in font and :indent_paragraphs option" do
196
+ str = "©"
197
+ @pdf.move_cursor_to(@pdf.font.height)
198
+ @pdf.text(str + "\n" + str, :indent_paragraphs => 20)
199
+
200
+ # grab the text from the rendered PDF and ensure it matches
201
+ text = PDF::Inspector::Text.analyze(@pdf.render)
202
+ text.strings[1].should == str.strip
203
+ end
204
+
205
+ if "spec".respond_to?(:encode!)
206
+ # Handle non utf-8 string encodings in a sane way on M17N aware VMs
207
+ it "should raise an exception when a utf-8 incompatible string is rendered" do
208
+ str = "Blah \xDD"
209
+ str.force_encoding("ASCII-8BIT")
210
+ lambda { @pdf.text str }.should.raise(ArgumentError)
211
+ end
212
+ it "should not raise an exception when a shift-jis string is rendered" do
213
+ datafile = "#{Prawn::BASEDIR}/data/shift_jis_text.txt"
214
+ sjis_str = File.open(datafile, "r:shift_jis") { |f| f.gets }
215
+ @pdf.font("#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf")
216
+ lambda { @pdf.text sjis_str }.should.not.raise(ArgumentError)
217
+ end
218
+ else
219
+ # Handle non utf-8 string encodings in a sane way on non-M17N aware VMs
220
+ it "should raise an exception when a corrupt utf-8 string is rendered" do
221
+ str = "Blah \xDD"
222
+ lambda { @pdf.text str }.should.raise(ArgumentError)
223
+ end
224
+ it "should raise an exception when a shift-jis string is rendered" do
225
+ sjis_str = File.read("#{Prawn::BASEDIR}/data/shift_jis_text.txt")
226
+ lambda { @pdf.text sjis_str }.should.raise(ArgumentError)
227
+ end
228
+ end
229
+
230
+ it "should call move_past_bottom when printing more text than can fit" +
231
+ " between the current document.y and bounds.bottom" do
232
+ @pdf.y = @pdf.font.height
233
+ @pdf.text "Hello"
234
+ @pdf.text "World"
235
+ pages = PDF::Inspector::Page.analyze(@pdf.render).pages
236
+ pages.size.should == 2
237
+ pages[0][:strings].should == ["Hello"]
238
+ pages[1][:strings].should == ["World"]
239
+ end
240
+
241
+ it "should be able to use a custom word-wrap object" do
242
+ hello = "hello " * 25
243
+ world = "world " * 25
244
+ @pdf.text(hello + "\n" + world, :line_wrap => TestWordWrap.new)
245
+ text = PDF::Inspector::Text.analyze(@pdf.render)
246
+ text.strings[0].should == hello.strip
247
+ text.strings[1].should == world.strip
248
+ end
249
+
250
+ it "should be able to globally set the custom word-wrap object" do
251
+ hello = "hello " * 25
252
+ world = "world " * 25
253
+ @pdf.default_line_wrap = TestWordWrap.new
254
+ @pdf.text(hello + "\n" + world)
255
+ text = PDF::Inspector::Text.analyze(@pdf.render)
256
+ text.strings[0].should == hello.strip
257
+ text.strings[1].should == world.strip
258
+ end
259
+
260
+ describe "with :indent_paragraphs option" do
261
+ it "should indent the paragraphs" do
262
+ hello = "hello " * 50
263
+ hello2 = "hello " * 50
264
+ @pdf.text(hello + "\n" + hello2, :indent_paragraphs => 60)
265
+ text = PDF::Inspector::Text.analyze(@pdf.render)
266
+ text.strings[0].should == ("hello " * 19).strip
267
+ text.strings[1].should == ("hello " * 21).strip
268
+ text.strings[3].should == ("hello " * 19).strip
269
+ text.strings[4].should == ("hello " * 21).strip
270
+ end
271
+ describe "when wrap to new page, and first line of new page" +
272
+ " is not the start of a new paragraph, that line should" +
273
+ " not be indented" do
274
+ it "should indent the paragraphs" do
275
+ hello = "hello " * 50
276
+ hello2 = "hello " * 50
277
+ @pdf.move_cursor_to(@pdf.font.height)
278
+ @pdf.text(hello + "\n" + hello2, :indent_paragraphs => 60)
279
+ text = PDF::Inspector::Text.analyze(@pdf.render)
280
+ text.strings[0].should == ("hello " * 19).strip
281
+ text.strings[1].should == ("hello " * 21).strip
282
+ text.strings[3].should == ("hello " * 19).strip
283
+ text.strings[4].should == ("hello " * 21).strip
284
+ end
285
+ end
286
+ describe "when wrap to new page, and first line of new page" +
287
+ " is the start of a new paragraph, that line should" +
288
+ " be indented" do
289
+ it "should indent the paragraphs" do
290
+ hello = "hello " * 50
291
+ hello2 = "hello " * 50
292
+ @pdf.move_cursor_to(@pdf.font.height * 3)
293
+ @pdf.text(hello + "\n" + hello2, :indent_paragraphs => 60)
294
+ text = PDF::Inspector::Text.analyze(@pdf.render)
295
+ text.strings[0].should == ("hello " * 19).strip
296
+ text.strings[1].should == ("hello " * 21).strip
297
+ text.strings[3].should == ("hello " * 19).strip
298
+ text.strings[4].should == ("hello " * 21).strip
299
+ end
300
+ end
301
+ end
302
+ end
303
+
304
+ class TestWordWrap
305
+ def wrap_line(line, options)
306
+ line
307
+ end
308
+ end
@@ -0,0 +1,75 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
2
+
3
+ describe "Document with transparency" do
4
+ it "the PDF version should be at least 1.4" do
5
+ create_pdf
6
+ @pdf.transparent(0.5)
7
+ str = @pdf.render
8
+ str[0,8].should == "%PDF-1.4"
9
+ end
10
+
11
+ it "a new extended graphics state should be created for "+
12
+ "each unique transparency setting" do
13
+ create_pdf
14
+ @pdf.transparent(0.5, 0.2)
15
+ @pdf.transparent(0.5, 0.75)
16
+ extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
17
+ extgstates.length.should == 2
18
+ end
19
+
20
+ it "a new extended graphics state should not be created for "+
21
+ "each duplicate transparency setting" do
22
+ create_pdf
23
+ @pdf.transparent(0.5, 0.75)
24
+ @pdf.transparent(0.5, 0.75)
25
+ extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
26
+ extgstates.length.should == 1
27
+ end
28
+
29
+ it "setting the transparency with only one parameter sets the transparency"+
30
+ " for both the fill and the stroke" do
31
+ create_pdf
32
+ @pdf.transparent(0.5)
33
+ extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
34
+ extgstate[:opacity].should == 0.5
35
+ extgstate[:stroke_opacity].should == 0.5
36
+ end
37
+
38
+ it "setting the transparency with a numerical parameter and "+
39
+ "a :stroke should set the fill transparency to the numerical parameter "+
40
+ "and the stroke transparency to the option" do
41
+ create_pdf
42
+ @pdf.transparent(0.5, 0.2)
43
+ extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
44
+ extgstate[:opacity].should == 0.5
45
+ extgstate[:stroke_opacity].should == 0.2
46
+ end
47
+
48
+ it "should enforce the valid range of 0.0 to 1.0" do
49
+ create_pdf
50
+ @pdf.transparent(-0.5, -0.2)
51
+ extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
52
+ extgstate[:opacity].should == 0.0
53
+ extgstate[:stroke_opacity].should == 0.0
54
+
55
+ create_pdf
56
+ @pdf.transparent(2.0, 3.0)
57
+ extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates[0]
58
+ extgstate[:opacity].should == 1.0
59
+ extgstate[:stroke_opacity].should == 1.0
60
+ end
61
+
62
+ describe "with more than one page" do
63
+ it "the extended graphic state resource should be added to both pages" do
64
+ create_pdf
65
+ @pdf.transparent(0.5, 0.2)
66
+ @pdf.start_new_page
67
+ @pdf.transparent(0.5, 0.2)
68
+ extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
69
+ extgstate = extgstates[0]
70
+ extgstates.length.should == 2
71
+ extgstate[:opacity].should == 0.5
72
+ extgstate[:stroke_opacity].should == 0.2
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,18 @@
1
+ PDF::Inspector : A tool for analyzing PDF output
2
+
3
+ This library provides a number of PDF::Reader[0] based tools for use in testing
4
+ PDF output. Presently, the primary purpose of this tool is to support the
5
+ tests found in Prawn[1], a pure Ruby PDF generation library.
6
+
7
+ However, it may be useful to others, so we have made it available on Github[2]
8
+
9
+ Questions can be directed to the Prawn mailing list[3], but please remember
10
+ that this code is not necessarily suitable for production and has no officially
11
+ planned release date.
12
+
13
+ That having been said, patches are welcome!
14
+
15
+ [0] http://github.com/yob/pdf-reader
16
+ [1] http://github.com/sandal/prawn
17
+ [2] http://github.com/sandal/pdf-inspector
18
+ [3] http://groups.google.com/group/prawn-ruby
@@ -0,0 +1,26 @@
1
+ require "rubygems"
2
+ require "pdf/reader"
3
+ require "pdf/inspector/text"
4
+ require "pdf/inspector/xobject"
5
+ require "pdf/inspector/extgstate"
6
+ require "pdf/inspector/graphics"
7
+ require "pdf/inspector/page"
8
+
9
+ module PDF
10
+ class Inspector
11
+ def self.analyze(output,*args,&block)
12
+ obs = self.new(*args, &block)
13
+ PDF::Reader.string(output,obs)
14
+ obs
15
+ end
16
+
17
+ def self.analyze_file(filename,*args,&block)
18
+ analyze(File.open(filename, "rb") { |f| f.read },*args,&block)
19
+ end
20
+
21
+ def self.parse(obj)
22
+ PDF::Reader::Parser.new(
23
+ PDF::Reader::Buffer.new(StringIO.new(obj)), nil).parse_token
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ module PDF
2
+ class Inspector
3
+ class ExtGState < Inspector
4
+ attr_accessor :extgstates
5
+
6
+ def initialize
7
+ @extgstates = []
8
+ end
9
+
10
+ def resource_extgstate(*params)
11
+ @extgstates << {
12
+ :opacity => params[1][:ca],
13
+ :stroke_opacity => params[1][:CA]
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end