origami 1.2.7 → 2.0.0

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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -0
  3. data/README.md +112 -0
  4. data/bin/config/pdfcop.conf.yml +232 -233
  5. data/bin/gui/about.rb +27 -37
  6. data/bin/gui/config.rb +108 -117
  7. data/bin/gui/file.rb +416 -365
  8. data/bin/gui/gtkhex.rb +1138 -1153
  9. data/bin/gui/hexview.rb +55 -57
  10. data/bin/gui/imgview.rb +48 -51
  11. data/bin/gui/menu.rb +388 -386
  12. data/bin/gui/properties.rb +114 -130
  13. data/bin/gui/signing.rb +571 -617
  14. data/bin/gui/textview.rb +77 -95
  15. data/bin/gui/treeview.rb +382 -387
  16. data/bin/gui/walker.rb +227 -232
  17. data/bin/gui/xrefs.rb +56 -60
  18. data/bin/pdf2pdfa +53 -57
  19. data/bin/pdf2ruby +212 -228
  20. data/bin/pdfcop +338 -348
  21. data/bin/pdfdecompress +58 -65
  22. data/bin/pdfdecrypt +56 -60
  23. data/bin/pdfencrypt +75 -80
  24. data/bin/pdfexplode +185 -182
  25. data/bin/pdfextract +201 -218
  26. data/bin/pdfmetadata +83 -82
  27. data/bin/pdfsh +4 -5
  28. data/bin/pdfwalker +1 -2
  29. data/bin/shell/.irbrc +45 -82
  30. data/bin/shell/console.rb +105 -130
  31. data/bin/shell/hexdump.rb +40 -64
  32. data/examples/README.md +34 -0
  33. data/examples/attachments/attachment.rb +38 -0
  34. data/examples/attachments/nested_document.rb +51 -0
  35. data/examples/encryption/encryption.rb +28 -0
  36. data/{samples/actions/triggerevents/trigger.rb → examples/events/events.rb} +13 -16
  37. data/examples/flash/flash.rb +37 -0
  38. data/{samples → examples}/flash/helloworld.swf +0 -0
  39. data/examples/forms/javascript.rb +54 -0
  40. data/examples/forms/xfa.rb +115 -0
  41. data/examples/javascript/hello_world.rb +22 -0
  42. data/examples/javascript/js_emulation.rb +54 -0
  43. data/examples/loop/goto.rb +32 -0
  44. data/examples/loop/named.rb +33 -0
  45. data/examples/signature/signature.rb +65 -0
  46. data/examples/uri/javascript.rb +56 -0
  47. data/examples/uri/open-uri.rb +21 -0
  48. data/examples/uri/submitform.rb +47 -0
  49. data/lib/origami.rb +29 -42
  50. data/lib/origami/3d.rb +350 -225
  51. data/lib/origami/acroform.rb +262 -288
  52. data/lib/origami/actions.rb +268 -288
  53. data/lib/origami/annotations.rb +697 -722
  54. data/lib/origami/array.rb +258 -184
  55. data/lib/origami/boolean.rb +74 -84
  56. data/lib/origami/catalog.rb +397 -434
  57. data/lib/origami/collections.rb +144 -0
  58. data/lib/origami/destinations.rb +233 -194
  59. data/lib/origami/dictionary.rb +253 -232
  60. data/lib/origami/encryption.rb +1274 -1243
  61. data/lib/origami/export.rb +232 -268
  62. data/lib/origami/extensions/fdf.rb +307 -220
  63. data/lib/origami/extensions/ppklite.rb +368 -435
  64. data/lib/origami/filespec.rb +197 -0
  65. data/lib/origami/filters.rb +301 -295
  66. data/lib/origami/filters/ascii.rb +177 -180
  67. data/lib/origami/filters/ccitt.rb +528 -535
  68. data/lib/origami/filters/crypt.rb +26 -35
  69. data/lib/origami/filters/dct.rb +46 -52
  70. data/lib/origami/filters/flate.rb +95 -94
  71. data/lib/origami/filters/jbig2.rb +49 -55
  72. data/lib/origami/filters/jpx.rb +38 -44
  73. data/lib/origami/filters/lzw.rb +189 -183
  74. data/lib/origami/filters/predictors.rb +221 -235
  75. data/lib/origami/filters/runlength.rb +103 -104
  76. data/lib/origami/font.rb +173 -186
  77. data/lib/origami/functions.rb +67 -81
  78. data/lib/origami/graphics.rb +25 -21
  79. data/lib/origami/graphics/colors.rb +178 -187
  80. data/lib/origami/graphics/instruction.rb +79 -85
  81. data/lib/origami/graphics/path.rb +142 -148
  82. data/lib/origami/graphics/patterns.rb +160 -167
  83. data/lib/origami/graphics/render.rb +43 -50
  84. data/lib/origami/graphics/state.rb +138 -153
  85. data/lib/origami/graphics/text.rb +188 -205
  86. data/lib/origami/graphics/xobject.rb +819 -815
  87. data/lib/origami/header.rb +63 -78
  88. data/lib/origami/javascript.rb +596 -597
  89. data/lib/origami/linearization.rb +285 -290
  90. data/lib/origami/metadata.rb +139 -148
  91. data/lib/origami/name.rb +112 -148
  92. data/lib/origami/null.rb +53 -62
  93. data/lib/origami/numeric.rb +162 -175
  94. data/lib/origami/obfuscation.rb +186 -174
  95. data/lib/origami/object.rb +593 -573
  96. data/lib/origami/outline.rb +42 -47
  97. data/lib/origami/outputintents.rb +73 -82
  98. data/lib/origami/page.rb +703 -592
  99. data/lib/origami/parser.rb +238 -290
  100. data/lib/origami/parsers/fdf.rb +41 -33
  101. data/lib/origami/parsers/pdf.rb +75 -95
  102. data/lib/origami/parsers/pdf/lazy.rb +137 -0
  103. data/lib/origami/parsers/pdf/linear.rb +64 -66
  104. data/lib/origami/parsers/ppklite.rb +34 -70
  105. data/lib/origami/pdf.rb +1030 -1005
  106. data/lib/origami/reference.rb +102 -102
  107. data/lib/origami/signature.rb +591 -609
  108. data/lib/origami/stream.rb +668 -551
  109. data/lib/origami/string.rb +397 -373
  110. data/lib/origami/template/patterns.rb +56 -0
  111. data/lib/origami/template/widgets.rb +151 -0
  112. data/lib/origami/trailer.rb +144 -158
  113. data/lib/origami/tree.rb +62 -0
  114. data/lib/origami/version.rb +23 -0
  115. data/lib/origami/webcapture.rb +88 -79
  116. data/lib/origami/xfa.rb +2863 -2882
  117. data/lib/origami/xreftable.rb +472 -384
  118. data/test/dataset/calc.pdf +85 -0
  119. data/test/dataset/crypto.pdf +82 -0
  120. data/test/dataset/empty.pdf +49 -0
  121. data/test/test_actions.rb +27 -0
  122. data/test/test_annotations.rb +90 -0
  123. data/test/test_pages.rb +31 -0
  124. data/test/test_pdf.rb +16 -0
  125. data/test/test_pdf_attachment.rb +34 -0
  126. data/test/test_pdf_create.rb +24 -0
  127. data/test/test_pdf_encrypt.rb +95 -0
  128. data/test/test_pdf_parse.rb +96 -0
  129. data/test/test_pdf_sign.rb +58 -0
  130. data/test/test_streams.rb +182 -0
  131. data/test/test_xrefs.rb +67 -0
  132. metadata +88 -58
  133. data/README +0 -67
  134. data/bin/pdf2graph +0 -121
  135. data/bin/pdfcocoon +0 -104
  136. data/lib/origami/file.rb +0 -233
  137. data/samples/README.txt +0 -45
  138. data/samples/actions/launch/calc.rb +0 -87
  139. data/samples/actions/launch/winparams.rb +0 -22
  140. data/samples/actions/loop/loopgoto.rb +0 -24
  141. data/samples/actions/loop/loopnamed.rb +0 -21
  142. data/samples/actions/named/named.rb +0 -31
  143. data/samples/actions/samba/smbrelay.rb +0 -26
  144. data/samples/actions/webbug/submitform.js +0 -26
  145. data/samples/actions/webbug/webbug-browser.rb +0 -68
  146. data/samples/actions/webbug/webbug-js.rb +0 -67
  147. data/samples/actions/webbug/webbug-reader.rb +0 -90
  148. data/samples/attachments/attach.rb +0 -40
  149. data/samples/attachments/attached.txt +0 -1
  150. data/samples/crypto/crypto.rb +0 -28
  151. data/samples/digsig/signed.rb +0 -46
  152. data/samples/exploits/cve-2008-2992-utilprintf.rb +0 -87
  153. data/samples/exploits/cve-2009-0927-geticon.rb +0 -65
  154. data/samples/exploits/exploit_customdictopen.rb +0 -55
  155. data/samples/exploits/getannots.rb +0 -69
  156. data/samples/flash/flash.rb +0 -31
  157. data/samples/javascript/attached.txt +0 -1
  158. data/samples/javascript/js.rb +0 -52
  159. data/templates/patterns.rb +0 -66
  160. data/templates/widgets.rb +0 -173
  161. data/templates/xdp.rb +0 -92
  162. data/test/ts_pdf.rb +0 -50
