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,414 @@
1
+ # encoding: utf-8
2
+
3
+ # text/rectangle.rb : Implements text boxes
4
+ #
5
+ # Copyright November 2009, Daniel Nelson. All Rights Reserved.
6
+ #
7
+ # This is free software. Please see the LICENSE and COPYING files for details.
8
+
9
+ module Prawn
10
+ module Text
11
+
12
+ # Draws the requested text into a box. When the text overflows
13
+ # the rectangle, you can display ellipses, shrink to fit, or
14
+ # truncate the text. Text boxes are independent of the document
15
+ # y position.
16
+ #
17
+ # == Encoding
18
+ #
19
+ # Note that strings passed to this function should be encoded as UTF-8.
20
+ # If you get unexpected characters appearing in your rendered document,
21
+ # check this.
22
+ #
23
+ # If the current font is a built-in one, although the string must be
24
+ # encoded as UTF-8, only characters that are available in WinAnsi
25
+ # are allowed.
26
+ #
27
+ # If an empty box is rendered to your PDF instead of the character you
28
+ # wanted it usually means the current font doesn't include that character.
29
+ #
30
+ # == Options (default values marked in [])
31
+ #
32
+ # <tt>:kerning</tt>:: <tt>boolean</tt>. Whether or not to use kerning (if it
33
+ # is available with the current font) [true]
34
+ # <tt>:size</tt>:: <tt>number</tt>. The font size to use. [current font
35
+ # size]
36
+ # <tt>:style</tt>:: The style to use. The requested style must be part of
37
+ # the current font familly. [current style]
38
+ #
39
+ # <tt>:at</tt>:: <tt>[x, y]</tt>. The upper left corner of the box
40
+ # [@document.bounds.left, @document.bounds.top]
41
+ # <tt>:width</tt>:: <tt>number</tt>. The width of the box
42
+ # [@document.bounds.right - @at[0]]
43
+ # <tt>:height</tt>:: <tt>number</tt>. The height of the box [@at[1] -
44
+ # @document.bounds.bottom]
45
+ # <tt>:align</tt>:: <tt>:left</tt>, <tt>:center</tt>, or <tt>:right</tt>.
46
+ # Alignment within the bounding box [:left]
47
+ # <tt>:valign</tt>:: <tt>:top</tt>, <tt>:center</tt>, or <tt>:bottom</tt>.
48
+ # Vertical alignment within the bounding box [:top]
49
+ # <tt>:rotation</tt>:: <tt>number</tt>. The angle to rotate the text
50
+ # <tt>:rotate_around</tt>:: <tt>:center</tt>, <tt>:upper_left</tt>,
51
+ # <tt>:upper_right</tt>, <tt>:lower_right</tt>,
52
+ # or <tt>:lower_left</tt>. The point around which
53
+ # to rotate the text [:upper_left]
54
+ # <tt>:leading</tt>:: <tt>number</tt>. Additional space between lines [0]
55
+ # <tt>:single_line</tt>:: <tt>boolean</tt>. If true, then only the first
56
+ # line will be drawn [false]
57
+ # <tt>:skip_encoding</tt>:: <tt>boolean</tt> [false]
58
+ # <tt>:overflow</tt>:: <tt>:truncate</tt>, <tt>:shrink_to_fit</tt>,
59
+ # <tt>:expand</tt>, or <tt>:ellipses</tt>. This
60
+ # controls the behavior when
61
+ # the amount of text exceeds the available space
62
+ # [:truncate]
63
+ # <tt>:min_font_size</tt>:: <tt>number</tt>. The minimum font size to use
64
+ # when :overflow is set to :shrink_to_fit (that is
65
+ # the font size will not be
66
+ # reduced to less than this value, even if it
67
+ # means that some text will be cut off). [5]
68
+ # <tt>:line_wrap</tt>:: <tt>object</tt>. An object used for custom line
69
+ # wrapping on a case by case basis. Note that if you
70
+ # want to change wrapping document-wide, do
71
+ # pdf.default_line_wrap = MyLineWrap.new. Your custom
72
+ # object must have a wrap_line method that accept a
73
+ # single <tt>line</tt> of text and an
74
+ # <tt>options</tt> hash and returns the string from
75
+ # that single line that can fit on the line under
76
+ # the conditions defined by <tt>options</tt>. If
77
+ # omitted, the line wrap object is used.
78
+ # The options hash passed into the wrap_object proc
79
+ # includes the following options:
80
+ # <tt>:width</tt>:: the width available for the
81
+ # current line of text
82
+ # <tt>:document</tt>:: the pdf object
83
+ # <tt>:kerning</tt>:: boolean
84
+ # <tt>:size</tt>:: the font size
85
+ #
86
+ # Returns any text that did not print under the current settings.
87
+ # NOTE: if an AFM font is used, then the returned text is encoded in
88
+ # WinAnsi. Subsequent calls to text_box that pass this returned text back
89
+ # into text box must include a :skip_encoding => true option. This is
90
+ # unnecessary when using TTF fonts because those operate on UTF-8 encoding.
91
+ #
92
+ def text_box(string, options)
93
+ Text::Box.new(string, options.merge(:document => self)).render
94
+ end
95
+
96
+ # Generally, one would use the text_box convenience method. However, using
97
+ # Text::Box.new in conjunction with render() enables one to do look-ahead
98
+ # calculations prior to placing text on the page, or to determine how much
99
+ # vertical space was consumed by the printed text
100
+ #
101
+ class Box
102
+
103
+ # The text that was successfully printed (or, if <tt>dry_run</tt> was
104
+ # used, the test that would have been successfully printed)
105
+ attr_reader :text
106
+ # The upper left corner of the text box
107
+ attr_reader :at
108
+ # The line height of the last line printed
109
+ attr_reader :line_height
110
+ # The height of the ascender of the last line printed
111
+ attr_reader :ascender
112
+ # The height of the descender of the last line printed
113
+ attr_reader :descender
114
+ # The leading used during printing
115
+ attr_reader :leading
116
+
117
+ # See Prawn::Text#text_box for valid options
118
+ #
119
+ def initialize(string, options={})
120
+ @inked = false
121
+ Prawn.verify_options(valid_options, options)
122
+ options = options.dup
123
+ @overflow = options[:overflow] || :truncate
124
+ @original_string = string
125
+ @text = nil
126
+
127
+ @document = options[:document]
128
+ @at = options[:at] ||
129
+ [@document.bounds.left, @document.bounds.top]
130
+ @width = options[:width] ||
131
+ @document.bounds.right - @at[0]
132
+ @height = options[:height] ||
133
+ @at[1] - @document.bounds.bottom
134
+ @align = options[:align] || :left
135
+ @vertical_align = options[:valign] || :top
136
+ @leading = options[:leading] || 0
137
+ @rotation = options[:rotation] || 0
138
+ @rotate_around = options[:rotate_around] || :upper_left
139
+ @single_line = options[:single_line]
140
+ @skip_encoding = options[:skip_encoding] || @document.skip_encoding
141
+
142
+ if @overflow == :expand
143
+ # if set to expand, then we simply set the bottom
144
+ # as the bottom of the document bounds, since that
145
+ # is the maximum we should expand to
146
+ @height = @at[1] - @document.bounds.bottom
147
+ @overflow = :truncate
148
+ end
149
+ @min_font_size = options[:min_font_size] || 5
150
+ @line_wrap = options [:line_wrap] || @document.default_line_wrap
151
+ @options = @document.text_options.merge(:kerning => options[:kerning],
152
+ :size => options[:size],
153
+ :style => options[:style])
154
+ end
155
+
156
+ # Render text to the document based on the settings defined in initialize.
157
+ #
158
+ # In order to facilitate look-ahead calculations, <tt>render</tt> accepts
159
+ # a <tt>:dry_run => true</tt> option. If provided then everything is
160
+ # executed as if rendering, with the exception that nothing is drawn on
161
+ # the page. Useful for look-ahead computations of height, unprinted text,
162
+ # etc.
163
+ #
164
+ # Returns any text that did not print under the current settings
165
+ #
166
+ def render(flags={})
167
+ # dup because normalize_encoding changes the string
168
+ string = @original_string.dup
169
+ unprinted_text = ''
170
+ @document.save_font do
171
+ process_options
172
+
173
+ unless @skip_encoding
174
+ @document.font.normalize_encoding!(string)
175
+ end
176
+
177
+ @document.font_size(@font_size) do
178
+ shrink_to_fit(string) if @overflow == :shrink_to_fit
179
+ process_vertical_alignment(string)
180
+ @inked = true unless flags[:dry_run]
181
+ if @rotation != 0 && @inked
182
+ unprinted_text = render_rotated(string)
183
+ else
184
+ unprinted_text = _render(string)
185
+ end
186
+ @inked = false
187
+ end
188
+ end
189
+ unprinted_text
190
+ end
191
+
192
+ # The height actually used during the previous <tt>render</tt>
193
+ #
194
+ def height
195
+ return 0 if @baseline_y.nil? || @descender.nil?
196
+ # baseline is already pushed down one line below the current
197
+ # line, so we need to subtract line line_height and leading,
198
+ # but we need to add in the descender since baseline is
199
+ # above the descender
200
+ @baseline_y.abs + @descender - @line_height - @leading
201
+ end
202
+
203
+ private
204
+
205
+ def valid_options
206
+ Text::VALID_TEXT_OPTIONS.dup.concat([:at, :height, :width,
207
+ :align, :valign,
208
+ :overflow, :min_font_size,
209
+ :line_wrap,
210
+ :leading,
211
+ :document,
212
+ :rotation,
213
+ :rotate_around,
214
+ :single_line,
215
+ :skip_encoding])
216
+ end
217
+
218
+ def process_vertical_alignment(string)
219
+ return if @vertical_align == :top
220
+ _render(string)
221
+ case @vertical_align
222
+ when :center
223
+ @at[1] = @at[1] - (@height - height) * 0.5
224
+ when :bottom
225
+ @at[1] = @at[1] - (@height - height)
226
+ end
227
+ @height = height
228
+ end
229
+
230
+ # Decrease the font size until the text fits or the min font
231
+ # size is reached
232
+ def shrink_to_fit(string)
233
+ while (unprinted_text = _render(string)).length > 0 &&
234
+ @font_size > @min_font_size
235
+ @font_size -= 0.5
236
+ @document.font_size = @font_size
237
+ end
238
+ end
239
+
240
+ def process_options
241
+ # must be performed within a save_font bock because
242
+ # document.process_text_options sets the font
243
+ @document.process_text_options(@options)
244
+ @font_size = @options[:size]
245
+ @kerning = @options[:kerning]
246
+ end
247
+
248
+ def render_rotated(string)
249
+ unprinted_text = ''
250
+
251
+ case @rotate_around
252
+ when :center
253
+ x = @at[0] + @width * 0.5
254
+ y = @at[1] - @height * 0.5
255
+ when :upper_right
256
+ x = @at[0] + @width
257
+ y = @at[1]
258
+ when :lower_right
259
+ x = @at[0] + @width
260
+ y = @at[1] - @height
261
+ when :lower_left
262
+ x = @at[0]
263
+ y = @at[1] - @height
264
+ else
265
+ x = @at[0]
266
+ y = @at[1]
267
+ end
268
+
269
+ @document.rotate(@rotation, :origin => [x, y]) do
270
+ unprinted_text = _render(string)
271
+ end
272
+ unprinted_text
273
+ end
274
+
275
+ def _render(remaining_text)
276
+ @line_height = @document.font.height
277
+ @descender = @document.font.descender
278
+ @ascender = @document.font.ascender
279
+ @baseline_y = -@ascender
280
+
281
+ printed_text = []
282
+
283
+ while remaining_text &&
284
+ remaining_text.length > 0 &&
285
+ @baseline_y.abs + @descender <= @height
286
+ line_to_print = @line_wrap.wrap_line(remaining_text.first_line,
287
+ :document => @document,
288
+ :kerning => @kerning,
289
+ :size => @font_size,
290
+ :width => @width)
291
+
292
+ if line_to_print.empty? && remaining_text.length > 0
293
+ raise Errors::CannotFit
294
+ end
295
+
296
+ remaining_text = remaining_text.slice(line_to_print.length..
297
+ remaining_text.length)
298
+ print_ellipses = (@overflow == :ellipses && last_line? &&
299
+ remaining_text.length > 0)
300
+ printed_text << print_line(line_to_print, print_ellipses)
301
+ @baseline_y -= (@line_height + @leading)
302
+ break if @single_line
303
+ end
304
+
305
+ @text = printed_text.join("\n") if @inked
306
+
307
+ remaining_text
308
+ end
309
+
310
+ def print_line(line_to_print, print_ellipses)
311
+ # strip so that trailing and preceding white space don't
312
+ # interfere with alignment
313
+ line_to_print.strip!
314
+
315
+ insert_ellipses(line_to_print) if print_ellipses
316
+
317
+ case(@align)
318
+ when :left
319
+ x = @at[0]
320
+ when :center
321
+ line_width = @document.width_of(line_to_print, :kerning => @kerning)
322
+ x = @at[0] + @width * 0.5 - line_width * 0.5
323
+ when :right
324
+ line_width = @document.width_of(line_to_print, :kerning => @kerning)
325
+ x = @at[0] + @width - line_width
326
+ end
327
+
328
+ y = @at[1] + @baseline_y
329
+
330
+ if @inked
331
+ @document.draw_text!(line_to_print, :at => [x, y],
332
+ :size => @font_size, :kerning => @kerning)
333
+ end
334
+
335
+ line_to_print
336
+ end
337
+
338
+ def last_line?
339
+ @baseline_y.abs + @descender > @height - @line_height
340
+ end
341
+
342
+ def insert_ellipses(line_to_print)
343
+ if @document.width_of(line_to_print + "...",
344
+ :kerning => @kerning) < @width
345
+ line_to_print.insert(-1, "...")
346
+ else
347
+ line_to_print[-3..-1] = "..." if line_to_print.length > 3
348
+ end
349
+ end
350
+ end
351
+
352
+ class LineWrap
353
+ def wrap_line(line, options)
354
+ @document = options[:document]
355
+ @size = options[:size]
356
+ @kerning = options[:kerning]
357
+ @width = options[:width]
358
+ @accumulated_width = 0
359
+ @output = ""
360
+
361
+ scan_pattern = @document.font.unicode? ? /\S+|\s+/ : /\S+|\s+/n
362
+ space_scan_pattern = @document.font.unicode? ? /\s/ : /\s/n
363
+
364
+ line.scan(scan_pattern).each do |segment|
365
+ # yes, this block could be split out into another method, but it is
366
+ # called on every word printed, so I'm keeping it here for speed
367
+
368
+ segment_width = @document.width_of(segment,
369
+ :size => @size,
370
+ :kerning => @kerning)
371
+
372
+ if @accumulated_width + segment_width <= @width
373
+ @accumulated_width += segment_width
374
+ @output << segment
375
+ else
376
+ # if the line contains white space, don't split the
377
+ # final word that doesn't fit, just return what fits nicely
378
+ break if @output =~ space_scan_pattern
379
+ wrap_by_char(segment)
380
+ break
381
+ end
382
+ end
383
+ @output
384
+ end
385
+
386
+ private
387
+
388
+ def wrap_by_char(segment)
389
+ if @document.font.unicode?
390
+ segment.unpack("U*").each do |char_int|
391
+ return unless append_char([char_int].pack("U"))
392
+ end
393
+ else
394
+ segment.each_char do |char|
395
+ return unless append_char(char)
396
+ end
397
+ end
398
+ end
399
+
400
+ def append_char(char)
401
+ @accumulated_width += @document.width_of(char,
402
+ :size => @size,
403
+ :kerning => @kerning)
404
+ if @accumulated_width >= @width
405
+ false
406
+ else
407
+ @output << char
408
+ true
409
+ end
410
+ end
411
+ end
412
+
413
+ end
414
+ end
@@ -0,0 +1,36 @@
1
+ require "rubygems"
2
+ require "rake"
3
+ require "rake/gempackagetask"
4
+
5
+ # This is to be used to generate the prawn meta-gem only. You probably want to
6
+ # build prawn-core unless you know exactly what you are doing, so do rake gem
7
+ # instead.
8
+
9
+ spec = Gem::Specification.new do |spec|
10
+ spec.name = "prawn"
11
+ spec.version = "0.8.0"
12
+ spec.platform = Gem::Platform::RUBY
13
+ spec.summary = "A fast and nimble PDF generator for Ruby"
14
+ spec.add_dependency('prawn-core', '= 0.8.0')
15
+ spec.add_dependency('prawn-layout', '= 0.8.0')
16
+ spec.add_dependency('prawn-security''= 0.8.0')
17
+ spec.files = Dir.glob("lib/*")
18
+ spec.require_path = "lib"
19
+ spec.author = "Gregory Brown"
20
+ spec.email = " gregory.t.brown@gmail.com"
21
+ spec.rubyforge_project = "prawn"
22
+ spec.homepage = "http://prawn.majesticseacreature.com"
23
+ spec.description = "Prawn is a fast, tiny, and nimble PDF generator for Ruby"
24
+ spec.post_install_message = %{
25
+ Welcome to Prawn, the best pure-Ruby PDF solution ever!
26
+ This is the bleeding edge of 0.8. You probably shouldn't be using it.
27
+
28
+ Try the latest stable release instead, or the stable branch at:
29
+ http://github.com/sandal/prawn
30
+ }
31
+ end
32
+
33
+ Rake::GemPackageTask.new(spec) do |pkg|
34
+ pkg.need_zip = true
35
+ pkg.need_tar = true
36
+ end
@@ -0,0 +1,2 @@
1
+ require "rubygems"
2
+ require "prawn/core"