origami-docspring 2.2.0 → 2.3.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/examples/attachments/attachment.rb +7 -8
  4. data/examples/attachments/nested_document.rb +6 -5
  5. data/examples/encryption/encryption.rb +5 -4
  6. data/examples/events/events.rb +7 -6
  7. data/examples/flash/flash.rb +10 -9
  8. data/examples/forms/javascript.rb +14 -13
  9. data/examples/forms/xfa.rb +67 -66
  10. data/examples/javascript/hello_world.rb +6 -5
  11. data/examples/javascript/js_emulation.rb +26 -26
  12. data/examples/loop/goto.rb +12 -11
  13. data/examples/loop/named.rb +17 -16
  14. data/examples/signature/signature.rb +11 -11
  15. data/examples/uri/javascript.rb +25 -24
  16. data/examples/uri/open-uri.rb +5 -4
  17. data/examples/uri/submitform.rb +11 -10
  18. data/lib/origami/3d.rb +330 -334
  19. data/lib/origami/acroform.rb +267 -268
  20. data/lib/origami/actions.rb +266 -278
  21. data/lib/origami/annotations.rb +659 -670
  22. data/lib/origami/array.rb +192 -196
  23. data/lib/origami/boolean.rb +66 -70
  24. data/lib/origami/catalog.rb +360 -363
  25. data/lib/origami/collections.rb +132 -133
  26. data/lib/origami/compound.rb +125 -129
  27. data/lib/origami/destinations.rb +226 -237
  28. data/lib/origami/dictionary.rb +155 -154
  29. data/lib/origami/encryption.rb +967 -923
  30. data/lib/origami/extensions/fdf.rb +270 -275
  31. data/lib/origami/extensions/ppklite.rb +323 -328
  32. data/lib/origami/filespec.rb +170 -173
  33. data/lib/origami/filters/ascii.rb +162 -167
  34. data/lib/origami/filters/ccitt/tables.rb +248 -252
  35. data/lib/origami/filters/ccitt.rb +309 -312
  36. data/lib/origami/filters/crypt.rb +31 -34
  37. data/lib/origami/filters/dct.rb +47 -50
  38. data/lib/origami/filters/flate.rb +57 -60
  39. data/lib/origami/filters/jbig2.rb +50 -53
  40. data/lib/origami/filters/jpx.rb +40 -43
  41. data/lib/origami/filters/lzw.rb +151 -155
  42. data/lib/origami/filters/predictors.rb +250 -255
  43. data/lib/origami/filters/runlength.rb +111 -115
  44. data/lib/origami/filters.rb +319 -325
  45. data/lib/origami/font.rb +173 -177
  46. data/lib/origami/functions.rb +62 -66
  47. data/lib/origami/graphics/colors.rb +203 -208
  48. data/lib/origami/graphics/instruction.rb +79 -81
  49. data/lib/origami/graphics/path.rb +141 -144
  50. data/lib/origami/graphics/patterns.rb +156 -160
  51. data/lib/origami/graphics/render.rb +51 -47
  52. data/lib/origami/graphics/state.rb +144 -142
  53. data/lib/origami/graphics/text.rb +185 -188
  54. data/lib/origami/graphics/xobject.rb +818 -804
  55. data/lib/origami/graphics.rb +25 -26
  56. data/lib/origami/header.rb +63 -65
  57. data/lib/origami/javascript.rb +718 -651
  58. data/lib/origami/linearization.rb +284 -285
  59. data/lib/origami/metadata.rb +156 -135
  60. data/lib/origami/name.rb +98 -100
  61. data/lib/origami/null.rb +49 -51
  62. data/lib/origami/numeric.rb +133 -135
  63. data/lib/origami/obfuscation.rb +180 -182
  64. data/lib/origami/object.rb +634 -631
  65. data/lib/origami/optionalcontent.rb +147 -149
  66. data/lib/origami/outline.rb +46 -48
  67. data/lib/origami/outputintents.rb +76 -77
  68. data/lib/origami/page.rb +637 -596
  69. data/lib/origami/parser.rb +214 -221
  70. data/lib/origami/parsers/fdf.rb +44 -45
  71. data/lib/origami/parsers/pdf/lazy.rb +147 -154
  72. data/lib/origami/parsers/pdf/linear.rb +104 -109
  73. data/lib/origami/parsers/pdf.rb +109 -107
  74. data/lib/origami/parsers/ppklite.rb +44 -46
  75. data/lib/origami/pdf.rb +886 -896
  76. data/lib/origami/reference.rb +116 -120
  77. data/lib/origami/signature.rb +617 -625
  78. data/lib/origami/stream.rb +560 -558
  79. data/lib/origami/string.rb +366 -368
  80. data/lib/origami/template/patterns.rb +50 -52
  81. data/lib/origami/template/widgets.rb +111 -114
  82. data/lib/origami/trailer.rb +153 -157
  83. data/lib/origami/tree.rb +55 -57
  84. data/lib/origami/version.rb +19 -19
  85. data/lib/origami/webcapture.rb +87 -90
  86. data/lib/origami/xfa/config.rb +409 -414
  87. data/lib/origami/xfa/connectionset.rb +113 -117
  88. data/lib/origami/xfa/datasets.rb +38 -42
  89. data/lib/origami/xfa/localeset.rb +33 -37
  90. data/lib/origami/xfa/package.rb +49 -52
  91. data/lib/origami/xfa/pdf.rb +54 -59
  92. data/lib/origami/xfa/signature.rb +33 -37
  93. data/lib/origami/xfa/sourceset.rb +34 -38
  94. data/lib/origami/xfa/stylesheet.rb +35 -39
  95. data/lib/origami/xfa/template.rb +1630 -1634
  96. data/lib/origami/xfa/xdc.rb +33 -37
  97. data/lib/origami/xfa/xfa.rb +132 -123
  98. data/lib/origami/xfa/xfdf.rb +34 -38
  99. data/lib/origami/xfa/xmpmeta.rb +34 -38
  100. data/lib/origami/xfa.rb +50 -53
  101. data/lib/origami/xreftable.rb +462 -462
  102. data/lib/origami.rb +37 -38
  103. data/test/test_actions.rb +22 -20
  104. data/test/test_annotations.rb +54 -52
  105. data/test/test_forms.rb +23 -21
  106. data/test/test_native_types.rb +82 -78
  107. data/test/test_object_tree.rb +25 -24
  108. data/test/test_pages.rb +43 -41
  109. data/test/test_pdf.rb +2 -0
  110. data/test/test_pdf_attachment.rb +23 -21
  111. data/test/test_pdf_create.rb +16 -15
  112. data/test/test_pdf_encrypt.rb +69 -66
  113. data/test/test_pdf_parse.rb +131 -129
  114. data/test/test_pdf_parse_lazy.rb +53 -53
  115. data/test/test_pdf_sign.rb +67 -67
  116. data/test/test_streams.rb +145 -143
  117. data/test/test_xrefs.rb +46 -45
  118. metadata +64 -8