@@ -1,181 +1,174 @@
1
1
  =begin
2
2
 
3
- = File
4
- graphics/patterns.rb
5
-
6
- = Info
7
- This file is part of Origami, PDF manipulation framework for Ruby
8
- Copyright (C) 2010 Guillaume Delugré <guillaume AT security-labs DOT org>
9
- All right reserved.
10
-
11
- Origami is free software: you can redistribute it and/or modify
12
- it under the terms of the GNU Lesser General Public License as published by
13
- the Free Software Foundation, either version 3 of the License, or
14
- (at your option) any later version.
15
-
16
- Origami is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU Lesser General Public License for more details.
20
-
21
- You should have received a copy of the GNU Lesser General Public License
22
- along with Origami. If not, see <http://www.gnu.org/licenses/>.
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2016 Guillaume Delugré.
23
5
 
24
- =end
25
-
26
- module Origami
27
-
28
- module Graphics
29
-
30
- module Pattern
31
-
32
- module Type
33
- TILING = 1
34
- SHADING = 2
35
- end
36
-
37
- def self.included(receiver)
38
- receiver.field :Type, :Type => Name, :Default => :Pattern
39
- receiver.field :PatternType, :Type => Integer, :Required => true
40
- end
41
-
42
- class Tiling < ContentStream
43
- include Pattern
44
- include ResourcesHolder
45
-
46
- module PaintType
47
- COLOURED = 1
48
- UNCOLOURED = 2
49
- end
50
-
51
- module Type
52
- CONSTANT_SPACING = 1
53
- NO_DISTORTION = 2
54
- CONSTANT_SPACING_AND_FASTER_TILING = 3
55
- end
6
+ Origami is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Lesser General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
56
10
 
