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,63 @@
1
+ require 'set'
2
+ require 'ttfunk/subset/base'
3
+
4
+ module TTFunk
5
+ module Subset
6
+ class Unicode8Bit < Base
7
+ def initialize(original)
8
+ super
9
+ @subset = { 0x20 => 0x20 }
10
+ @unicodes = { 0x20 => 0x20 }
11
+ @next = 0x21 # apparently, PDF's don't like to use chars between 0-31
12
+ end
13
+
14
+ def unicode?
15
+ true
16
+ end
17
+
18
+ def to_unicode_map
19
+ @subset.dup
20
+ end
21
+
22
+ def use(character)
23
+ if !@unicodes.key?(character)
24
+ @subset[@next] = character
25
+ @unicodes[character] = @next
26
+ @next += 1
27
+ end
28
+ end
29
+
30
+ def covers?(character)
31
+ @unicodes.key?(character) || @next < 256
32
+ end
33
+
34
+ def includes?(character)
35
+ @unicodes.key?(character)
36
+ end
37
+
38
+ def from_unicode(character)
39
+ @unicodes[character]
40
+ end
41
+
42
+ protected
43
+
44
+ def new_cmap_table(options)
45
+ mapping = @subset.inject({}) do |map, (code,unicode)|
46
+ map[code] = unicode_cmap[unicode]
47
+ map
48
+ end
49
+
50
+ # since we're mapping a subset of the unicode glyphs into an
51
+ # arbitrary 256-character space, the actual encoding we're
52
+ # using is irrelevant. We choose MacRoman because it's a 256-character
53
+ # encoding that happens to be well-supported in both TTF and
54
+ # PDF formats.
55
+ TTFunk::Table::Cmap.encode(mapping, :mac_roman)
56
+ end
57
+
58
+ def original_glyph_ids
59
+ ([0] + @unicodes.keys.map { |unicode| unicode_cmap[unicode] }).uniq.sort
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,51 @@
1
+ require 'set'
2
+ require 'ttfunk/subset/base'
3
+ require 'ttfunk/encoding/windows_1252'
4
+
5
+ module TTFunk
6
+ module Subset
7
+ class Windows1252 < Base
8
+ def initialize(original)
9
+ super
10
+ @subset = Array.new(256)
11
+ end
12
+
13
+ def use(character)
14
+ @subset[Encoding::Windows1252::FROM_UNICODE[character]] = character
15
+ end
16
+
17
+ def covers?(character)
18
+ Encoding::Windows1252.covers?(character)
19
+ end
20
+
21
+ def includes?(character)
22
+ code = Encoding::Windows1252::FROM_UNICODE[character]
23
+ code && @subset[code]
24
+ end
25
+
26
+ def from_unicode(character)
27
+ Encoding::Windows1252::FROM_UNICODE[character]
28
+ end
29
+
30
+ protected
31
+
32
+ def new_cmap_table(options)
33
+ mapping = {}
34
+ @subset.each_with_index do |unicode, cp1252|
35
+ mapping[cp1252] = unicode_cmap[unicode] if cp1252
36
+ end
37
+
38
+ # yes, I really mean "mac roman". TTF has no cp1252 encoding, and the
39
+ # alternative would be to encode it using a format 4 unicode table, which
40
+ # is overkill. for our purposes, mac-roman suffices. (If we were building
41
+ # a _real_ font, instead of a PDF-embeddable subset, things would probably
42
+ # be different.)
43
+ TTFunk::Table::Cmap.encode(mapping, :mac_roman)
44
+ end
45
+
46
+ def original_glyph_ids
47
+ ([0] + @subset.map { |unicode| unicode && unicode_cmap[unicode] }).compact.uniq.sort
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,72 @@
1
+ require 'ttfunk/subset'
2
+
3
+ module TTFunk
4
+ class SubsetCollection
5
+ def initialize(original)
6
+ @original = original
7
+ @subsets = [Subset.for(@original, :mac_roman)]
8
+ end
9
+
10
+ def [](subset)
11
+ @subsets[subset]
12
+ end
13
+
14
+ # +characters+ should be an array of UTF-16 characters
15
+ def use(characters)
16
+ characters.each do |char|
17
+ covered = false
18
+ @subsets.each_with_index do |subset, i|
19
+ if subset.covers?(char)
20
+ subset.use(char)
21
+ covered = true
22
+ break
23
+ end
24
+ end
25
+
26
+ if !covered
27
+ @subsets << Subset.for(@original, :unicode_8bit)
28
+ @subsets.last.use(char)
29
+ end
30
+ end
31
+ end
32
+
33
+ # +characters+ should be an array of UTF-16 characters. Returns
34
+ # an array of subset chunks, where each chunk is another array of
35
+ # two elements. The first element is the subset number, and the
36
+ # second element is the string of characters to render with that
37
+ # font subset. The strings will be encoded for their subset font,
38
+ # and so may not look (in the raw) like what was passed in, but
39
+ # they will render correctly with the indicated subset font.
40
+ def encode(characters)
41
+ return [] if characters.empty?
42
+
43
+ # TODO: probably would be more optimal to nix the #use method,
44
+ # and merge it into this one, so it can be done in a single
45
+ # pass instead of two passes.
46
+ use(characters)
47
+
48
+ parts = []
49
+ current_subset = 0
50
+ current_char = 0
51
+ char = characters[current_char]
52
+
53
+ loop do
54
+ while @subsets[current_subset].includes?(char)
55
+ char = @subsets[current_subset].from_unicode(char)
56
+
57
+ if parts.empty? || parts.last[0] != current_subset
58
+ parts << [current_subset, char.chr]
59
+ else
60
+ parts.last[1] << char
61
+ end
62
+
63
+ current_char += 1
64
+ return parts if current_char >= characters.length
65
+ char = characters[current_char]
66
+ end
67
+
68
+ current_subset = (current_subset + 1) % @subsets.length
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,46 @@
1
+ require 'ttfunk/reader'
2
+
3
+ module TTFunk
4
+ class Table
5
+ include Reader
6
+
7
+ attr_reader :file
8
+ attr_reader :offset
9
+ attr_reader :length
10
+
11
+ def initialize(file)
12
+ @file = file
13
+
14
+ info = file.directory_info(tag)
15
+
16
+ if info
17
+ @offset = info[:offset]
18
+ @length = info[:length]
19
+
20
+ parse_from(@offset) { parse! }
21
+ end
22
+ end
23
+
24
+ def exists?
25
+ !@offset.nil?
26
+ end
27
+
28
+ def raw
29
+ if exists?
30
+ parse_from(offset) { io.read(length) }
31
+ else
32
+ nil
33
+ end
34
+ end
35
+
36
+ def tag
37
+ self.class.name.split(/::/).last.downcase
38
+ end
39
+
40
+ private
41
+
42
+ def parse!
43
+ # do nothing, by default
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ module TTFunk
2
+ class Table
3
+ class Cmap < Table
4
+ attr_reader :version
5
+ attr_reader :tables
6
+
7
+ def self.encode(charmap, encoding)
8
+ result = Cmap::Subtable.encode(charmap, encoding)
9
+
10
+ # pack 'version' and 'table-count'
11
+ result[:table] = [0, 1, result.delete(:subtable)].pack("nnA*")
12
+ return result
13
+ end
14
+
15
+ def unicode
16
+ @unicode ||= @tables.select { |table| table.unicode? }
17
+ end
18
+
19
+ private
20
+
21
+ def parse!
22
+ @version, table_count = read(4, "nn")
23
+ @tables = []
24
+
25
+ table_count.times do
26
+ @tables << Cmap::Subtable.new(file, offset)
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+
34
+ require 'ttfunk/table/cmap/subtable'
@@ -0,0 +1,54 @@
1
+ require 'ttfunk/encoding/mac_roman'
2
+ require 'ttfunk/encoding/windows_1252'
3
+
4
+ module TTFunk
5
+ class Table
6
+ class Cmap
7
+
8
+ module Format00
9
+ attr_reader :language
10
+ attr_reader :code_map
11
+
12
+ # Expects a hash mapping character codes to glyph ids (where the
13
+ # glyph ids are from the original font). Returns a hash including
14
+ # a new map (:charmap) that maps the characters in charmap to a
15
+ # another hash containing both the old (:old) and new (:new) glyph
16
+ # ids. The returned hash also includes a :subtable key, which contains
17
+ # the encoded subtable for the given charmap.
18
+ def self.encode(charmap)
19
+ next_id = 0
20
+ glyph_indexes = Array.new(256, 0)
21
+ glyph_map = { 0 => 0 }
22
+
23
+ new_map = charmap.keys.sort.inject({}) do |map, code|
24
+ glyph_map[charmap[code]] ||= next_id += 1
25
+ map[code] = { :old => charmap[code], :new => glyph_map[charmap[code]] }
26
+ glyph_indexes[code] = glyph_map[charmap[code]]
27
+ map
28
+ end
29
+
30
+ # format, length, language, indices
31
+ subtable = [0, 262, 0, *glyph_indexes].pack("nnnC*")
32
+
33
+ { :charmap => new_map, :subtable => subtable, :max_glyph_id => next_id+1 }
34
+ end
35
+
36
+ def [](code)
37
+ @code_map[code] || 0
38
+ end
39
+
40
+ def supported?
41
+ true
42
+ end
43
+
44
+ private
45
+
46
+ def parse_cmap!
47
+ length, @language = read(4, "nn")
48
+ @code_map = read(256, "C*")
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,126 @@
1
+ module TTFunk
2
+ class Table
3
+ class Cmap
4
+
5
+ module Format04
6
+ attr_reader :language
7
+ attr_reader :code_map
8
+
9
+ # Expects a hash mapping character codes to glyph ids (where the
10
+ # glyph ids are from the original font). Returns a hash including
11
+ # a new map (:charmap) that maps the characters in charmap to a
12
+ # another hash containing both the old (:old) and new (:new) glyph
13
+ # ids. The returned hash also includes a :subtable key, which contains
14
+ # the encoded subtable for the given charmap.
15
+ def self.encode(charmap)
16
+ end_codes = []
17
+ start_codes = []
18
+ next_id = 0
19
+ last = difference = nil
20
+
21
+ glyph_map = { 0 => 0 }
22
+ new_map = charmap.keys.sort.inject({}) do |map, code|
23
+ old = charmap[code]
24
+ glyph_map[old] ||= next_id += 1
25
+ map[code] = { :old => old, :new => glyph_map[old] }
26
+
27
+ delta = glyph_map[old] - code
28
+ if last.nil? || delta != difference
29
+ end_codes << last if last
30
+ start_codes << code
31
+ difference = delta
32
+ end
33
+ last = code
34
+
35
+ map
36
+ end
37
+
38
+ end_codes << last if last
39
+ end_codes << 0xFFFF
40
+ start_codes << 0xFFFF
41
+ segcount = start_codes.length
42
+
43
+ # build the conversion tables
44
+ deltas = []
45
+ range_offsets = []
46
+ glyph_indices = []
47
+
48
+ offset = 0
49
+ start_codes.zip(end_codes).each_with_index do |(a, b), segment|
50
+ if a == 0xFFFF
51
+ deltas << 0
52
+ range_offsets << 0
53
+ break
54
+ end
55
+
56
+ start_glyph_id = new_map[a][:new]
57
+ if a - start_glyph_id >= 0x8000
58
+ deltas << 0
59
+ range_offsets << 2 * (glyph_indices.length + segcount - segment)
60
+ a.upto(b) { |code| glyph_indices << new_map[code][:new] }
61
+ else
62
+ deltas << -a + start_glyph_id
63
+ range_offsets << 0
64
+ end
65
+ offset += 2
66
+ end
67
+
68
+ # format, length, language
69
+ subtable = [4, 16 + 8 * segcount + 2 * glyph_indices.length, 0].pack("nnn")
70
+
71
+ search_range = 2 * 2 ** (Math.log(segcount) / Math.log(2)).to_i
72
+ entry_selector = (Math.log(search_range / 2) / Math.log(2)).to_i
73
+ range_shift = (2 * segcount) - search_range
74
+ subtable << [segcount * 2, search_range, entry_selector, range_shift].pack("nnnn")
75
+
76
+ subtable << end_codes.pack("n*") << "\0\0" << start_codes.pack("n*")
77
+ subtable << deltas.pack("n*") << range_offsets.pack("n*") << glyph_indices.pack("n*")
78
+
79
+ { :charmap => new_map, :subtable => subtable, :max_glyph_id => next_id+1 }
80
+ end
81
+
82
+ def [](code)
83
+ @code_map[code] || 0
84
+ end
85
+
86
+ def supported?
87
+ true
88
+ end
89
+
90
+ private
91
+
92
+ def parse_cmap!
93
+ length, @language, segcount_x2 = read(6, "nnn")
94
+ segcount = segcount_x2 / 2
95
+
96
+ io.read(6) # skip searching hints
97
+
98
+ end_code = read(segcount_x2, "n*")
99
+ io.read(2) # skip reserved value
100
+ start_code = read(segcount_x2, "n*")
101
+ id_delta = read_signed(segcount)
102
+ id_range_offset = read(segcount_x2, "n*")
103
+
104
+ glyph_ids = read(length - io.pos + @offset, "n*")
105
+
106
+ @code_map = {}
107
+
108
+ end_code.each_with_index do |tail, i|
109
+ start_code[i].upto(tail) do |code|
110
+ if id_range_offset[i].zero?
111
+ glyph_id = code + id_delta[i]
112
+ else
113
+ index = id_range_offset[i] / 2 + (code - start_code[i]) - (segcount - i)
114
+ glyph_id = glyph_ids[index] || 0 # because some TTF fonts are broken
115
+ glyph_id += id_delta[i] if glyph_id != 0
116
+ end
117
+
118
+ @code_map[code] = glyph_id & 0xFFFF
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ end
125
+ end
126
+ end