@@ -1,182 +1,179 @@
1
- =begin
2
-
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/>.
18
-
19
- =end
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # This file is part of Origami, PDF manipulation framework for Ruby
5
+ # Copyright (C) 2016 Guillaume Delugré.
6
+ #
7
+ # Origami is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # Origami is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with Origami. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
20
 
21
21
  module Origami
22
+ module Graphics
23
+ module LineCapStyle
24
+ BUTT_CAP = 0
25
+ ROUND_CAP = 1
26
+ PROJECTING_SQUARE_CAP = 2
27
+ end
22
28
 
23
- module Graphics
29
+ module LineJoinStyle
30
+ MITER_JOIN = 0
31
+ ROUND_JOIN = 1
32
+ BEVEL_JOIN = 2
33
+ end
24
34
 
25
- module LineCapStyle
26
- BUTT_CAP = 0
27
- ROUND_CAP = 1
28
- PROJECTING_SQUARE_CAP = 2
29
- end
35
+ class DashPattern
36
+ attr_accessor :array, :phase
30
37
 
31
- module LineJoinStyle
32
- MITER_JOIN = 0
33
- ROUND_JOIN = 1
34
- BEVEL_JOIN = 2
35
- end
38
+ def initialize(array, phase = 0)
39
+ @array = array
40
+ @phase = phase
41
+ end
36
42
 