57
- field :PatternType, :Type => Integer, :Default => Pattern::Type::TILING, :Required => true
58
- field :PaintType, :Type => Integer, :Required => true
59
- field :TilingType, :Type => Integer, :Required => true
60
- field :BBox, :Type => Array, :Required => true
61
- field :XStep, :Type => Number, :Required => true
62
- field :YStep, :Type => Number, :Required => true
63
- field :Resources, :Type => Resources, :Required => true
64
- field :Matrix, :Type => Array, :Default => [ 1, 0, 0, 1, 0, 0 ]
65
-
66
- end
67
-
68
- class Shading < Dictionary
69
- include StandardObject
70
- include Pattern
71
-
72
- module Type
73
- FUNCTIONBASED = 1
74
- AXIAL = 2
75
- RADIAL = 3
76
- FREEFORM_TRIANGLE_MESH = 4
77
- LATTICEFORM_TRIANGLE_MESH = 5
78
- COONS_PATCH_MESH = 6
79
- TENSORPRODUCT_PATCH_MESH = 7
80
- end
11
+ Origami is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Lesser General Public License for more details.
81
15
 
82
- field :PatternType, :Type => Integer, :Default => Pattern::Type::SHADING, :Required => true
83
- field :Shading, :Type => [ Dictionary, Stream ], :Required => true
84
- field :Matrix, :Type => Array, :Default => [ 1, 0, 0, 1, 0, 0 ]
85
- field :ExtGState, :Type => Dictionary
86
-
87
- module ShadingObject
88
- def self.included(receiver)
89
- receiver.field :ShadingType, :Type => Integer, :Required => true
90
- receiver.field :ColorSpace, :Type => [ Name, Array ], :Required => true
91
- receiver.field :Background, :Type => Array
92
- receiver.field :BBox, :Type => Array
93
- receiver.field :AntiAlias, :Type => Boolean, :Default => false
94
- end
95
- end
96
-
97
- class FunctionBased < Dictionary
98
- include StandardObject
99
- include ShadingObject
100
-
101
- field :ShadingType, :Type => Integer, :Default => Shading::Type::FUNCTIONBASED, :Required => true
102
- field :Domain, :Type => Array, :Default => [ 0.0, 1.0, 0.0, 1.0 ]
103
- field :Matrix, :Type => Array, :Default => [ 1, 0, 0, 1, 0, 0 ]
104
- field :Function, :Type => [ Dictionary, Stream ], :Required => true
105
- end
106
-
107
- class Axial < Dictionary
108
- include StandardObject
109
- include ShadingObject
110
-
111
- field :ShadingType, :Type => Integer, :Default => Shading::Type::AXIAL, :Required => true
112
- field :Coords, :Type => Array, :Required => true
113
- field :Domain, :Type => Array, :Default => [ 0.0, 1.0 ]
114
- field :Function, :Type => [ Dictionary, Stream ], :Required => true
115
- field :Extend, :Type => Array, :Default => [ false, false ]
116
- end
16
+ You should have received a copy of the GNU Lesser General Public License
17
+ along with Origami. If not, see <http://www.gnu.org/licenses/>.
117
18
 
