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,318 +1,306 @@
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
-
23
- class PDF
24
- #
25
- # Lookup script in the scripts name directory.
26
- #
27
- def get_script_by_name(name)
28
- resolve_name Names::JAVASCRIPT, name
29
- end
30
-
31
- #
32
- # Calls block for each named JavaScript script.
33
- #
34
- def each_named_script(&b)
35
- each_name(Names::JAVASCRIPT, &b)
36
- end
22
+ class PDF
23
+ #
24
+ # Lookup script in the scripts name directory.
25
+ #
26
+ def get_script_by_name(name)
27
+ resolve_name Names::JAVASCRIPT, name
37
28
  end
38
29
 
39
30
  #
40
- # Class representing an action to launch in a PDF.
31
+ # Calls block for each named JavaScript script.
41
32
  #
42
- class Action < Dictionary
43
- include StandardObject
44
-
45
- field :Type, :Type => Name, :Default => :Action
46
- field :S, :Type => Name, :Required => true
47
- field :Next, :Type => [ Array.of(Action), Action ], :Version => "1.2"
48
-
49
- #
50
- # Class representing a action going to a destination in the current document.
51
- #
52
- class GoTo < Action
53
-
54
- field :S, :Type => Name, :Default => :GoTo, :Required => true
55
- field :D, :Type => [ Destination, Name, String ], :Required => true
56
-
57
- #
58
- # Creates a new GoTo Action.
59
- # _hash_:: A hash of options to set for this jump.
60
- #
61
- def self.[](hash = {})
62
- if hash.is_a? Destination
63
- self.new(:S => :GoTo, :D => hash)
64
- else
65
- self.new(hash)
66
- end
67
- end
68
- end
33
+ def each_named_script(&b)
34
+ each_name(Names::JAVASCRIPT, &b)
35
+ end
36
+ end
69
37
 
70
- def self.GoTo(hash = {})
71
- Action::GoTo[hash]
72
- end
38
+ #
39
+ # Class representing an action to launch in a PDF.
40
+ #
41
+ class Action < Dictionary
42
+ include StandardObject
73
43
 
74
- #
75
- # Class representing an action launching an URL.
76
- #
77
- class URI < Action
78
-
79
- field :S, :Type => Name, :Default => :URI, :Required => true
80
- field :URI, :Type => String, :Required => true
81
- field :IsMap, :Type => Boolean, :Default => false
82
-
83
- #
84
- # Creates a new URI Action.
85
- # _uri_:: The URI to launch.
86
- # _ismap_::
87
- #
88
- def self.[](uri, ismap = false)
89
- self.new(:URI => uri, :IsMap => ismap)
90
- end
91
- end
44
+ field :Type, Type: Name, Default: :Action
45
+ field :S, Type: Name, Required: true
46
+ field :Next, Type: [Array.of(Action), Action], Version: "1.2"
92
47
 
93
- def self.URI(uri, ismap = false)
94
- Action::URI[uri, ismap]
48
+ #
49
+ # Class representing a action going to a destination in the current document.
50
+ #
51
+ class GoTo < Action
52
+ field :S, Type: Name, Default: :GoTo, Required: true
53
+ field :D, Type: [Destination, Name, String], Required: true
54
+
55
+ #
56
+ # Creates a new GoTo Action.
57
+ # _hash_:: A hash of options to set for this jump.
58
+ #
59
+ def self.[](hash = {})
60
+ if hash.is_a? Destination
61
+ new(S: :GoTo, D: hash)
62
+ else
63
+ new(hash)
95
64
  end
65
+ end
66
+ end
96
67
 
97
- #
98
- # Class representing a JavaScript Action.
99
- #
100
- class JavaScript < Action
101
-
102
- field :S, :Type => Name, :Default => :JavaScript, :Required => true
103
- field :JS, :Type => [ Stream, String ], :Required => true
104
-
105
- #
106
- # Creates a new JavaScript Action.
107
- # _script_:: The script to be executed.
108
- #
109
- def self.[](script)
110
- self.new(:JS => script)
111
- end
112
- end
68
+ def self.GoTo(hash = {})
69
+ Action::GoTo[hash]
70
+ end
113
71
 