37
- class DashPattern
38
- attr_accessor :array, :phase
43
+ def eql?(other) # :nodoc
44
+ other.array == @array and other.phase == @phase
45
+ end
39
46
 
40
- def initialize(array, phase = 0)
41
- @array = array
42
- @phase = phase
43
- end
47
+ def hash # :nodoc:
48
+ [@array, @phase].hash
49
+ end
50
+ end
44
51
 
45
- def eql?(dash) #:nodoc
46
- dash.array == @array and dash.phase == @phase
47
- end
52
+ class InvalidPathError < Error # :nodoc:
53
+ end
48
54
 
49
- def hash #:nodoc:
50
- [ @array, @phase ].hash
51
- end
52
- end
55
+ class Path
56
+ module Segment
57
+ attr_accessor :from, :to
53
58
 
54
- class InvalidPathError < Error #:nodoc:
59
+ def initialize(from, to)
60
+ @from, @to = from, to
55
61
  end
62
+ end
56
63
 
57
- class Path
58
- module Segment
59
- attr_accessor :from, :to
60
-
61
- def initialize(from, to)
62
- @from, @to = from, to
63
- end
64
- end
65
-
66
- class Line
67
- include Segment
68
- end
64
+ class Line
65
+ include Segment
66
+ end
69
67
 
70
- attr_accessor :current_point
71
- attr_reader :segments
68
+ attr_accessor :current_point
69
+ attr_reader :segments
72
70
 
73
- def initialize
74
- @segments = []
75
- @current_point = nil
76
- @closed = false
77
- end
71
+ def initialize
72
+ @segments = []
73
+ @current_point = nil
74
+ @closed = false
75
+ end
78
76
 
79
- def is_closed?
80
- @closed
81
- end
77
+ def is_closed?
78
+ @closed
79
+ end
82
80
 
83
- def close!
84
- from = @current_point
85
- to = @segments.first.from
81
+ def close!
82
+ from = @current_point
83
+ to = @segments.first.from
86
84
 
87
- @segments << Line.new(from, to)
88
- @segments.freeze
89
- @closed = true
90
- end
85
+ @segments << Line.new(from, to)
86
+ @segments.freeze
87
+ @closed = true
88
+ end
91
89
 
92
- def add_segment(seg)
93
- raise GraphicsStateError, "Cannot modify closed subpath" if is_closed?
90
+ def add_segment(seg)
91
+ raise GraphicsStateError, "Cannot modify closed subpath" if is_closed?
94
92
 
95
- @segments << seg
96
- @current_point = seg.to
97
- end
98
- end
93
+ @segments << seg
94
+ @current_point = seg.to
95
+ end
99
96
  end
97
+ end
100
98
 
101
- class PDF::Instruction
102
- insn 'm', Real, Real do |canvas, x,y|
103
- canvas.gs.current_path << (subpath = Graphics::Path.new)
104
- subpath.current_point = [x,y]
105
- end
106
-
107
- insn 'l', Real, Real do |canvas, x,y|
108
- if canvas.gs.current_path.empty?
109
- raise InvalidPathError, "No current point is defined"
110
- end
99
+ class PDF::Instruction
100
+ insn 'm', Real, Real do |canvas, x, y|
101
+ canvas.gs.current_path << (subpath = Graphics::Path.new)
102
+ subpath.current_point = [x, y]
103
+ end
111
104
 
