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,79 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
+
5
+ describe "the image() function" do
6
+
7
+ before(:each) do
8
+ @filename = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
9
+ create_pdf
10
+ end
11
+
12
+ it "should only embed an image once, even if it's added multiple times" do
13
+ @pdf.image @filename, :at => [100,100]
14
+ @pdf.image @filename, :at => [300,300]
15
+
16
+ output = @pdf.render
17
+ images = PDF::Inspector::XObject.analyze(output)
18
+ # there should be 2 images in the page resources
19
+ images.page_xobjects.first.size.should == 2
20
+ # but only 1 image xobject
21
+ output.scan(/\/Type \/XObject/).size.should == 1
22
+ end
23
+
24
+ it "should return the image info object" do
25
+ info = @pdf.image(@filename)
26
+
27
+ info.should.be.kind_of(Prawn::Images::JPG)
28
+
29
+ info.height.should == 453
30
+ end
31
+
32
+ it "should accept IO objects" do
33
+ file = File.open(@filename, "rb")
34
+ info = @pdf.image(file)
35
+
36
+ info.height.should == 453
37
+ end
38
+
39
+ it "should raise an UnsupportedImageType if passed a BMP" do
40
+ filename = "#{Prawn::BASEDIR}/data/images/tru256.bmp"
41
+ lambda { @pdf.image filename, :at => [100,100] }.should.raise(Prawn::Errors::UnsupportedImageType)
42
+ end
43
+
44
+ it "should raise an UnsupportedImageType if passed an interlaced PNG" do
45
+ filename = "#{Prawn::BASEDIR}/data/images/dice_interlaced.png"
46
+ lambda { @pdf.image filename, :at => [100,100] }.should.raise(Prawn::Errors::UnsupportedImageType)
47
+ end
48
+
49
+ describe ":fit option" do
50
+ it "should fit inside the defined constraints" do
51
+ info = @pdf.image @filename, :fit => [100,400]
52
+ info.scaled_width.should <= 100
53
+ info.scaled_height.should <= 400
54
+
55
+ info = @pdf.image @filename, :fit => [400,100]
56
+ info.scaled_width.should <= 400
57
+ info.scaled_height.should <= 100
58
+
59
+ info = @pdf.image @filename, :fit => [604,453]
60
+ info.scaled_width.should == 604
61
+ info.scaled_height.should == 453
62
+ end
63
+ it "should move text position" do
64
+ @y = @pdf.y
65
+ info = @pdf.image @filename, :fit => [100,400]
66
+ @pdf.y.should < @y
67
+ end
68
+ end
69
+
70
+ describe ":at option" do
71
+ it "should not move text position" do
72
+ @y = @pdf.y
73
+ info = @pdf.image @filename, :at => [100,400]
74
+ @pdf.y.should == @y
75
+ end
76
+ end
77
+
78
+ end
79
+
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ # Spec'ing the PNG class. Not complete yet - still needs to check the
4
+ # contents of palette and transparency to ensure they're correct.
5
+ # Need to find files that have these sections first.
6
+
7
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
8
+
9
+ describe "When reading a JPEG file" do
10
+
11
+ before(:each) do
12
+ @filename = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
13
+ @img_data = File.open(@filename, "rb") { |f| f.read }
14
+ end
15
+
16
+ it "should read the basic attributes correctly" do
17
+ jpg = Prawn::Images::JPG.new(@img_data)
18
+
19
+ jpg.width.should == 604
20
+ jpg.height.should == 453
21
+ jpg.bits.should == 8
22
+ jpg.channels.should == 3
23
+ end
24
+ end
25
+
@@ -0,0 +1,23 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
2
+ require "prawn/measurement_extensions"
3
+
4
+ describe "Measurement units" do
5
+
6
+ it "should convert units to PostScriptPoints" do
7
+ 1.mm.should.be.close(2.834645669, 0.000000001)
8
+ 1.mm.should == (72 / 25.4)
9
+ 2.mm.should == (2 * 72 / 25.4)
10
+ 3.mm.should == 3 * 72 / 25.4
11
+ -3.mm.should == -3 * 72/25.4
12
+ 1.cm.should == 10 * 72 / 25.4
13
+ 1.dm.should == 100 * 72 / 25.4
14
+ 1.m.should == 1000 * 72 / 25.4
15
+
16
+ 1.in.should == 72
17
+ 1.ft.should == 72 * 12
18
+ 1.yd.should == 72 * 12 * 3
19
+ 1.pt.should == 1
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,112 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
2
+
3
+ def tree_dump(tree)
4
+ if tree.is_a?(Prawn::NameTree::Node)
5
+ "[" + tree.children.map { |child| tree_dump(child) }.join(",") + "]"
6
+ else
7
+ "#{tree.name}=#{tree.value}"
8
+ end
9
+ end
10
+
11
+ def tree_add(tree, *args)
12
+ args.each do |(name, value)|
13
+ tree.add(name, value)
14
+ end
15
+ end
16
+
17
+ def tree_value(name, value)
18
+ Prawn::NameTree::Value.new(name, value)
19
+ end
20
+
21
+ class RefExposingDocument < Prawn::Document
22
+ def object_store
23
+ @store
24
+ end
25
+ end
26
+
27
+ describe "Name Tree" do
28
+ before(:each) { create_pdf(RefExposingDocument) }
29
+
30
+ it "should have no children when first initialized" do
31
+ node = Prawn::NameTree::Node.new(@pdf, 3)
32
+ node.children.length.should == 0
33
+ end
34
+
35
+ it "should have no subtrees while child limit is not reached" do
36
+ node = Prawn::NameTree::Node.new(@pdf, 3)
37
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3])
38
+ tree_dump(node).should == "[one=1,three=3,two=2]"
39
+ end
40
+
41
+ it "should split into subtrees when limit is exceeded" do
42
+ node = Prawn::NameTree::Node.new(@pdf, 3)
43
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
44
+ tree_dump(node).should == "[[four=4,one=1],[three=3,two=2]]"
45
+ end
46
+
47
+ it "should create a two new references when root is split" do
48
+ ref_count = @pdf.object_store.length
49
+ node = Prawn::NameTree::Node.new(@pdf, 3)
50
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
51
+ @pdf.object_store.length.should.equal ref_count+2
52
+ end
53
+
54
+ it "should create a one new reference when subtree is split" do
55
+ node = Prawn::NameTree::Node.new(@pdf, 3)
56
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
57
+
58
+ ref_count = @pdf.object_store.length # save when root is split
59
+ tree_add(node, ["five", 5], ["six", 6], ["seven", 7])
60
+ tree_dump(node).should == "[[five=5,four=4,one=1],[seven=7,six=6],[three=3,two=2]]"
61
+ @pdf.object_store.length.should.equal ref_count+1
62
+ end
63
+
64
+ it "should keep tree balanced when subtree split cascades to root" do
65
+ node = Prawn::NameTree::Node.new(@pdf, 3)
66
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
67
+ tree_add(node, ["five", 5], ["six", 6], ["seven", 7], ["eight", 8])
68
+ tree_dump(node).should == "[[[eight=8,five=5],[four=4,one=1]],[[seven=7,six=6],[three=3,two=2]]]"
69
+ end
70
+
71
+ it "should maintain order of already properly ordered nodes" do
72
+ node = Prawn::NameTree::Node.new(@pdf, 3)
73
+ tree_add(node, ["eight", 8], ["five", 5], ["four", 4], ["one", 1])
74
+ tree_add(node, ['seven', 7], ['six', 6], ['three', 3], ['two', 2])
75
+ tree_dump(node).should == "[[[eight=8,five=5],[four=4,one=1]],[[seven=7,six=6],[three=3,two=2]]]"
76
+ end
77
+
78
+ it "should emit only :Names key with to_hash if root is only node" do
79
+ node = Prawn::NameTree::Node.new(@pdf, 3)
80
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3])
81
+ node.to_hash.should.equal(
82
+ { :Names => [tree_value("one", 1), tree_value("three", 3), tree_value("two", 2)] }
83
+ )
84
+ end
85
+
86
+ it "should emit only :Kids key with to_hash if root has children" do
87
+ node = Prawn::NameTree::Node.new(@pdf, 3)
88
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
89
+ node.to_hash.should.equal({ :Kids => node.children.map { |child| child.ref } })
90
+ end
91
+
92
+ it "should emit :Limits and :Names keys with to_hash for leaf node" do
93
+ node = Prawn::NameTree::Node.new(@pdf, 3)
94
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
95
+ node.children.first.to_hash.should.equal(
96
+ { :Limits => %w(four one),
97
+ :Names => [tree_value("four", 4), tree_value("one", 1)] }
98
+ )
99
+ end
100
+
101
+ it "should emit :Limits and :Kids keys with to_hash for inner node" do
102
+ node = Prawn::NameTree::Node.new(@pdf, 3)
103
+ tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
104
+ tree_add(node, ["five", 5], ["six", 6], ["seven", 7], ["eight", 8])
105
+ tree_add(node, ["nine", 9], ["ten", 10], ["eleven", 11], ["twelve", 12])
106
+ tree_add(node, ["thirteen", 13], ["fourteen", 14], ["fifteen", 15], ["sixteen", 16])
107
+ node.children.first.to_hash.should.equal(
108
+ { :Limits => %w(eight one),
109
+ :Kids => node.children.first.children.map { |child| child.ref } }
110
+ )
111
+ end
112
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
+
5
+ describe "Prawn::ObjectStore" do
6
+ before(:each) do
7
+ @store = Prawn::ObjectStore.new
8
+ end
9
+
10
+ it "should create required roots by default, including info passed to new" do
11
+ store = Prawn::ObjectStore.new(:Test => 3)
12
+ store.size.should == 3 # 3 default roots
13
+ store.info.data[:Test].should == 3
14
+ store.pages.data[:Count].should == 0
15
+ store.root.data[:Pages].should == store.pages
16
+ end
17
+
18
+ it "should add to its objects when ref() is called" do
19
+ count = @store.size
20
+ @store.ref("blah")
21
+ @store.size.should == count + 1
22
+ end
23
+
24
+ it "should accept push with a Prawn::Reference" do
25
+ r = Prawn::Reference(123, "blah")
26
+ @store.push(r)
27
+ @store[r.identifier].should == r
28
+ end
29
+
30
+ it "should accept arbitrary data and use it to create a Prawn::Reference" do
31
+ @store.push(123, "blahblah")
32
+ @store[123].data.should == "blahblah"
33
+ end
34
+
35
+ it "should be Enumerable, yielding in order of submission" do
36
+ # higher IDs to bypass the default roots
37
+ [10, 11, 12].each do |id|
38
+ @store.push(id, "some data #{id}")
39
+ end
40
+ @store.map{|ref| ref.identifier}[-3..-1].should == [10, 11, 12]
41
+ end
42
+ end
43
+
44
+ describe "Prawn::ObjectStore#compact" do
45
+ it "should do nothing to an ObjectStore with all live refs" do
46
+ store = Prawn::ObjectStore.new
47
+ store.info.data[:Blah] = store.ref(:some => "structure")
48
+ old_size = store.size
49
+ store.compact
50
+
51
+ store.size.should == old_size
52
+ end
53
+
54
+ it "should remove dead objects, renumbering live objects from 1" do
55
+ store = Prawn::ObjectStore.new
56
+ store.ref(:some => "structure")
57
+ old_size = store.size
58
+ store.compact
59
+
60
+ store.size.should.be < old_size
61
+ store.map{ |o| o.identifier }.should == (1..store.size).to_a
62
+ end
63
+
64
+ it "should detect and remove dead objects that were once live" do
65
+ store = Prawn::ObjectStore.new
66
+ store.info.data[:Blah] = store.ref(:some => "structure")
67
+ store.info.data[:Blah] = :overwritten
68
+ old_size = store.size
69
+ store.compact
70
+
71
+ store.size.should.be < old_size
72
+ store.map{ |o| o.identifier }.should == (1..store.size).to_a
73
+ end
74
+ end
75
+
@@ -0,0 +1,229 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
2
+
3
+ describe "Outline" do
4
+ before(:each) do
5
+ @pdf = Prawn::Document.new() do
6
+ text "Page 1. This is the first Chapter. "
7
+ start_new_page
8
+ text "Page 2. More in the first Chapter. "
9
+ start_new_page
10
+ define_outline do
11
+ section 'Chapter 1', :page => 1, :closed => true do
12
+ page 1, :title => 'Page 1'
13
+ page 2, :title => 'Page 2'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ describe "#generate_outline" do
19
+ before(:each) do
20
+ render_and_find_objects
21
+ end
22
+
23
+ it "should create a root outline dictionary item" do
24
+ assert_not_nil @outline_root
25
+ end
26
+
27
+ it "should set the first and last top items of the root outline dictionary item" do
28
+ referenced_object(@outline_root[:First]).should == @section_1
29
+ referenced_object(@outline_root[:Last]).should == @section_1
30
+ end
31
+
32
+ describe "#create_outline_item" do
33
+ it "should create outline items for each section and page" do
34
+ [@section_1, @page_1, @page_2].each {|item| assert_not_nil item}
35
+ end
36
+ end
37
+
38
+ describe "#set_relations, #set_variables_for_block, and #reset_parent" do
39
+ it "should link sibling items" do
40
+ referenced_object(@page_1[:Next]).should == @page_2
41
+ referenced_object(@page_2[:Prev]).should == @page_1
42
+ end
43
+
44
+ it "should link child items to parent item" do
45
+ [@page_1, @page_2].each {|page| referenced_object(page[:Parent]).should == @section_1 }
46
+ end
47
+
48
+ it "should set the first and last child items for parent item" do
49
+ referenced_object(@section_1[:First]).should == @page_1
50
+ referenced_object(@section_1[:Last]).should == @page_2
51
+ end
52
+ end
53
+
54
+ describe "#increase_count" do
55
+
56
+ it "should add the count of all descendant items" do
57
+ @outline_root[:Count].should == 3
58
+ @section_1[:Count].should.abs == 2
59
+ @page_1[:Count].should == 0
60
+ @page_2[:Count].should == 0
61
+ end
62
+
63
+ end
64
+
65
+ describe "closed option" do
66
+
67
+ it "should set the item's integer count to negative" do
68
+ @section_1[:Count].should == -2
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ describe "#outline.add_section" do
76
+ before(:each) do
77
+ @pdf.start_new_page
78
+ @pdf.text "Page 3. An added section "
79
+ @pdf.outline.add_section do
80
+ section 'Added Section', :page => 3 do
81
+ page 3, :title => 'Page 3'
82
+ end
83
+ end
84
+ render_and_find_objects
85
+ end
86
+
87
+ it "should add new outline items to document" do
88
+ [@section_2, @page_3].each { |item| assert_not_nil item}
89
+ end
90
+
91
+ it "should reset the last items for root outline dictionary" do
92
+ referenced_object(@outline_root[:First]).should == @section_1
93
+ referenced_object(@outline_root[:Last]).should == @section_2
94
+ end
95
+
96
+ it "should reset the next relation for the previous last top level item" do
97
+ referenced_object(@section_1[:Next]).should == @section_2
98
+ end
99
+
100
+ it "should set the previous relation of the addded to section" do
101
+ referenced_object(@section_2[:Prev]).should == @section_1
102
+ end
103
+
104
+ it "should increase the count of root outline dictionary" do
105
+ @outline_root[:Count].should == 5
106
+ end
107
+
108
+ end
109
+
110
+ describe "#outline.insert_section_after" do
111
+ describe "inserting in the middle of another section" do
112
+ before(:each) do
113
+ @pdf.go_to_page 1
114
+ @pdf.start_new_page
115
+ @pdf.text "Inserted Page"
116
+ @pdf.outline.insert_section_after 'Page 1' do
117
+ page page_number, :title => "Inserted Page"
118
+ end
119
+ render_and_find_objects
120
+ end
121
+
122
+ it "should insert new outline items to document" do
123
+ assert_not_nil @inserted_page
124
+ end
125
+
126
+ it "should adjust the count of all ancestors" do
127
+ @outline_root[:Count].should == 4
128
+ @section_1[:Count].should.abs == 3
129
+ end
130
+
131
+ describe "#adjust_relations" do
132
+
133
+ it "should reset the sibling relations of adjoining items to inserted item" do
134
+ referenced_object(@page_1[:Next]).should == @inserted_page
135
+ referenced_object(@page_2[:Prev]).should == @inserted_page
136
+ end
137
+
138
+ it "should set the sibling relation of added item to adjoining items" do
139
+ referenced_object(@inserted_page[:Next]).should == @page_2
140
+ referenced_object(@inserted_page[:Prev]).should == @page_1
141
+ end
142
+
143
+ it "should not affect the first and last relations of parent item" do
144
+ referenced_object(@section_1[:First]).should == @page_1
145
+ referenced_object(@section_1[:Last]).should == @page_2
146
+ end
147
+
148
+ end
149
+
150
+ end
151
+
152
+ describe "inserting at the end of another section" do
153
+ before(:each) do
154
+ @pdf.go_to_page 2
155
+ @pdf.start_new_page
156
+ @pdf.text "Inserted Page"
157
+ @pdf.outline.insert_section_after 'Page 2' do
158
+ page page_number, :title => "Inserted Page"
159
+ end
160
+ render_and_find_objects
161
+ end
162
+
163
+ describe "#adjust_relations" do
164
+
165
+ it "should reset the sibling relations of adjoining item to inserted item" do
166
+ referenced_object(@page_2[:Next]).should == @inserted_page
167
+ end
168
+
169
+ it "should set the sibling relation of added item to adjoining items" do
170
+ assert_nil referenced_object(@inserted_page[:Next])
171
+ referenced_object(@inserted_page[:Prev]).should == @page_2
172
+ end
173
+
174
+ it "should adjust the last relation of parent item" do
175
+ referenced_object(@section_1[:Last]).should == @inserted_page
176
+ end
177
+
178
+ end
179
+ end
180
+
181
+ it "should require an existing title" do
182
+ assert_raise Prawn::Errors::UnknownOutlineTitle do
183
+ @pdf.go_to_page 1
184
+ @pdf.start_new_page
185
+ @pdf.text "Inserted Page"
186
+ @pdf.outline.insert_section_after 'Wrong page' do
187
+ page page_number, :title => "Inserted Page"
188
+ end
189
+ render_and_find_objects
190
+ end
191
+ end
192
+
193
+ end
194
+
195
+ describe "#page" do
196
+ it "should require a title option to be set" do
197
+ assert_raise Prawn::Errors::RequiredOption do
198
+ @pdf = Prawn::Document.new() do
199
+ text "Page 1. This is the first Chapter. "
200
+ define_outline do
201
+ page 1, :title => nil
202
+ end
203
+ end
204
+ end
205
+ end
206
+ end
207
+ end
208
+
209
+ def render_and_find_objects
210
+ output = StringIO.new(@pdf.render, 'r+')
211
+ @hash = PDF::Hash.new(output)
212
+ @outline_root = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Outlines}
213
+ @pages = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
214
+ @section_1 = find_by_title('Chapter 1')
215
+ @page_1 = find_by_title('Page 1')
216
+ @page_2 = find_by_title('Page 2')
217
+ @section_2 = find_by_title('Added Section')
218
+ @page_3 = find_by_title('Page 3')
219
+ @inserted_page = find_by_title('Inserted Page')
220
+ end
221
+
222
+ def find_by_title(title)
223
+ @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Title] == title}
224
+ end
225
+
226
+ def referenced_object(reference)
227
+ @hash[reference]
228
+ end
229
+