118
- class Radial < Dictionary
119
- include StandardObject
120
- include ShadingObject
121
-
122
- field :ShadingType, :Type => Integer, :Default => Shading::Type::RADIAL, :Required => true
123
- field :Coords, :Type => Array, :Required => true
124
- field :Domain, :Type => Array, :Default => [ 0.0, 1.0 ]
125
- field :Function, :Type => [ Dictionary, Stream ], :Required => true
126
- field :Extend, :Type => Array, :Default => [ false, false ]
127
- end
128
-
129
- class FreeFormTriangleMesh < Stream
130
- include ShadingObject
131
-
132
- field :ShadingType, :Type => Integer, :Default => Shading::Type::FREEFORM_TRIANGLE_MESH, :Required => true
133
- field :BitsPerCoordinate, :Type => Integer, :Required => true
134
- field :BitsPerComponent, :Type => Integer, :Required => true
135
- field :BitsPerFlag, :Type => Integer, :Required => true
136
- field :Decode, :Type => Array, :Required => true
137
- field :Function, :Type => [ Dictionary, Stream ]
138
- end
139
-
140
- class LatticeFormTriangleMesh < Stream
141
- include ShadingObject
142
-
143
- field :ShadingType, :Type => Integer, :Default => Shading::Type::LATTICEFORM_TRIANGLE_MESH, :Required => true
144
- field :BitsPerCoordinate, :Type => Integer, :Required => true
145
- field :BitsPerComponent, :Type => Integer, :Required => true
146
- field :VerticesPerRow, :Type => Integer, :Required => true
147
- field :Decode, :Type => Array, :Required => true
148
- field :Function, :Type => [ Dictionary, Stream ]
149
- end
150
-
151
- class CoonsPathMesh < Stream
152
- include ShadingObject
19
+ =end
153
20
 
154
- field :ShadingType, :Type => Integer, :Default => Shading::Type::COONS_PATCH_MESH, :Required => true
155
- field :BitsPerCoordinate, :Type => Integer, :Required => true
156
- field :BitsPerComponent, :Type => Integer, :Required => true
157
- field :BitsPerFlag, :Type => Integer, :Required => true
158
- field :Decode, :Type => Array, :Required => true
159
- field :Function, :Type => [ Dictionary, Stream ]
160
- end
21
+ module Origami
161
22
 