112
- subpath = canvas.gs.current_path.last
105
+ insn 'l', Real, Real do |canvas, x, y|
106
+ if canvas.gs.current_path.empty?
107
+ raise InvalidPathError, "No current point is defined"
108
+ end
113
109
 
114
- from = subpath.current_point
115
- to = [x,y]
116
- subpath.add_segment(Graphics::Path::Line.new(from, to))
117
- end
110
+ subpath = canvas.gs.current_path.last
118
111
 
119
- insn 'h' do |canvas|
120
- unless canvas.gs.current_path.empty?
121
- subpath = canvas.gs.current_path.last
122
- subpath.close! unless subpath.is_closed?
123
- end
124
- end
112
+ from = subpath.current_point
113
+ to = [x, y]
114
+ subpath.add_segment(Graphics::Path::Line.new(from, to))
115
+ end
125
116
 
126
- insn 're', Real, Real, Real, Real do |canvas, x,y,width,height|
127
- tx = x + width
128
- ty = y + height
129
- canvas.gs.current_path << (subpath = Graphics::Path.new)
130
- subpath.segments << Graphics::Path::Line.new([x,y], [tx,y])
131
- subpath.segments << Graphics::Path::Line.new([tx,y], [tx, ty])
132
- subpath.segments << Graphics::Path::Line.new([tx, ty], [x, ty])
133
- subpath.close!
134
- end
117
+ insn 'h' do |canvas|
118
+ unless canvas.gs.current_path.empty?
119
+ subpath = canvas.gs.current_path.last
120
+ subpath.close! unless subpath.is_closed?
121
+ end
122
+ end
135
123
 
136
- insn 'S' do |canvas|
137
- canvas.stroke_path
138
- end
124
+ insn 're', Real, Real, Real, Real do |canvas, x, y, width, height|
125
+ tx = x + width
126
+ ty = y + height
127
+ canvas.gs.current_path << (subpath = Graphics::Path.new)
128
+ subpath.segments << Graphics::Path::Line.new([x, y], [tx, y])
129
+ subpath.segments << Graphics::Path::Line.new([tx, y], [tx, ty])
130
+ subpath.segments << Graphics::Path::Line.new([tx, ty], [x, ty])
131
+ subpath.close!
132
+ end
139
133
 
140
- insn 's' do |canvas|
141
- canvas.gs.current_path.last.close!
142
- canvas.stroke_path
143
- end
134
+ insn 'S' do |canvas|
135
+ canvas.stroke_path
136
+ end
144
137
 
145
- insn 'f' do |canvas|
146
- canvas.fill_path
147
- end
138
+ insn 's' do |canvas|
139
+ canvas.gs.current_path.last.close!
140
+ canvas.stroke_path
141
+ end
148
142
 
149
- insn 'F' do |canvas|
150
- canvas.fill_path
151
- end
143
+ insn 'f' do |canvas|
144
+ canvas.fill_path
145
+ end
152
146
 
153
- insn 'f*' do |canvas|
154
- canvas.fill_path
155
- end
147
+ insn 'F' do |canvas|
148
+ canvas.fill_path
149
+ end
156
150
 
157
- insn 'B' do |canvas|
158
- canvas.fill_path
159
- canvas.stroke_path
160
- end
151
+ insn 'f*' do |canvas|
152
+ canvas.fill_path
153
+ end
161
154
 
162
- insn 'B*' do |canvas|
163
- canvas.fill_path
164
- canvas.stroke_path
165
- end
155
+ insn 'B' do |canvas|
156
+ canvas.fill_path
157
+ canvas.stroke_path
158
+ end
166
159
 
167
- insn 'b' do |canvas|
168
- canvas.gs.current_path.last.close!
169
- canvas.fill_path
170
- canvas.stroke_path
171
- end
160
+ insn 'B*' do |canvas|
161
+ canvas.fill_path
162
+ canvas.stroke_path
163
+ end
172
164
 
