origami 1.2.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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