114
- def self.JavaScript(script)
115
- Action::JavaScript[script]
116
- end
72
+ #
73
+ # Class representing an action launching an URL.
74
+ #
75
+ class URI < Action
76
+ field :S, Type: Name, Default: :URI, Required: true
77
+ field :URI, Type: String, Required: true
78
+ field :IsMap, Type: Boolean, Default: false
79
+
80
+ #
81
+ # Creates a new URI Action.
82
+ # _uri_:: The URI to launch.
83
+ # _ismap_::
84
+ #
85
+ def self.[](uri, ismap = false)
86
+ new(URI: uri, IsMap: ismap)
87
+ end
88
+ end
117
89
 
118
- #
119
- # Class representing an Action which run a command on the current system.
120
- #
121
- class Launch < Action
122
-
123
- #
124
- # Dictionary for passing parameter to Windows applications during Launch.
125
- #
126
- class WindowsLaunchParams < Dictionary
127
- include StandardObject
128
-
129
- field :F, :Type => String, :Required => true
130
- field :D, :Type => String
131
- field :O, :Type => String, :Default => "open"
132
- field :P, :Type => String
133
- end
134
-
135
- field :S, :Type => Name, :Default => :Launch, :Required => true
136
- field :F, :Type => [ String, FileSpec ]
137
- field :Win, :Type => WindowsLaunchParams
138
- field :Mac, :Type => Object
139
- field :Unix, :Type => Object
140
- field :NewWindow, :Type => Boolean
141
- end
90
+ def self.URI(uri, ismap = false)
91
+ Action::URI[uri, ismap]
92
+ end
142
93
 
143
- #
144
- # Class representing a Named Action.
145
- # Named actions are predefined GoTo actions.
146
- #
147
- class Named < Action
94
+ #
95
+ # Class representing a JavaScript Action.
96
+ #
97
+ class JavaScript < Action
98
+ field :S, Type: Name, Default: :JavaScript, Required: true
99
+ field :JS, Type: [Stream, String], Required: true
100
+
101
+ #
102
+ # Creates a new JavaScript Action.
103
+ # _script_:: The script to be executed.
104
+ #
105
+ def self.[](script)
106
+ new(JS: script)
107
+ end
108
+ end
148
109
 
149
- field :S, :Type => Name, :Default => :Named, :Required => true
150
- field :N, :Type => Name, :Required => true
110
+ def self.JavaScript(script)
111
+ Action::JavaScript[script]
112
+ end
151
113
 
152
- def self.[](type)
153
- self.new(:N => type)
154
- end
114
+ #
115
+ # Class representing an Action which run a command on the current system.
116
+ #
117
+ class Launch < Action
118
+ #
119
+ # Dictionary for passing parameter to Windows applications during Launch.
120
+ #
121
+ class WindowsLaunchParams < Dictionary
122
+ include StandardObject
155
123
 
156
- NEXT_PAGE = self[:NextPage]
157
- PREV_PAGE = self[:PrevPage]
158
- FIRST_PAGE = self[:FirstPage]
159
- LAST_PAGE = self[:LastPage]
160
- PRINT = self[:Print]
161
- end
124
+ field :F, Type: String, Required: true
125
+ field :D, Type: String
126
+ field :O, Type: String, Default: "open"
127
+ field :P, Type: String
128
+ end
129
+
130
+ field :S, Type: Name, Default: :Launch, Required: true
131
+ field :F, Type: [String, FileSpec]
132
+ field :Win, Type: WindowsLaunchParams
133
+ field :Mac, Type: Object
134
+ field :Unix, Type: Object
135
+ field :NewWindow, Type: Boolean
136
+ end
162
137
 
163
- def self.Named(type)
164
- Action::Named[type]
165
- end
138
+ #
139
+ # Class representing a Named Action.
140
+ # Named actions are predefined GoTo actions.
141
+ #
142
+ class Named < Action
143
+ field :S, Type: Name, Default: :Named, Required: true
144
+ field :N, Type: Name, Required: true
145
+
146
+ def self.[](type)
147
+ new(N: type)
148
+ end
149
+
150
+ NEXT_PAGE = self[:NextPage]
151
+ PREV_PAGE = self[:PrevPage]
152
+ FIRST_PAGE = self[:FirstPage]
153
+ LAST_PAGE = self[:LastPage]
154
+ PRINT = self[:Print]
155
+ end
166
156
 