173
- insn 'b*' do |canvas|
174
- canvas.gs.current_path.last.close!
175
- canvas.fill_path
176
- canvas.stroke_path
177
- end
165
+ insn 'b' do |canvas|
166
+ canvas.gs.current_path.last.close!
167
+ canvas.fill_path
168
+ canvas.stroke_path
169
+ end
178
170
 
179
- insn 'n'
171
+ insn 'b*' do |canvas|
172
+ canvas.gs.current_path.last.close!
173
+ canvas.fill_path
174
+ canvas.stroke_path
180
175
  end
181
176
 
177
+ insn 'n'
178
+ end
182
179
  end
@@ -1,174 +1,170 @@
1
- =begin
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # This file is part of Origami, PDF manipulation framework for Ruby
5
+ # Copyright (C) 2016 Guillaume Delugré.
6
+ #
7
+ # Origami is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # Origami is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with Origami. If not, see <http://www.gnu.org/licenses/>.
19
+ #
2
20
 
3
- This file is part of Origami, PDF manipulation framework for Ruby
4
- Copyright (C) 2016 Guillaume Delugré.
21
+ module Origami
22
+ module Graphics
23
+ module Pattern
24
+ module Type
25
+ TILING = 1
26
+ SHADING = 2
27
+ end
28
+
29
+ def self.included(receiver)
30
+ receiver.field :Type, Type: Name, Default: :Pattern
31
+ receiver.field :PatternType, Type: Integer, Required: true
32
+ end
33
+
34
+ class Tiling < ContentStream
35
+ include Pattern
36
+ include ResourcesHolder
37
+
38
+ module PaintType
39
+ COLOURED = 1
40
+ UNCOLOURED = 2
41
+ end
42
+
43
+ module Type
44
+ CONSTANT_SPACING = 1
45
+ NO_DISTORTION = 2
46
+ CONSTANT_SPACING_AND_FASTER_TILING = 3
47
+ end
5
48
 
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.
49
+ field :PatternType, Type: Integer, Default: Pattern::Type::TILING, Required: true
50
+ field :PaintType, Type: Integer, Required: true
51
+ field :TilingType, Type: Integer, Required: true
52
+ field :BBox, Type: Rectangle, Required: true
53
+ field :XStep, Type: Number, Required: true
54
+ field :YStep, Type: Number, Required: true
55
+ field :Resources, Type: Resources, Required: true
56
+ field :Matrix, Type: Array.of(Number, length: 6), Default: [1, 0, 0, 1, 0, 0]
57
+ end
58
+
59
+ class Shading < Dictionary
60
+ include StandardObject
61
+ include Pattern
62
+
63
+ module Type
64
+ FUNCTION_BASED = 1
65
+ AXIAL = 2
66
+ RADIAL = 3
67
+ FREEFORM_TRIANGLE_MESH = 4
68
+ LATTICEFORM_TRIANGLE_MESH = 5
69
+ COONS_PATCH_MESH = 6
70
+ TENSORPRODUCT_PATCH_MESH = 7
71
+ end
10
72
 
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.
73
+ field :PatternType, Type: Integer, Default: Pattern::Type::SHADING, Required: true
74
+ field :Shading, Type: [Dictionary, Stream], Required: true
75
+ field :Matrix, Type: Array.of(Number, length: 6), Default: [1, 0, 0, 1, 0, 0]
76
+ field :ExtGState, Type: ExtGState
77
+
78
+ # Fields common to all shading objects.
79
+ module ShadingObject
80
+ def self.included(receiver)
81
+ receiver.field :ShadingType, Type: Integer, Required: true
82
+ receiver.field :ColorSpace, Type: [Name, Array], Required: true
83
+ receiver.field :Background, Type: Array
84
+ receiver.field :BBox, Type: Rectangle
85
+ receiver.field :AntiAlias, Type: Boolean, Default: false
86
+ end
87
+ end
15
88
 
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/>.
89
+ # Fields common to all Mesh shadings.
90
+ module Mesh
91
+ def self.included(receiver)
92
+ receiver.field :BitsPerCoordinate, Type: Integer, Required: true
93
+ receiver.field :BitsPerComponent, Type: Integer, Required: true
94
+ receiver.field :Decode, Type: Array.of(Number), Required: true
95
+ receiver.field :Function, Type: [Dictionary, Stream]
96
+ end
97
+ end
18
98
 