162
- class TensorProductPatchMesh < Stream
163
- include ShadingObject
23
+ module Graphics
24
+
25
+ module Pattern
26
+ module Type
27
+ TILING = 1
28
+ SHADING = 2
29
+ end
30
+
31
+ def self.included(receiver)
32
+ receiver.field :Type, :Type => Name, :Default => :Pattern
33
+ receiver.field :PatternType, :Type => Integer, :Required => true
34
+ end
35
+
36
+ class Tiling < ContentStream
37
+ include Pattern
38
+ include ResourcesHolder
39
+
40
+ module PaintType
41
+ COLOURED = 1
42
+ UNCOLOURED = 2
43
+ end
44
+
45
+ module Type
46
+ CONSTANT_SPACING = 1
47
+ NO_DISTORTION = 2
48
+ CONSTANT_SPACING_AND_FASTER_TILING = 3
49
+ end
50
+
51
+ field :PatternType, :Type => Integer, :Default => Pattern::Type::TILING, :Required => true
52
+ field :PaintType, :Type => Integer, :Required => true
53
+ field :TilingType, :Type => Integer, :Required => true
54
+ field :BBox, :Type => Array, :Required => true
55
+ field :XStep, :Type => Number, :Required => true
56
+ field :YStep, :Type => Number, :Required => true
57
+ field :Resources, :Type => Resources, :Required => true
58
+ field :Matrix, :Type => Array, :Default => [ 1, 0, 0, 1, 0, 0 ]
59
+ end
60
+
61
+ class Shading < Dictionary
62
+ include StandardObject
63
+ include Pattern
64
+
65
+ module Type
66
+ FUNCTIONBASED = 1
67
+ AXIAL = 2
68
+ RADIAL = 3
69
+ FREEFORM_TRIANGLE_MESH = 4
70
+ LATTICEFORM_TRIANGLE_MESH = 5
71
+ COONS_PATCH_MESH = 6
72
+ TENSORPRODUCT_PATCH_MESH = 7
73
+ end
74
+
75
+ field :PatternType, :Type => Integer, :Default => Pattern::Type::SHADING, :Required => true
76
+ field :Shading, :Type => [ Dictionary, Stream ], :Required => true
77
+ field :Matrix, :Type => Array, :Default => [ 1, 0, 0, 1, 0, 0 ]
78
+ field :ExtGState, :Type => Dictionary
79
+
80
+ module ShadingObject
81
+ def self.included(receiver)
82
+ receiver.field :ShadingType, :Type => Integer, :Required => true
83
+ receiver.field :ColorSpace, :Type => [ Name, Array ], :Required => true
84
+ receiver.field :Background, :Type => Array
85
+ receiver.field :BBox, :Type => Array
86
+ receiver.field :AntiAlias, :Type => Boolean, :Default => false
87
+ end
88
+ end
89
+
90
+ class FunctionBased < Dictionary
91
+ include StandardObject
92
+ include ShadingObject
93
+
94
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::FUNCTIONBASED, :Required => true
95
+ field :Domain, :Type => Array, :Default => [ 0.0, 1.0, 0.0, 1.0 ]
96
+ field :Matrix, :Type => Array, :Default => [ 1, 0, 0, 1, 0, 0 ]
97
+ field :Function, :Type => [ Dictionary, Stream ], :Required => true
98
+ end
99
+
100
+ class Axial < Dictionary
101
+ include StandardObject
102
+ include ShadingObject
103
+
104
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::AXIAL, :Required => true
105
+ field :Coords, :Type => Array, :Required => true
106
+ field :Domain, :Type => Array, :Default => [ 0.0, 1.0 ]
107
+ field :Function, :Type => [ Dictionary, Stream ], :Required => true
108
+ field :Extend, :Type => Array, :Default => [ false, false ]
109
+ end
110
+
111
+ class Radial < Dictionary
112
+ include StandardObject
113
+ include ShadingObject
114
+
115
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::RADIAL, :Required => true
116
+ field :Coords, :Type => Array, :Required => true
117
+ field :Domain, :Type => Array, :Default => [ 0.0, 1.0 ]
118
+ field :Function, :Type => [ Dictionary, Stream ], :Required => true
119
+ field :Extend, :Type => Array, :Default => [ false, false ]
120
+ end
121
+
122
+ class FreeFormTriangleMesh < Stream
123
+ include ShadingObject
124
+
125
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::FREEFORM_TRIANGLE_MESH, :Required => true
126
+ field :BitsPerCoordinate, :Type => Integer, :Required => true
127
+ field :BitsPerComponent, :Type => Integer, :Required => true
128
+ field :BitsPerFlag, :Type => Integer, :Required => true
129
+ field :Decode, :Type => Array, :Required => true
130
+ field :Function, :Type => [ Dictionary, Stream ]
131
+ end
132
+
133
+ class LatticeFormTriangleMesh < Stream
134
+ include ShadingObject
135
+
136
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::LATTICEFORM_TRIANGLE_MESH, :Required => true
137
+ field :BitsPerCoordinate, :Type => Integer, :Required => true
138
+ field :BitsPerComponent, :Type => Integer, :Required => true
139
+ field :VerticesPerRow, :Type => Integer, :Required => true
140
+ field :Decode, :Type => Array, :Required => true
141
+ field :Function, :Type => [ Dictionary, Stream ]
142
+ end
143
+
144
+ class CoonsPathMesh < Stream
145
+ include ShadingObject
146
+
147
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::COONS_PATCH_MESH, :Required => true
148
+ field :BitsPerCoordinate, :Type => Integer, :Required => true
149
+ field :BitsPerComponent, :Type => Integer, :Required => true
150
+ field :BitsPerFlag, :Type => Integer, :Required => true
151
+ field :Decode, :Type => Array, :Required => true
152
+ field :Function, :Type => [ Dictionary, Stream ]
153
+ end
154
+
155
+ class TensorProductPatchMesh < Stream
156
+ include ShadingObject
157
+
158
+ field :ShadingType, :Type => Integer, :Default => Shading::Type::TENSORPRODUCT_PATCH_MESH, :Required => true
159
+ field :BitsPerCoordinate, :Type => Integer, :Required => true
160
+ field :BitsPerComponent, :Type => Integer, :Required => true
161
+ field :BitsPerFlag, :Type => Integer, :Required => true
162
+ field :Decode, :Type => Array, :Required => true
163
+ field :Function, :Type => [ Dictionary, Stream ]
164
+ end
165
+ end
164
166
 