167
- #
168
- # Class representing a GoTo Action to an external file.
169
- #
170
- class GoToR < Action
171
-
172
- field :S, :Type => Name, :Default => :GoToR, :Required => true
173
- field :F, :Type => [ String, FileSpec ], :Required => true
174
- field :D, :Type => [ Destination, Name, String ], :Required => true
175
- field :NewWindow, :Type => Boolean, :Version => "1.2"
176
-
177
- #
178
- # Creates a new GoTo remote Action.
179
- # _file_:: A FileSpec describing the file.
180
- # _dest_:: A Destination in the file.
181
- # _new_window_:: Specifies whether the file has to be opened in a new window.
182
- #
183
- def self.[](file, dest: Destination::GlobalFit[0], new_window: false)
184
- self.new(:F => file, :D => dest, :NewWindow => new_window)
185
- end
186
- end
157
+ def self.Named(type)
158
+ Action::Named[type]
159
+ end
187
160
 
188
- def self.GoToR(file, dest: Destination::GlobalFit[0], new_window: false)
189
- Action::GoToR[file, dest: dest, new_window: new_window]
190
- end
161
+ #
162
+ # Class representing a GoTo Action to an external file.
163
+ #
164
+ class GoToR < Action
165
+ field :S, Type: Name, Default: :GoToR, Required: true
166
+ field :F, Type: [String, FileSpec], Required: true
167
+ field :D, Type: [Destination, Name, String], Required: true
168
+ field :NewWindow, Type: Boolean, Version: "1.2"
169
+
170
+ #
171
+ # Creates a new GoTo remote Action.
172
+ # _file_:: A FileSpec describing the file.
173
+ # _dest_:: A Destination in the file.
174
+ # _new_window_:: Specifies whether the file has to be opened in a new window.
175
+ #
176
+ def self.[](file, dest: Destination::GlobalFit[0], new_window: false)
177
+ new(F: file, D: dest, NewWindow: new_window)
178
+ end
179
+ end
191
180
 
192
- #
193
- # Class representing a GoTo Action to an embedded pdf file.
194
- #
195
- class GoToE < Action
196
-
197
- #
198
- # A class representing a target for a GoToE to an embedded file.
199
- #
200
- class EmbeddedTarget < Dictionary
201
- include StandardObject
202
-
203
- module Relationship
204
- PARENT = :P
205
- CHILD = :C
206
- end
207
-
208
- field :R, :Type => Name, :Required => true
209
- field :N, :Type => String
210
- field :P, :Type => [ Integer, String ]
211
- field :A, :Type => [ Integer, String ]
212
- field :T, :Type => Dictionary
213
- end
214
-
215
- field :S, :Type => Name, :Default => :GoToE, :Required => true
216
- field :F, :Type => [ String, FileSpec ]
217
- field :D, :Type => [ Destination, Name, String ], :Required => true
218
- field :NewWindow, :Type => Boolean
219
- field :T, :Type => EmbeddedTarget
220
-
221
- def self.[](filename, dest: Destination::GlobalFit[0], new_window: false)
222
- self.new(:T => EmbeddedTarget.new(:R => :C, :N => filename), :D => dest, :NewWindow => new_window)
223
- end
224
- end
181
+ def self.GoToR(file, dest: Destination::GlobalFit[0], new_window: false)
182
+ Action::GoToR[file, dest: dest, new_window: new_window]
183
+ end
225
184
 
226
- def self.GoToE(filename, dest: Destination::GlobalFit[0], new_window: false)
227
- Action::GoToE[filename, dest: dest, new_window: new_window]
228
- end
185
+ #
186
+ # Class representing a GoTo Action to an embedded pdf file.
187
+ #
188
+ class GoToE < Action
189
+ #
190
+ # A class representing a target for a GoToE to an embedded file.
191
+ #
192
+ class EmbeddedTarget < Dictionary
193
+ include StandardObject
229
194
 