19
- =end
99
+ class FunctionBased < Dictionary
100
+ include StandardObject
101
+ include ShadingObject
20
102
 
21
- module Origami
103
+ field :ShadingType, Type: Integer, Default: Shading::Type::FUNCTION_BASED, Required: true
104
+ field :Domain, Type: Array.of(Number, length: 4), Default: [0.0, 1.0, 0.0, 1.0]
105
+ field :Matrix, Type: Array.of(Number, length: 6), Default: [1, 0, 0, 1, 0, 0]
106
+ field :Function, Type: [Dictionary, Stream], Required: true
107
+ end
22
108
 
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 => Rectangle, :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.of(Number, length: 6), :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
- FUNCTION_BASED = 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.of(Number, length: 6), :Default => [ 1, 0, 0, 1, 0, 0 ]
78
- field :ExtGState, :Type => ExtGState
79
-
80
- # Fields common to all shading objects.
81
- module ShadingObject
82
- def self.included(receiver)
83
- receiver.field :ShadingType, :Type => Integer, :Required => true
84
- receiver.field :ColorSpace, :Type => [ Name, Array ], :Required => true
85
- receiver.field :Background, :Type => Array
86
- receiver.field :BBox, :Type => Rectangle
87
- receiver.field :AntiAlias, :Type => Boolean, :Default => false
88
- end
89
- end
90
-
91
- # Fields common to all Mesh shadings.
92
- module Mesh
93
- def self.included(receiver)
94
- receiver.field :BitsPerCoordinate, :Type => Integer, :Required => true
95
- receiver.field :BitsPerComponent, :Type => Integer, :Required => true
96
- receiver.field :Decode, :Type => Array.of(Number), :Required => true
97
- receiver.field :Function, :Type => [ Dictionary, Stream ]
98
- end
99
- end
100
-
101
- class FunctionBased < Dictionary
102
- include StandardObject
103
- include ShadingObject
104
-
105
- field :ShadingType, :Type => Integer, :Default => Shading::Type::FUNCTION_BASED, :Required => true
106
- field :Domain, :Type => Array.of(Number, length: 4), :Default => [ 0.0, 1.0, 0.0, 1.0 ]
107
- field :Matrix, :Type => Array.of(Number, length: 6), :Default => [ 1, 0, 0, 1, 0, 0 ]
108
- field :Function, :Type => [ Dictionary, Stream ], :Required => true
109
- end
110
-
111
- class Axial < Dictionary
112
- include StandardObject
113
- include ShadingObject
114
-
115
- field :ShadingType, :Type => Integer, :Default => Shading::Type::AXIAL, :Required => true
116
- field :Coords, :Type => Array.of(Number, length: 4), :Required => true
117
- field :Domain, :Type => Array.of(Number, length: 2), :Default => [ 0.0, 1.0 ]
118
- field :Function, :Type => [ Dictionary, Stream ], :Required => true
119
- field :Extend, :Type => Array.of(Boolean, length: 2), :Default => [ false, false ]
120
- end
121
-
122
- class Radial < Dictionary
123
- include StandardObject
124
- include ShadingObject
125
-
126
- field :ShadingType, :Type => Integer, :Default => Shading::Type::RADIAL, :Required => true
127
- field :Coords, :Type => Array.of(Number, length: 6), :Required => true
128
- field :Domain, :Type => Array.of(Number, length: 2), :Default => [ 0.0, 1.0 ]
129
- field :Function, :Type => [ Dictionary, Stream ], :Required => true
130
- field :Extend, :Type => Array.of(Boolean, length: 2), :Default => [ false, false ]
131
- end
132
-
133
- class FreeFormTriangleMesh < Stream
134
- include ShadingObject
135
- include Mesh
136
-
137
- field :ShadingType, :Type => Integer, :Default => Shading::Type::FREEFORM_TRIANGLE_MESH, :Required => true
138
- field :BitsPerFlag, :Type => Integer, :Required => true
139
- end
140
-
141
- class LatticeFormTriangleMesh < Stream
142
- include ShadingObject
143
- include Mesh
144
-
145
- field :ShadingType, :Type => Integer, :Default => Shading::Type::LATTICEFORM_TRIANGLE_MESH, :Required => true
146
- field :VerticesPerRow, :Type => Integer, :Required => true
147
- end
148
-
149
- class CoonsPathMesh < Stream
150
- include ShadingObject
151
- include Mesh
152
-
153
- field :ShadingType, :Type => Integer, :Default => Shading::Type::COONS_PATCH_MESH, :Required => true
154
- field :BitsPerFlag, :Type => Integer, :Required => true
155
- end
156
-
157
- class TensorProductPatchMesh < Stream
158
- include ShadingObject
159
-
160
- field :ShadingType, :Type => Integer, :Default => Shading::Type::TENSORPRODUCT_PATCH_MESH, :Required => true
161
- field :BitsPerFlag, :Type => Integer, :Required => true
162
- end
163
- end
109
+ class Axial < Dictionary
110
+ include StandardObject
111
+ include ShadingObject
164
112
 
