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,69 @@
1
+ module TTFunk
2
+ module Encoding
3
+ class Windows1252
4
+ TO_UNICODE = Hash.new { |h,k| k }
5
+ TO_UNICODE.update(
6
+ 0x80 => 0x20AC, 0x82 => 0x201A, 0x83 => 0x0192, 0x84 => 0x201E, 0x85 => 0x2026,
7
+ 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02C6, 0x89 => 0x2030, 0x8A => 0x0160,
8
+ 0x8B => 0x2039, 0x8C => 0x0152, 0x8E => 0x017D, 0x91 => 0x2018, 0x92 => 0x2019,
9
+ 0x93 => 0x201C, 0x94 => 0x201D, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014,
10
+ 0x98 => 0x02DC, 0x99 => 0x2122, 0x9A => 0x0161, 0x9B => 0x203A, 0x9C => 0x0152,
11
+ 0x9E => 0x017E, 0x9F => 0x0178
12
+ )
13
+
14
+ FROM_UNICODE = {}
15
+ (0..255).each { |key| FROM_UNICODE[TO_UNICODE[key]] = key }
16
+
17
+ # Maps Windows-1252 codes to their corresponding index in the Postscript glyph
18
+ # table (see TTFunk::Table::Post::Format10). If any entry in this array is a string,
19
+ # it is a postscript glyph that is not in the standard list, and which should be
20
+ # emitted specially in the TTF postscript table ('post', see format 2).
21
+ POSTSCRIPT_GLYPH_MAPPING = [
22
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
25
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
26
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
27
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
28
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
29
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 0,
30
+ "Euro", 0, 196, 166, 197, 171, 130, 194, 216, 198, 228, 190, 176, 0, 230, 0,
31
+ 0, 182, 183, 180, 181, 135, 178, 179, 217, 140, 229, 191, 177, 0, 231, 186,
32
+ 3, 163, 132, 133, 189, 150, 232, 134, 142, 139, 157, 169, 164, 16, 138, 218,
33
+ 131, 147, 242, 243, 141, 151, 136, 195, 222, 241, 158, 170, 245, 244, 246, 162,
34
+ 173, 201, 199, 174, 98, 99, 144, 100, 203, 101, 200, 202, 207, 204, 205, 206,
35
+ 233, 102, 211, 208, 209, 175, 103, 240, 145, 214, 212, 213, 104, 235, 237, 137,
36
+ 106, 105, 107, 109, 108, 110, 160, 111, 113, 112, 114, 115, 117, 116, 118, 119,
37
+ 234, 120, 122, 121, 123, 125, 124, 184, 161, 127, 126, 128, 129, 236, 238, 186
38
+ ]
39
+
40
+ def self.covers?(character)
41
+ !FROM_UNICODE[character].nil?
42
+ end
43
+
44
+ def self.to_utf8(string)
45
+ to_unicode_codepoints(string.unpack("C*")).pack("U*")
46
+ end
47
+
48
+ def self.to_unicode(string)
49
+ to_unicode_codepoints(string.unpack("C*")).pack("n*")
50
+ end
51
+
52
+ def self.from_utf8(string)
53
+ from_unicode_codepoints(string.unpack("U*")).pack("C*")
54
+ end
55
+
56
+ def self.from_unicode(string)
57
+ from_unicode_codepoints(string.unpack("n*")).pack("C*")
58
+ end
59
+
60
+ def self.to_unicode_codepoints(array)
61
+ array.map { |code| TO_UNICODE[code] }
62
+ end
63
+
64
+ def self.from_unicode_codepoints(array)
65
+ array.map { |code| FROM_UNICODE[code] || 0 }
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,44 @@
1
+ module TTFunk
2
+ module Reader
3
+ private
4
+
5
+ def io
6
+ @file.contents
7
+ end
8
+
9
+ def read(bytes, format)
10
+ io.read(bytes).unpack(format)
11
+ end
12
+
13
+ def read_signed(count)
14
+ read(count*2, "n*").map { |i| to_signed(i) }
15
+ end
16
+
17
+ def to_signed(n)
18
+ (n>=0x8000) ? -((n ^ 0xFFFF) + 1) : n
19
+ end
20
+
21
+ def parse_from(position)
22
+ saved, io.pos = io.pos, position
23
+ result = yield position
24
+ io.pos = saved
25
+ return result
26
+ end
27
+
28
+ # For debugging purposes
29
+ def hexdump(string)
30
+ bytes = string.unpack("C*")
31
+ bytes.each_with_index do |c, i|
32
+ print "%02X" % c
33
+ if (i+1) % 16 == 0
34
+ puts
35
+ elsif (i+1) % 8 == 0
36
+ print " "
37
+ else
38
+ print " "
39
+ end
40
+ end
41
+ puts unless bytes.length % 16 == 0
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,78 @@
1
+ module TTFunk
2
+ class ResourceFile
3
+ attr_reader :map
4
+
5
+ def self.open(path)
6
+ ::File.open(path, "rb") do |io|
7
+ file = new(io)
8
+ yield file
9
+ end
10
+ end
11
+
12
+ def initialize(io)
13
+ @io = io
14
+
15
+ data_offset, map_offset, data_length, map_length = @io.read(16).unpack("N*")
16
+
17
+ @map = {}
18
+ @io.pos = map_offset + 24 # skip header copy, next map handle, file reference, and attrs
19
+ type_list_offset, name_list_offset = @io.read(4).unpack("n*")
20
+
21
+ type_list_offset += map_offset
22
+ name_list_offset += map_offset
23
+
24
+ @io.pos = type_list_offset
25
+ max_index = @io.read(2).unpack("n").first
26
+ 0.upto(max_index) do
27
+ type, max_type_index, ref_list_offset = @io.read(8).unpack("A4nn")
28
+ @map[type] = { :list => [], :named => {} }
29
+
30
+ parse_from(type_list_offset + ref_list_offset) do
31
+ 0.upto(max_type_index) do
32
+ id, name_ofs, attr = @io.read(5).unpack("nnC")
33
+ data_ofs = @io.read(3)
34
+ data_ofs = data_offset + [0, data_ofs].pack("CA*").unpack("N").first
35
+ handle = @io.read(4).unpack("N").first
36
+
37
+ entry = { :id => id, :attributes => attr, :offset => data_ofs, :handle => handle }
38
+
39
+ if name_list_offset + name_ofs < map_offset + map_length
40
+ parse_from(name_ofs + name_list_offset) do
41
+ len = @io.read(1).unpack("C").first
42
+ entry[:name] = @io.read(len)
43
+ end
44
+ end
45
+
46
+ @map[type][:list] << entry
47
+ @map[type][:named][entry[:name]] = entry if entry[:name]
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def [](type, index=0)
54
+ if @map[type]
55
+ collection = index.is_a?(Fixnum) ? :list : :named
56
+ if @map[type][collection][index]
57
+ parse_from(@map[type][collection][index][:offset]) do
58
+ length = @io.read(4).unpack("N").first
59
+ return @io.read(length)
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def resources_for(type)
66
+ (@map[type] && @map[type][:named] || {}).keys
67
+ end
68
+
69
+ private
70
+
71
+ def parse_from(offset)
72
+ saved, @io.pos = @io.pos, offset
73
+ yield
74
+ ensure
75
+ @io.pos = saved
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,18 @@
1
+ require 'ttfunk/subset/unicode'
2
+ require 'ttfunk/subset/unicode_8bit'
3
+ require 'ttfunk/subset/mac_roman'
4
+ require 'ttfunk/subset/windows_1252'
5
+
6
+ module TTFunk
7
+ module Subset
8
+ def self.for(original, encoding)
9
+ case encoding.to_sym
10
+ when :unicode then Unicode.new(original)
11
+ when :unicode_8bit then Unicode8Bit.new(original)
12
+ when :mac_roman then MacRoman.new(original)
13
+ when :windows_1252 then Windows1252.new(original)
14
+ else raise NotImplementedError, "encoding #{encoding} is not supported"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,141 @@
1
+ require 'ttfunk/table/cmap'
2
+ require 'ttfunk/table/glyf'
3
+ require 'ttfunk/table/head'
4
+ require 'ttfunk/table/hhea'
5
+ require 'ttfunk/table/hmtx'
6
+ require 'ttfunk/table/kern'
7
+ require 'ttfunk/table/loca'
8
+ require 'ttfunk/table/maxp'
9
+ require 'ttfunk/table/name'
10
+ require 'ttfunk/table/post'
11
+ require 'ttfunk/table/simple'
12
+
13
+ module TTFunk
14
+ module Subset
15
+ class Base
16
+ attr_reader :original
17
+
18
+ def initialize(original)
19
+ @original = original
20
+ end
21
+
22
+ def unicode?
23
+ false
24
+ end
25
+
26
+ def to_unicode_map
27
+ {}
28
+ end
29
+
30
+ def encode(options={})
31
+ cmap_table = new_cmap_table(options)
32
+ glyphs = collect_glyphs(original_glyph_ids)
33
+
34
+ old2new_glyph = cmap_table[:charmap].inject({ 0 => 0 }) { |map, (code, ids)| map[ids[:old]] = ids[:new]; map }
35
+ next_glyph_id = cmap_table[:max_glyph_id]
36
+
37
+ glyphs.keys.each do |old_id|
38
+ unless old2new_glyph.key?(old_id)
39
+ old2new_glyph[old_id] = next_glyph_id
40
+ next_glyph_id += 1
41
+ end
42
+ end
43
+
44
+ new2old_glyph = old2new_glyph.invert
45
+
46
+ # "mandatory" tables. Every font should ("should") have these, including
47
+ # the cmap table (encoded above).
48
+ glyf_table = TTFunk::Table::Glyf.encode(glyphs, new2old_glyph, old2new_glyph)
49
+ loca_table = TTFunk::Table::Loca.encode(glyf_table[:offsets])
50
+ hmtx_table = TTFunk::Table::Hmtx.encode(original.horizontal_metrics, new2old_glyph)
51
+ hhea_table = TTFunk::Table::Hhea.encode(original.horizontal_header, hmtx_table)
52
+ maxp_table = TTFunk::Table::Maxp.encode(original.maximum_profile, old2new_glyph)
53
+ post_table = TTFunk::Table::Post.encode(original.postscript, new2old_glyph)
54
+ name_table = TTFunk::Table::Name.encode(original.name)
55
+ head_table = TTFunk::Table::Head.encode(original.header, loca_table)
56
+
57
+ # "optional" tables. Fonts may omit these if they do not need them. Because they
58
+ # apply globally, we can simply copy them over, without modification, if they
59
+ # exist.
60
+ os2_table = original.os2.raw
61
+ cvt_table = TTFunk::Table::Simple.new(original, "cvt ").raw
62
+ fpgm_table = TTFunk::Table::Simple.new(original, "fpgm").raw
63
+ prep_table = TTFunk::Table::Simple.new(original, "prep").raw
64
+
65
+ # for PDF's, the kerning info is all included in the PDF as the text is
66
+ # drawn. Thus, the PDF readers do not actually use the kerning info in
67
+ # embedded fonts. If the library is used for something else, the generated
68
+ # subfont may need a kerning table... in that case, you need to opt into it.
69
+ if options[:kerning]
70
+ kern_table = TTFunk::Table::Kern.encode(original.kerning, old2new_glyph)
71
+ end
72
+
73
+ tables = { 'cmap' => cmap_table[:table],
74
+ 'glyf' => glyf_table[:table],
75
+ 'loca' => loca_table[:table],
76
+ 'kern' => kern_table,
77
+ 'hmtx' => hmtx_table[:table],
78
+ 'hhea' => hhea_table,
79
+ 'maxp' => maxp_table,
80
+ 'OS/2' => os2_table,
81
+ 'post' => post_table,
82
+ 'name' => name_table,
83
+ 'head' => head_table,
84
+ 'prep' => prep_table,
85
+ 'fpgm' => fpgm_table,
86
+ 'cvt ' => cvt_table }
87
+
88
+ tables.delete_if { |tag, table| table.nil? }
89
+
90
+ search_range = (Math.log(tables.length) / Math.log(2)).to_i * 16
91
+ entry_selector = (Math.log(search_range) / Math.log(2)).to_i
92
+ range_shift = tables.length * 16 - search_range
93
+
94
+ newfont = [original.directory.scaler_type, tables.length, search_range, entry_selector, range_shift].pack("Nn*")
95
+
96
+ directory_size = tables.length * 16
97
+ offset = newfont.length + directory_size
98
+
99
+ table_data = ""
100
+ head_offset = nil
101
+ tables.each do |tag, data|
102
+ newfont << [tag, checksum(data), offset, data.length].pack("A4N*")
103
+ table_data << data
104
+ head_offset = offset if tag == 'head'
105
+ offset += data.length
106
+ while offset % 4 != 0
107
+ offset += 1
108
+ table_data << "\0"
109
+ end
110
+ end
111
+
112
+ newfont << table_data
113
+ sum = checksum(newfont)
114
+ adjustment = 0xB1B0AFBA - sum
115
+ newfont[head_offset+8,4] = [adjustment].pack("N")
116
+
117
+ return newfont
118
+ end
119
+
120
+ private
121
+
122
+ def unicode_cmap
123
+ @unicode_cmap ||= @original.cmap.unicode.first
124
+ end
125
+
126
+ def checksum(data)
127
+ data += "\0" * (4 - data.length % 4) unless data.length % 4 == 0
128
+ data.unpack("N*").inject(0) { |sum, dword| sum + dword } & 0xFFFF_FFFF
129
+ end
130
+
131
+ def collect_glyphs(glyph_ids)
132
+ glyphs = glyph_ids.inject({}) { |h, id| h[id] = original.glyph_outlines.for(id); h }
133
+ additional_ids = glyphs.values.select { |g| g && g.compound? }.map { |g| g.glyph_ids }.flatten
134
+
135
+ glyphs.update(collect_glyphs(additional_ids)) if additional_ids.any?
136
+
137
+ return glyphs
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,46 @@
1
+ require 'set'
2
+ require 'ttfunk/subset/base'
3
+ require 'ttfunk/encoding/mac_roman'
4
+
5
+ module TTFunk
6
+ module Subset
7
+ class MacRoman < Base
8
+ def initialize(original)
9
+ super
10
+ @subset = Array.new(256)
11
+ end
12
+
13
+ def use(character)
14
+ @subset[Encoding::MacRoman::FROM_UNICODE[character]] = character
15
+ end
16
+
17
+ def covers?(character)
18
+ Encoding::MacRoman.covers?(character)
19
+ end
20
+
21
+ def includes?(character)
22
+ code = Encoding::MacRoman::FROM_UNICODE[character]
23
+ code && @subset[code]
24
+ end
25
+
26
+ def from_unicode(character)
27
+ Encoding::MacRoman::FROM_UNICODE[character]
28
+ end
29
+
30
+ protected
31
+
32
+ def new_cmap_table(options)
33
+ mapping = {}
34
+ @subset.each_with_index do |unicode, roman|
35
+ mapping[roman] = unicode_cmap[unicode] if roman
36
+ end
37
+
38
+ TTFunk::Table::Cmap.encode(mapping, :mac_roman)
39
+ end
40
+
41
+ def original_glyph_ids
42
+ ([0] + @subset.map { |unicode| unicode && unicode_cmap[unicode] }).compact.uniq.sort
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,48 @@
1
+ require 'set'
2
+ require 'ttfunk/subset/base'
3
+
4
+ module TTFunk
5
+ module Subset
6
+ class Unicode < Base
7
+ def initialize(original)
8
+ super
9
+ @subset = Set.new
10
+ end
11
+
12
+ def unicode?
13
+ true
14
+ end
15
+
16
+ def to_unicode_map
17
+ @subset.inject({}) { |map, code| map[code] = code; map }
18
+ end
19
+
20
+ def use(character)
21
+ @subset << character
22
+ end
23
+
24
+ def covers?(character)
25
+ true
26
+ end
27
+
28
+ def includes?(character)
29
+ @subset.includes(character)
30
+ end
31
+
32
+ def from_unicode(character)
33
+ character
34
+ end
35
+
36
+ protected
37
+
38
+ def new_cmap_table(options)
39
+ mapping = @subset.inject({}) { |map, code| map[code] = unicode_cmap[code]; map }
40
+ TTFunk::Table::Cmap.encode(mapping, :unicode)
41
+ end
42
+
43
+ def original_glyph_ids
44
+ ([0] + @subset.map { |code| unicode_cmap[code] }).uniq.sort
45
+ end
46
+ end
47
+ end
48
+ end