230
- #
231
- # Class representing a SubmitForm action.
232
- #
233
- class SubmitForm < Action
234
- module Flags
235
- INCLUDEEXCLUDE = 1 << 0
236
- INCLUDENOVALUEFIELDS = 1 << 1
237
- EXPORTFORMAT = 1 << 2
238
- GETMETHOD = 1 << 3
239
- SUBMITCOORDINATES = 1 << 4
240
- XFDF = 1 << 5
241
- INCLUDEAPPENDSAVES = 1 << 6
242
- INCLUDEANNOTATIONS = 1 << 7
243
- SUBMITPDF = 1 << 8
244
- CANONICALFORMAT = 1 << 9
245
- EXCLNONUSERANNOTS = 1 << 10
246
- EXCLFKEY = 1 << 11
247
- EMBEDFORM = 1 << 12
248
- end
249
-
250
- field :S, :Type => Name, :Default => :SubmitForm, :Required => true
251
- field :F, :Type => FileSpec
252
- field :Fields, :Type => Array
253
- field :Flags, :Type => Integer, :Default => 0
254
-
255
- def self.[](url, fields = [], flags = 0)
256
- url = FileSpec.new(:FS => :URL, :F => url) unless url.is_a? FileSpec
257
- self.new(:F => url, :Fields => fields, :Flags => flags)
258
- end
195
+ module Relationship
196
+ PARENT = :P
197
+ CHILD = :C
259
198
  end
260
199
 
261
- def self.SubmitForm(url, fields = [], flags = 0)
262
- Action::SubmitForm[url, fields, flags]
263
- end
200
+ field :R, Type: Name, Required: true
201
+ field :N, Type: String
202
+ field :P, Type: [Integer, String]
203
+ field :A, Type: [Integer, String]
204
+ field :T, Type: Dictionary
205
+ end
206
+
207
+ field :S, Type: Name, Default: :GoToE, Required: true
208
+ field :F, Type: [String, FileSpec]
209
+ field :D, Type: [Destination, Name, String], Required: true
210
+ field :NewWindow, Type: Boolean
211
+ field :T, Type: EmbeddedTarget
212
+
213
+ def self.[](filename, dest: Destination::GlobalFit[0], new_window: false)
214
+ new(T: EmbeddedTarget.new(R: :C, N: filename), D: dest, NewWindow: new_window)
215
+ end
216
+ end
264
217
 
265
- class ImportData < Action
218
+ def self.GoToE(filename, dest: Destination::GlobalFit[0], new_window: false)
219
+ Action::GoToE[filename, dest: dest, new_window: new_window]
220
+ end
266
221
 
267
- field :S, :Type => Name, :Default => :ImportData, :Required => true
268
- field :F, :Type => Dictionary, :Required => true
222
+ #
223
+ # Class representing a SubmitForm action.
224
+ #
225
+ class SubmitForm < Action
226
+ module Flags
227
+ INCLUDEEXCLUDE = 1 << 0
228
+ INCLUDENOVALUEFIELDS = 1 << 1
229
+ EXPORTFORMAT = 1 << 2
230
+ GETMETHOD = 1 << 3
231
+ SUBMITCOORDINATES = 1 << 4
232
+ XFDF = 1 << 5
233
+ INCLUDEAPPENDSAVES = 1 << 6
234
+ INCLUDEANNOTATIONS = 1 << 7
235
+ SUBMITPDF = 1 << 8
236
+ CANONICALFORMAT = 1 << 9
237
+ EXCLNONUSERANNOTS = 1 << 10
238
+ EXCLFKEY = 1 << 11
239
+ EMBEDFORM = 1 << 12
240
+ end
241
+
242
+ field :S, Type: Name, Default: :SubmitForm, Required: true
243
+ field :F, Type: FileSpec
244
+ field :Fields, Type: Array
245
+ field :Flags, Type: Integer, Default: 0
246
+
247
+ def self.[](url, fields = [], flags = 0)
248
+ url = FileSpec.new(FS: :URL, F: url) unless url.is_a? FileSpec
249
+ new(F: url, Fields: fields, Flags: flags)
250
+ end
251
+ end
269
252
 