113
+ field :ShadingType, Type: Integer, Default: Shading::Type::AXIAL, Required: true
114
+ field :Coords, Type: Array.of(Number, length: 4), Required: true
115
+ field :Domain, Type: Array.of(Number, length: 2), Default: [0.0, 1.0]
116
+ field :Function, Type: [Dictionary, Stream], Required: true
117
+ field :Extend, Type: Array.of(Boolean, length: 2), Default: [false, false]
165
118
  end
166
- end
167
119
 
168
- class PDF::Instruction
169
- insn 'sh', Name do |canvas, shading|
170
- canvas.paint_shading(shading)
120
+ class Radial < Dictionary
121
+ include StandardObject
122
+ include ShadingObject
123
+
124
+ field :ShadingType, Type: Integer, Default: Shading::Type::RADIAL, Required: true
125
+ field :Coords, Type: Array.of(Number, length: 6), Required: true
126
+ field :Domain, Type: Array.of(Number, length: 2), Default: [0.0, 1.0]
127
+ field :Function, Type: [Dictionary, Stream], Required: true
128
+ field :Extend, Type: Array.of(Boolean, length: 2), Default: [false, false]
129
+ end
130
+
131
+ class FreeFormTriangleMesh < Stream
132
+ include ShadingObject
133
+ include Mesh
134
+
135
+ field :ShadingType, Type: Integer, Default: Shading::Type::FREEFORM_TRIANGLE_MESH, Required: true
136
+ field :BitsPerFlag, Type: Integer, Required: true
137
+ end
138
+
139
+ class LatticeFormTriangleMesh < Stream
140
+ include ShadingObject
141
+ include Mesh
142
+
143
+ field :ShadingType, Type: Integer, Default: Shading::Type::LATTICEFORM_TRIANGLE_MESH, Required: true
144
+ field :VerticesPerRow, Type: Integer, Required: true
145
+ end
146
+
147
+ class CoonsPathMesh < Stream
148
+ include ShadingObject
149
+ include Mesh
150
+
151
+ field :ShadingType, Type: Integer, Default: Shading::Type::COONS_PATCH_MESH, Required: true
152
+ field :BitsPerFlag, Type: Integer, Required: true
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 :BitsPerFlag, Type: Integer, Required: true
171
160
  end
161
+ end
172
162
  end
163
+ end
173
164
 
165
+ class PDF::Instruction
166
+ insn 'sh', Name do |canvas, shading|
167
+ canvas.paint_shading(shading)
168
+ end
169
+ end
174
170
  end