165
- field :ShadingType, :Type => Integer, :Default => Shading::Type::TENSORPRODUCT_PATCH_MESH, :Required => true
166
- field :BitsPerCoordinate, :Type => Integer, :Required => true
167
- field :BitsPerComponent, :Type => Integer, :Required => true
168
- field :BitsPerFlag, :Type => Integer, :Required => true
169
- field :Decode, :Type => Array, :Required => true
170
- field :Function, :Type => [ Dictionary, Stream ]
171
167
  end
172
- end
173
168
  end
174
- end
175
169
 
176
- class PDF::Instruction
177
- insn 'sh', Name
178
- end
170
+ class PDF::Instruction
171
+ insn 'sh', Name
172
+ end
179
173
 
180
174
  end
181
-
@@ -1,69 +1,62 @@
1
1
  =begin
2
2
 
3
- = File
4
- graphics/render.rb
5
-
6
- = Info
7
- This file is part of Origami, PDF manipulation framework for Ruby
8
- Copyright (C) 2010 Guillaume Delugré <guillaume AT security-labs DOT org>
9
- All right reserved.
10
-
11
- Origami is free software: you can redistribute it and/or modify
12
- it under the terms of the GNU Lesser General Public License as published by
13
- the Free Software Foundation, either version 3 of the License, or
14
- (at your option) any later version.
15
-
16
- Origami is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU Lesser General Public License for more details.
20
-
21
- You should have received a copy of the GNU Lesser General Public License
22
- along with Origami. If not, see <http://www.gnu.org/licenses/>.
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2016 Guillaume Delugré.
5
+
6
+ Origami is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU Lesser General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ Origami is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public License
17
+ along with Origami. If not, see <http://www.gnu.org/licenses/>.
23
18
 
24
19
  =end
25
20
 
26
21
  module Origami
27
-
28
- module Graphics
29
-
30
- module Canvas
31
- attr_reader :gs
32
22
 
33
- def initialize
34
- @gs = Graphics::State.new
35
- end
23
+ module Graphics
36
24
 
37
- def clear
38
- @gs.reset
39
- end
25
+ module Canvas
26
+ attr_reader :gs
40
27
 
41
- def write_text(s); end
42
- def stroke_path; end
43
- def fill_path; end
44
- end
28
+ def initialize
29
+ @gs = Graphics::State.new
30
+ end
45
31
 
46
- class DummyCanvas
47
- include Canvas
48
- end
32
+ def clear
33
+ @gs.reset
34
+ end
49
35
 
50
- class TextCanvas
51
- include Canvas
36
+ def write_text(s); end
37
+ def stroke_path; end
38
+ def fill_path; end
39
+ end
52
40
 
53
- def initialize(output = STDOUT, columns = 80, lines = 25)
54
- super()
41
+ class DummyCanvas
42
+ include Canvas
43
+ end
55
44
 
56
- @output = output
57
- @columns, @lines = columns, lines
58
- end
45
+ class TextCanvas
46
+ include Canvas
59
47
 
60
- def write_text(s)
61
- @output.print(s)
62
- end
48
+ def initialize(output = STDOUT, columns = 80, lines = 25)
49
+ super()
63
50
 
64
- end
51
+ @output = output
52
+ @columns, @lines = columns, lines
53
+ end
65
54
 
66
- end
55
+ def write_text(s)
56
+ @output.print(s)
57
+ end
58
+ end
67
59
 
60
+ end
68
61
  end
69
62