270
- def self.[](file)
271
- file = FileSpec.new(:FS => :File, :F => file) unless file.is_a? FileSpec
272
- self.new(:F => file)
273
- end
274
- end
253
+ def self.SubmitForm(url, fields = [], flags = 0)
254
+ Action::SubmitForm[url, fields, flags]
255
+ end
275
256
 
276
- def self.ImportData(file)
277
- Action::ImportData[file]
278
- end
257
+ class ImportData < Action
258
+ field :S, Type: Name, Default: :ImportData, Required: true
259
+ field :F, Type: Dictionary, Required: true
279
260
 
280
- class RichMediaExecute < Action
261
+ def self.[](file)
262
+ file = FileSpec.new(FS: :File, F: file) unless file.is_a? FileSpec
263
+ new(F: file)
264
+ end
265
+ end
281
266
 
282
- class Command < Dictionary
283
- include StandardObject
267
+ def self.ImportData(file)
268
+ Action::ImportData[file]
269
+ end
284
270
 
285
- field :Type, :Type => Name, :Default => :RichMediaCommand, :Version => "1.7", :ExtensionLevel => 3
286
- field :C, :Type => String, :Version => "1.7", :ExtensionLevel => 3, :Required => true
287
- field :A, :Type => Object, :Version => "1.7", :ExtensionLevel => 3
288
- end
271
+ class RichMediaExecute < Action
272
+ class Command < Dictionary
273
+ include StandardObject
289
274
 
290
- field :S, :Type => Name, :Default => :RichMediaExecute, :Version => "1.7", :ExtensionLevel => 3, :Required => true
291
- field :TA, :Type => Annotation::RichMedia, :Version => "1.7", :ExtensionLevel => 3, :Required => true
292
- field :TI, :Type => Annotation::RichMedia::Instance, :Version => "1.7", :ExtensionLevel => 3
293
- field :CMD, :Type => Command, :Version => "1.7", :ExtensionLevel => 3, :Required => true
275
+ field :Type, Type: Name, Default: :RichMediaCommand, Version: "1.7", ExtensionLevel: 3
276
+ field :C, Type: String, Version: "1.7", ExtensionLevel: 3, Required: true
277
+ field :A, Type: Object, Version: "1.7", ExtensionLevel: 3
278
+ end
294
279
 
295
- def self.[](annotation, command, *params)
296
- self.new(:TA => annotation, :CMD => Command.new(:C => command, :A => params))
297
- end
298
- end
280
+ field :S, Type: Name, Default: :RichMediaExecute, Version: "1.7", ExtensionLevel: 3, Required: true
281
+ field :TA, Type: Annotation::RichMedia, Version: "1.7", ExtensionLevel: 3, Required: true
282
+ field :TI, Type: Annotation::RichMedia::Instance, Version: "1.7", ExtensionLevel: 3
283
+ field :CMD, Type: Command, Version: "1.7", ExtensionLevel: 3, Required: true
299
284
 
300
- def self.RichMediaExecute(annotation, command, *params)
301
- Action::RichMediaExecute[annotation, command, *params]
302
- end
285
+ def self.[](annotation, command, *params)
286
+ new(TA: annotation, CMD: Command.new(C: command, A: params))
287
+ end
288
+ end
303
289
 
304
- class SetOCGState < Action
290
+ def self.RichMediaExecute(annotation, command, *params)
291
+ Action::RichMediaExecute[annotation, command, *params]
292
+ end
305
293
 
306
- module State
307
- ON = :ON
308
- OFF = :OFF
309
- TOGGLE = :Toggle
310
- end
294
+ class SetOCGState < Action
295
+ module State
296
+ ON = :ON
297
+ OFF = :OFF
298
+ TOGGLE = :Toggle
299
+ end
311
300
 
312
- field :S, :Type => Name, :Default => :SetOCGState, :Required => true
313
- field :State, :Type => Array.of([Name, OptionalContent::Group]), :Required => true
314
- field :PreserveRB, :Type => Boolean, :Default => true
315
- end
301
+ field :S, Type: Name, Default: :SetOCGState, Required: true
302
+ field :State, Type: Array.of([Name, OptionalContent::Group]), Required: true
303
+ field :PreserveRB, Type: Boolean, Default: true
316
304
  end
317
-
305
+ end
318
306
  end