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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -0
- data/README.md +112 -0
- data/bin/config/pdfcop.conf.yml +232 -233
- data/bin/gui/about.rb +27 -37
- data/bin/gui/config.rb +108 -117
- data/bin/gui/file.rb +416 -365
- data/bin/gui/gtkhex.rb +1138 -1153
- data/bin/gui/hexview.rb +55 -57
- data/bin/gui/imgview.rb +48 -51
- data/bin/gui/menu.rb +388 -386
- data/bin/gui/properties.rb +114 -130
- data/bin/gui/signing.rb +571 -617
- data/bin/gui/textview.rb +77 -95
- data/bin/gui/treeview.rb +382 -387
- data/bin/gui/walker.rb +227 -232
- data/bin/gui/xrefs.rb +56 -60
- data/bin/pdf2pdfa +53 -57
- data/bin/pdf2ruby +212 -228
- data/bin/pdfcop +338 -348
- data/bin/pdfdecompress +58 -65
- data/bin/pdfdecrypt +56 -60
- data/bin/pdfencrypt +75 -80
- data/bin/pdfexplode +185 -182
- data/bin/pdfextract +201 -218
- data/bin/pdfmetadata +83 -82
- data/bin/pdfsh +4 -5
- data/bin/pdfwalker +1 -2
- data/bin/shell/.irbrc +45 -82
- data/bin/shell/console.rb +105 -130
- data/bin/shell/hexdump.rb +40 -64
- data/examples/README.md +34 -0
- data/examples/attachments/attachment.rb +38 -0
- data/examples/attachments/nested_document.rb +51 -0
- data/examples/encryption/encryption.rb +28 -0
- data/{samples/actions/triggerevents/trigger.rb → examples/events/events.rb} +13 -16
- data/examples/flash/flash.rb +37 -0
- data/{samples → examples}/flash/helloworld.swf +0 -0
- data/examples/forms/javascript.rb +54 -0
- data/examples/forms/xfa.rb +115 -0
- data/examples/javascript/hello_world.rb +22 -0
- data/examples/javascript/js_emulation.rb +54 -0
- data/examples/loop/goto.rb +32 -0
- data/examples/loop/named.rb +33 -0
- data/examples/signature/signature.rb +65 -0
- data/examples/uri/javascript.rb +56 -0
- data/examples/uri/open-uri.rb +21 -0
- data/examples/uri/submitform.rb +47 -0
- data/lib/origami.rb +29 -42
- data/lib/origami/3d.rb +350 -225
- data/lib/origami/acroform.rb +262 -288
- data/lib/origami/actions.rb +268 -288
- data/lib/origami/annotations.rb +697 -722
- data/lib/origami/array.rb +258 -184
- data/lib/origami/boolean.rb +74 -84
- data/lib/origami/catalog.rb +397 -434
- data/lib/origami/collections.rb +144 -0
- data/lib/origami/destinations.rb +233 -194
- data/lib/origami/dictionary.rb +253 -232
- data/lib/origami/encryption.rb +1274 -1243
- data/lib/origami/export.rb +232 -268
- data/lib/origami/extensions/fdf.rb +307 -220
- data/lib/origami/extensions/ppklite.rb +368 -435
- data/lib/origami/filespec.rb +197 -0
- data/lib/origami/filters.rb +301 -295
- data/lib/origami/filters/ascii.rb +177 -180
- data/lib/origami/filters/ccitt.rb +528 -535
- data/lib/origami/filters/crypt.rb +26 -35
- data/lib/origami/filters/dct.rb +46 -52
- data/lib/origami/filters/flate.rb +95 -94
- data/lib/origami/filters/jbig2.rb +49 -55
- data/lib/origami/filters/jpx.rb +38 -44
- data/lib/origami/filters/lzw.rb +189 -183
- data/lib/origami/filters/predictors.rb +221 -235
- data/lib/origami/filters/runlength.rb +103 -104
- data/lib/origami/font.rb +173 -186
- data/lib/origami/functions.rb +67 -81
- data/lib/origami/graphics.rb +25 -21
- data/lib/origami/graphics/colors.rb +178 -187
- data/lib/origami/graphics/instruction.rb +79 -85
- data/lib/origami/graphics/path.rb +142 -148
- data/lib/origami/graphics/patterns.rb +160 -167
- data/lib/origami/graphics/render.rb +43 -50
- data/lib/origami/graphics/state.rb +138 -153
- data/lib/origami/graphics/text.rb +188 -205
- data/lib/origami/graphics/xobject.rb +819 -815
- data/lib/origami/header.rb +63 -78
- data/lib/origami/javascript.rb +596 -597
- data/lib/origami/linearization.rb +285 -290
- data/lib/origami/metadata.rb +139 -148
- data/lib/origami/name.rb +112 -148
- data/lib/origami/null.rb +53 -62
- data/lib/origami/numeric.rb +162 -175
- data/lib/origami/obfuscation.rb +186 -174
- data/lib/origami/object.rb +593 -573
- data/lib/origami/outline.rb +42 -47
- data/lib/origami/outputintents.rb +73 -82
- data/lib/origami/page.rb +703 -592
- data/lib/origami/parser.rb +238 -290
- data/lib/origami/parsers/fdf.rb +41 -33
- data/lib/origami/parsers/pdf.rb +75 -95
- data/lib/origami/parsers/pdf/lazy.rb +137 -0
- data/lib/origami/parsers/pdf/linear.rb +64 -66
- data/lib/origami/parsers/ppklite.rb +34 -70
- data/lib/origami/pdf.rb +1030 -1005
- data/lib/origami/reference.rb +102 -102
- data/lib/origami/signature.rb +591 -609
- data/lib/origami/stream.rb +668 -551
- data/lib/origami/string.rb +397 -373
- data/lib/origami/template/patterns.rb +56 -0
- data/lib/origami/template/widgets.rb +151 -0
- data/lib/origami/trailer.rb +144 -158
- data/lib/origami/tree.rb +62 -0
- data/lib/origami/version.rb +23 -0
- data/lib/origami/webcapture.rb +88 -79
- data/lib/origami/xfa.rb +2863 -2882
- data/lib/origami/xreftable.rb +472 -384
- data/test/dataset/calc.pdf +85 -0
- data/test/dataset/crypto.pdf +82 -0
- data/test/dataset/empty.pdf +49 -0
- data/test/test_actions.rb +27 -0
- data/test/test_annotations.rb +90 -0
- data/test/test_pages.rb +31 -0
- data/test/test_pdf.rb +16 -0
- data/test/test_pdf_attachment.rb +34 -0
- data/test/test_pdf_create.rb +24 -0
- data/test/test_pdf_encrypt.rb +95 -0
- data/test/test_pdf_parse.rb +96 -0
- data/test/test_pdf_sign.rb +58 -0
- data/test/test_streams.rb +182 -0
- data/test/test_xrefs.rb +67 -0
- metadata +88 -58
- data/README +0 -67
- data/bin/pdf2graph +0 -121
- data/bin/pdfcocoon +0 -104
- data/lib/origami/file.rb +0 -233
- data/samples/README.txt +0 -45
- data/samples/actions/launch/calc.rb +0 -87
- data/samples/actions/launch/winparams.rb +0 -22
- data/samples/actions/loop/loopgoto.rb +0 -24
- data/samples/actions/loop/loopnamed.rb +0 -21
- data/samples/actions/named/named.rb +0 -31
- data/samples/actions/samba/smbrelay.rb +0 -26
- data/samples/actions/webbug/submitform.js +0 -26
- data/samples/actions/webbug/webbug-browser.rb +0 -68
- data/samples/actions/webbug/webbug-js.rb +0 -67
- data/samples/actions/webbug/webbug-reader.rb +0 -90
- data/samples/attachments/attach.rb +0 -40
- data/samples/attachments/attached.txt +0 -1
- data/samples/crypto/crypto.rb +0 -28
- data/samples/digsig/signed.rb +0 -46
- data/samples/exploits/cve-2008-2992-utilprintf.rb +0 -87
- data/samples/exploits/cve-2009-0927-geticon.rb +0 -65
- data/samples/exploits/exploit_customdictopen.rb +0 -55
- data/samples/exploits/getannots.rb +0 -69
- data/samples/flash/flash.rb +0 -31
- data/samples/javascript/attached.txt +0 -1
- data/samples/javascript/js.rb +0 -52
- data/templates/patterns.rb +0 -66
- data/templates/widgets.rb +0 -173
- data/templates/xdp.rb +0 -92
- data/test/ts_pdf.rb +0 -50
data/lib/origami/annotations.rb
CHANGED
|
@@ -1,776 +1,751 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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.
|
|
27
10
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class Annotation < Dictionary
|
|
33
|
-
|
|
34
|
-
include StandardObject
|
|
35
|
-
|
|
36
|
-
field :Type, :Type => Name, :Default => :Annot
|
|
37
|
-
field :Subtype, :Type => Name, :Required => true
|
|
38
|
-
field :Rect, :Type => Array, :Default => [ 0 , 0 , 0 , 0 ], :Required => true
|
|
39
|
-
field :Contents, :Type => String
|
|
40
|
-
field :P, :Type => Dictionary, :Version => "1.3"
|
|
41
|
-
field :NM, :Type => String, :Version => "1.4"
|
|
42
|
-
field :M, :Type => ByteString, :Version => "1.1"
|
|
43
|
-
field :F, :Type => Integer, :Default => 0, :Version => "1.1"
|
|
44
|
-
field :AP, :Type => Dictionary, :Version => "1.2"
|
|
45
|
-
field :AS, :Type => Name, :Version => "1.2"
|
|
46
|
-
field :Border, :Type => Array, :Default => [ 0 , 0 , 1 ]
|
|
47
|
-
field :C, :Type => Array, :Version => "1.1"
|
|
48
|
-
field :StructParent, :Type => Integer, :Version => "1.3"
|
|
49
|
-
field :OC, :Type => Dictionary, :Version => "1.5"
|
|
50
|
-
|
|
51
|
-
def set_normal_appearance(apstm)
|
|
52
|
-
self.AP ||= AppearanceDictionary.new
|
|
53
|
-
self.AP[:N] = apstm
|
|
54
|
-
|
|
55
|
-
self
|
|
56
|
-
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.
|
|
57
15
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
self.AP[:R] = apstm
|
|
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/>.
|
|
61
18
|
|
|
62
|
-
|
|
63
|
-
end
|
|
19
|
+
=end
|
|
64
20
|
|
|
65
|
-
|
|
66
|
-
self.AP ||= AppearanceStream.new
|
|
67
|
-
self.AP[:D] = apstm
|
|
21
|
+
module Origami
|
|
68
22
|
|
|
69
|
-
|
|
70
|
-
end
|
|
23
|
+
# Forward declaration.
|
|
24
|
+
class Action < Dictionary; end
|
|
71
25
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
self.AA ||= AdditionalActions.new
|
|
80
|
-
self.AA.E = action
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def onMouseOut(action)
|
|
84
|
-
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
85
|
-
raise TypeError, "An Action object must be passed."
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
self.AA ||= AdditionalActions.new
|
|
89
|
-
self.AA.X = action
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def onMouseDown(action)
|
|
93
|
-
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
94
|
-
raise TypeError, "An Action object must be passed."
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
self.AA ||= AdditionalActions.new
|
|
98
|
-
self.AA.D = action
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def onMouseUp(action)
|
|
102
|
-
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
103
|
-
raise TypeError, "An Action object must be passed."
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
self.AA ||= AdditionalActions.new
|
|
107
|
-
self.AA.U = action
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def onFocus(action)
|
|
111
|
-
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
112
|
-
raise TypeError, "An Action object must be passed."
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
self.AA ||= AdditionalActions.new
|
|
116
|
-
self.AA.Fo = action
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def onBlur(action)
|
|
120
|
-
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
121
|
-
raise TypeError, "An Action object must be passed."
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
self.AA ||= AdditionalActions.new
|
|
125
|
-
self.AA.Bl = action
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def onPageOpen(action)
|
|
129
|
-
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
130
|
-
raise TypeError, "An Action object must be passed."
|
|
131
|
-
end
|
|
26
|
+
#
|
|
27
|
+
# Class representing an annotation.
|
|
28
|
+
# Annotations are objects which user can interact with.
|
|
29
|
+
#
|
|
30
|
+
class Annotation < Dictionary
|
|
31
|
+
include StandardObject
|
|
132
32
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
33
|
+
#
|
|
34
|
+
# An AppearanceStream is a FormXObject.
|
|
35
|
+
#
|
|
36
|
+
class AppearanceStream < Graphics::FormXObject ; end
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Appearance Dictionary of an Annotation.
|
|
40
|
+
#
|
|
41
|
+
class AppearanceDictionary < Dictionary
|
|
42
|
+
include StandardObject
|
|
43
|
+
|
|
44
|
+
field :N, :Type => [ AppearanceStream, Dictionary ], :Required => true
|
|
45
|
+
field :R, :Type => [ AppearanceStream, Dictionary ]
|
|
46
|
+
field :D, :Type => [ AppearanceStream, Dictionary ]
|
|
140
47
|
end
|
|
141
|
-
|
|
142
|
-
self.AA ||= AdditionalActions.new
|
|
143
|
-
self.AA.PC = action
|
|
144
|
-
end
|
|
145
48
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
49
|
+
#
|
|
50
|
+
# Class representing additional actions which can be associated with an annotation having an AA field.
|
|
51
|
+
#
|
|
52
|
+
class AdditionalActions < Dictionary
|
|
53
|
+
include StandardObject
|
|
54
|
+
|
|
55
|
+
field :E, :Type => Action, :Version => "1.2" # Mouse Enter
|
|
56
|
+
field :X, :Type => Action, :Version => "1.2" # Mouse Exit
|
|
57
|
+
field :D, :Type => Action, :Version => "1.2" # Mouse Down
|
|
58
|
+
field :U, :Type => Action, :Version => "1.2" # Mouse Up
|
|
59
|
+
field :Fo, :Type => Action, :Version => "1.2" # Focus
|
|
60
|
+
field :Bl, :Type => Action, :Version => "1.2" # Blur
|
|
61
|
+
field :PO, :Type => Action, :Version => "1.2" # Page Open
|
|
62
|
+
field :PC, :Type => Action, :Version => "1.2" # Page Close
|
|
63
|
+
field :PV, :Type => Action, :Version => "1.2" # Page Visible
|
|
64
|
+
field :PI, :Type => Action, :Version => "1.2" # Page Invisible
|
|
158
65
|
end
|
|
159
|
-
|
|
160
|
-
self.AA ||= AdditionalActions.new
|
|
161
|
-
self.AA.PI = action
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
#
|
|
167
|
-
# Annotation flags
|
|
168
|
-
#
|
|
169
|
-
module Flags
|
|
170
|
-
INVISIBLE = 1 << 0
|
|
171
|
-
HIDDEN = 1 << 1
|
|
172
|
-
PRINT = 1 << 2
|
|
173
|
-
NOZOOM = 1 << 3
|
|
174
|
-
NOROTATE = 1 << 4
|
|
175
|
-
NOVIEW = 1 << 5
|
|
176
|
-
READONLY = 1 << 6
|
|
177
|
-
LOCKED = 1 << 7
|
|
178
|
-
TOGGLENOVIEW = 1 << 8
|
|
179
|
-
LOCKEDCONTENTS = 1 << 9
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
module Markup
|
|
183
|
-
|
|
184
|
-
def self.included(receiver)
|
|
185
|
-
receiver.field :T, :Type => String, :Version => "1.1"
|
|
186
|
-
receiver.field :Popup, :Type => Dictionary, :Version => "1.3"
|
|
187
|
-
receiver.field :CA, :Type => Number, :Default => 1.0, :Version => "1.4"
|
|
188
|
-
receiver.field :RC, :Type => [String, Stream], :Version => "1.5"
|
|
189
|
-
receiver.field :CreationDate, :Type => String, :Version => "1.5"
|
|
190
|
-
receiver.field :IRT, :Type => Dictionary, :Version => "1.5"
|
|
191
|
-
receiver.field :Subj, :Type => String, :Version => "1.5"
|
|
192
|
-
receiver.field :RT, :Type => Name, :Default => :R, :Version => "1.6"
|
|
193
|
-
receiver.field :IT, :Type => Name, :Version => "1.6"
|
|
194
|
-
receiver.field :ExData, :Type => Dictionary, :Version => "1.7"
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
class AppearanceDictionary < Dictionary
|
|
200
66
|
|
|
201
|
-
|
|
67
|
+
#
|
|
68
|
+
# Annotation fields.
|
|
69
|
+
#
|
|
70
|
+
field :Type, :Type => Name, :Default => :Annot
|
|
71
|
+
field :Subtype, :Type => Name, :Required => true
|
|
72
|
+
field :Rect, :Type => Rectangle, :Default => [ 0, 0, 0, 0 ], :Required => true
|
|
73
|
+
field :Contents, :Type => String
|
|
74
|
+
field :P, :Type => Page, :Version => "1.3"
|
|
75
|
+
field :NM, :Type => String, :Version => "1.4"
|
|
76
|
+
field :M, :Type => String, :Version => "1.1"
|
|
77
|
+
field :F, :Type => Integer, :Default => 0, :Version => "1.1"
|
|
78
|
+
field :AP, :Type => AppearanceDictionary, :Version => "1.2"
|
|
79
|
+
field :AS, :Type => Name, :Version => "1.2"
|
|
80
|
+
field :Border, :Type => Array, :Default => [ 0 , 0 , 1 ]
|
|
81
|
+
field :C, :Type => Array.of(Number), :Version => "1.1"
|
|
82
|
+
field :StructParent, :Type => Integer, :Version => "1.3"
|
|
83
|
+
field :OC, :Type => Dictionary, :Version => "1.5"
|
|
84
|
+
|
|
85
|
+
def set_normal_appearance(apstm)
|
|
86
|
+
self.AP ||= AppearanceDictionary.new
|
|
87
|
+
self.AP[:N] = apstm
|
|
88
|
+
|
|
89
|
+
self
|
|
90
|
+
end
|
|
202
91
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
92
|
+
def set_rollover_appearance(apstm)
|
|
93
|
+
self.AP ||= AppearanceDictionary.new
|
|
94
|
+
self.AP[:R] = apstm
|
|
206
95
|
|
|
207
|
-
|
|
96
|
+
self
|
|
97
|
+
end
|
|
208
98
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
include StandardObject
|
|
214
|
-
|
|
215
|
-
SOLID = :S
|
|
216
|
-
DASHED = :D
|
|
217
|
-
BEVELED = :B
|
|
218
|
-
INSET = :I
|
|
219
|
-
UNDERLINE = :U
|
|
99
|
+
def set_down_appearance(apstm)
|
|
100
|
+
self.AP ||= AppearanceStream.new
|
|
101
|
+
self.AP[:D] = apstm
|
|
220
102
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
field :S, :Type => Name, :Default => SOLID
|
|
224
|
-
field :D, :Type => Array, :Default => [ 3 ]
|
|
103
|
+
self
|
|
104
|
+
end
|
|
225
105
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
106
|
+
module Triggerable
|
|
107
|
+
|
|
108
|
+
def onMouseOver(action)
|
|
109
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
110
|
+
raise TypeError, "An Action object must be passed."
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
self.AA ||= AdditionalActions.new
|
|
114
|
+
self.AA.E = action
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def onMouseOut(action)
|
|
118
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
119
|
+
raise TypeError, "An Action object must be passed."
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
self.AA ||= AdditionalActions.new
|
|
123
|
+
self.AA.X = action
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def onMouseDown(action)
|
|
127
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
128
|
+
raise TypeError, "An Action object must be passed."
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
self.AA ||= AdditionalActions.new
|
|
132
|
+
self.AA.D = action
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def onMouseUp(action)
|
|
136
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
137
|
+
raise TypeError, "An Action object must be passed."
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
self.AA ||= AdditionalActions.new
|
|
141
|
+
self.AA.U = action
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def onFocus(action)
|
|
145
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
146
|
+
raise TypeError, "An Action object must be passed."
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
self.AA ||= AdditionalActions.new
|
|
150
|
+
self.AA.Fo = action
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def onBlur(action)
|
|
154
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
155
|
+
raise TypeError, "An Action object must be passed."
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
self.AA ||= AdditionalActions.new
|
|
159
|
+
self.AA.Bl = action
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def onPageOpen(action)
|
|
163
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
164
|
+
raise TypeError, "An Action object must be passed."
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
self.AA ||= AdditionalActions.new
|
|
168
|
+
self.AA.PO = action
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def onPageClose(action)
|
|
172
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
173
|
+
raise TypeError, "An Action object must be passed."
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
self.AA ||= AdditionalActions.new
|
|
177
|
+
self.AA.PC = action
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def onPageVisible(action)
|
|
181
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
182
|
+
raise TypeError, "An Action object must be passed."
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
self.AA ||= AdditionalActions.new
|
|
186
|
+
self.AA.PV = action
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def onPageInvisible(action)
|
|
190
|
+
unless action.is_a?(Action) or action.is_a?(Reference)
|
|
191
|
+
raise TypeError, "An Action object must be passed."
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
self.AA ||= AdditionalActions.new
|
|
195
|
+
self.AA.PI = action
|
|
196
|
+
end
|
|
197
|
+
end
|
|
255
198
|
|
|
256
|
-
|
|
199
|
+
#
|
|
200
|
+
# Annotation flags
|
|
201
|
+
#
|
|
202
|
+
module Flags
|
|
203
|
+
INVISIBLE = 1 << 0
|
|
204
|
+
HIDDEN = 1 << 1
|
|
205
|
+
PRINT = 1 << 2
|
|
206
|
+
NOZOOM = 1 << 3
|
|
207
|
+
NOROTATE = 1 << 4
|
|
208
|
+
NOVIEW = 1 << 5
|
|
209
|
+
READONLY = 1 << 6
|
|
210
|
+
LOCKED = 1 << 7
|
|
211
|
+
TOGGLENOVIEW = 1 << 8
|
|
212
|
+
LOCKEDCONTENTS = 1 << 9
|
|
213
|
+
end
|
|
257
214
|
|
|
258
|
-
|
|
215
|
+
module Markup
|
|
216
|
+
def self.included(receiver)
|
|
217
|
+
receiver.field :T, :Type => String, :Version => "1.1"
|
|
218
|
+
receiver.field :Popup, :Type => Dictionary, :Version => "1.3"
|
|
219
|
+
receiver.field :CA, :Type => Number, :Default => 1.0, :Version => "1.4"
|
|
220
|
+
receiver.field :RC, :Type => [String, Stream], :Version => "1.5"
|
|
221
|
+
receiver.field :CreationDate, :Type => String, :Version => "1.5"
|
|
222
|
+
receiver.field :IRT, :Type => Dictionary, :Version => "1.5"
|
|
223
|
+
receiver.field :Subj, :Type => String, :Version => "1.5"
|
|
224
|
+
receiver.field :RT, :Type => Name, :Default => :R, :Version => "1.6"
|
|
225
|
+
receiver.field :IT, :Type => Name, :Version => "1.6"
|
|
226
|
+
receiver.field :ExData, :Type => Dictionary, :Version => "1.7"
|
|
227
|
+
end
|
|
228
|
+
end
|
|
259
229
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
field :IC, :Type => Array
|
|
263
|
-
field :BE, :Type => Dictionary, :Version => "1.5"
|
|
264
|
-
field :RD, :Type => Array, :Version => "1.5"
|
|
265
|
-
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
class Square < Shape
|
|
269
|
-
field :Subtype, :Type => Name, :Default => :Square, :Required => true
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
class Circle < Shape
|
|
273
|
-
|
|
274
|
-
field :Subtype, :Type => Name, :Default => :Circle, :Required => true
|
|
230
|
+
class BorderStyle < Dictionary
|
|
231
|
+
include StandardObject
|
|
275
232
|
|
|
276
|
-
|
|
233
|
+
SOLID = :S
|
|
234
|
+
DASHED = :D
|
|
235
|
+
BEVELED = :B
|
|
236
|
+
INSET = :I
|
|
237
|
+
UNDERLINE = :U
|
|
277
238
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
include Markup
|
|
284
|
-
|
|
285
|
-
module TextName
|
|
286
|
-
COMMENT = :C
|
|
287
|
-
KEY = :K
|
|
288
|
-
NOTE = :N
|
|
289
|
-
HELP = :H
|
|
290
|
-
NEWPARAGRAPH = :NP
|
|
291
|
-
PARAGRAPH = :P
|
|
292
|
-
INSERT = :I
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
field :Subtype, :Type => Name, :Default => :Text, :Required => true
|
|
296
|
-
field :Open, :Type => Boolean, :Default => false
|
|
297
|
-
field :Name, :Type => Name, :Default => TextName::NOTE
|
|
298
|
-
field :State, :Type => String, :Version => "1.5"
|
|
299
|
-
field :StateModel, :Type => String, :Version => "1.5"
|
|
300
|
-
|
|
301
|
-
def pre_build
|
|
302
|
-
|
|
303
|
-
model = self.StateModel
|
|
304
|
-
state = self.State
|
|
305
|
-
|
|
306
|
-
case model
|
|
307
|
-
when "Marked"
|
|
308
|
-
state = "Unmarked" if state.nil?
|
|
309
|
-
when "Review"
|
|
310
|
-
state = "None" if state.nil?
|
|
239
|
+
field :Type, :Type => Name, :Default => :Border
|
|
240
|
+
field :W, :Type => Number, :Default => 1
|
|
241
|
+
field :S, :Type => Name, :Default => SOLID
|
|
242
|
+
field :D, :Type => Array, :Default => [ 3 ]
|
|
311
243
|
end
|
|
312
244
|
|
|
313
|
-
|
|
314
|
-
|
|
245
|
+
class BorderEffect < Dictionary
|
|
246
|
+
include StandardObject
|
|
315
247
|
|
|
316
|
-
|
|
248
|
+
NONE = :S
|
|
249
|
+
CLOUDY = :C
|
|
317
250
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
class FreeText < Annotation
|
|
322
|
-
|
|
323
|
-
include Markup
|
|
324
|
-
|
|
325
|
-
module Intent
|
|
326
|
-
FREETEXT = :FreeText
|
|
327
|
-
FREETEXTCALLOUT = :FreeTextCallout
|
|
328
|
-
FREETEXTTYPEWRITER = :FreeTextTypeWriter
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
field :Subtype, :Type => Name, :Default => :FreeText, :Required => true
|
|
332
|
-
field :DA, :Type => String, :Default => "/F1 10 Tf 0 g", :Required => true
|
|
333
|
-
field :Q, :Type => Integer, :Default => Field::TextAlign::LEFT, :Version => "1.4"
|
|
334
|
-
field :RC, :Type => [String, Stream], :Version => "1.5"
|
|
335
|
-
field :DS, :Type => String, :Version => "1.5"
|
|
336
|
-
field :CL, :Type => Array, :Version => "1.6"
|
|
337
|
-
field :IT, :Type => Name, :Default => Intent::FREETEXT, :Version => "1.6"
|
|
338
|
-
field :BE, :Type => Dictionary, :Version => "1.6"
|
|
339
|
-
field :RD, :Type => Array, :Version => "1.6"
|
|
340
|
-
field :BS, :Type => Dictionary, :Version => "1.6"
|
|
341
|
-
field :LE, :Type => Name, :Default => :None, :Version => "1.6"
|
|
342
|
-
|
|
343
|
-
end
|
|
251
|
+
field :S, :Type => Name, :Default => NONE
|
|
252
|
+
field :I, :Type => Integer, :Default => 0
|
|
253
|
+
end
|
|
344
254
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
field :H, :Type => Name, :Default => Highlight::INVERT, :Version => "1.2"
|
|
371
|
-
field :AP, :Type => Dictionary, :Version => "1.3"
|
|
372
|
-
field :QuadPoints, :Type => Array, :Version => "1.6"
|
|
373
|
-
|
|
374
|
-
end
|
|
255
|
+
class AppearanceCharacteristics < Dictionary
|
|
256
|
+
include StandardObject
|
|
257
|
+
|
|
258
|
+
module CaptionStyle
|
|
259
|
+
CAPTION_ONLY = 0
|
|
260
|
+
ICON_ONLY = 1
|
|
261
|
+
CAPTION_BELOW = 2
|
|
262
|
+
CAPTION_ABOVE = 3
|
|
263
|
+
CAPTION_RIGHT = 4
|
|
264
|
+
CAPTION_LEFT = 5
|
|
265
|
+
CAPTION_OVERLAID = 6
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
field :R, :Type => Integer, :Default => 0
|
|
269
|
+
field :BC, :Type => Array.of(Number)
|
|
270
|
+
field :BG, :Type => Array.of(Number)
|
|
271
|
+
field :CA, :Type => String
|
|
272
|
+
field :RC, :Type => String
|
|
273
|
+
field :AC, :Type => String
|
|
274
|
+
field :I, :Type => Stream
|
|
275
|
+
field :RI, :Type => Stream
|
|
276
|
+
field :IX, :Type => Stream
|
|
277
|
+
field :IF, :Type => Dictionary
|
|
278
|
+
field :TP, :Type => Integer, :Default => CaptionStyle::CAPTION_ONLY
|
|
279
|
+
end
|
|
375
280
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
GRAPH = :Graph
|
|
386
|
-
PAPERCLIP = :Paperclip
|
|
387
|
-
PUSHPIN = :PushPin
|
|
388
|
-
TAG = :Tag
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
field :Subtype, :Type => Name, :Default => :FileAttachment, :Required => true
|
|
392
|
-
field :FS, :Type => Dictionary, :Required => true
|
|
393
|
-
field :Name, :Type => Name, :Default => Icons::PUSHPIN
|
|
394
|
-
|
|
395
|
-
end
|
|
281
|
+
class Shape < Annotation
|
|
282
|
+
include Markup
|
|
283
|
+
|
|
284
|
+
field :Subtype, :Type => Name, :Required => true
|
|
285
|
+
field :BS, :Type => BorderStyle
|
|
286
|
+
field :IC, :Type => Array.of(Number)
|
|
287
|
+
field :BE, :Type => BorderEffect, :Version => "1.5"
|
|
288
|
+
field :RD, :Type => Rectangle, :Version => "1.5"
|
|
289
|
+
end
|
|
396
290
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
include Triggerable
|
|
404
|
-
|
|
405
|
-
field :Subtype, :Type => Name, :Default => :Screen, :Required => true
|
|
406
|
-
field :T, :Type => String
|
|
407
|
-
field :MK, :Type => Dictionary
|
|
408
|
-
field :A, :Type => Dictionary, :Version => "1.1"
|
|
409
|
-
field :AA, :Type => Dictionary, :Version => "1.2"
|
|
410
|
-
|
|
411
|
-
end
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
class Sound < Annotation
|
|
415
|
-
|
|
416
|
-
include Markup
|
|
417
|
-
|
|
418
|
-
module Icons
|
|
419
|
-
SPEAKER = :Speaker
|
|
420
|
-
MIC = :Mic
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
field :Subtype, :Type => Name, :Default => :Sound, :Required => true
|
|
424
|
-
field :Sound, :Type => Stream, :Required => true
|
|
425
|
-
field :Name, :Type => Name, :Default => Icons::SPEAKER
|
|
426
|
-
|
|
427
|
-
end
|
|
428
|
-
|
|
429
|
-
class RichMedia < Annotation
|
|
430
|
-
|
|
431
|
-
field :Subtype, :Type => Name, :Default => :RichMedia, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
432
|
-
field :RichMediaSettings, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
433
|
-
field :RichMediaContent, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
434
|
-
|
|
435
|
-
class Settings < Dictionary
|
|
436
|
-
include StandardObject
|
|
437
|
-
|
|
438
|
-
field :Type, :Type => Name, :Default => :RichMediaSettings, :Version => "1.7", :ExtensionLevel => 3
|
|
439
|
-
field :Activation, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
440
|
-
field :Deactivation, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
441
|
-
end
|
|
442
|
-
|
|
443
|
-
class Activation < Dictionary
|
|
444
|
-
include StandardObject
|
|
445
|
-
|
|
446
|
-
USER_ACTION = :XA
|
|
447
|
-
PAGE_OPEN = :PO
|
|
448
|
-
PAGE_VISIBLE = :PV
|
|
449
|
-
|
|
450
|
-
field :Type, :Type => Name, :Default => :RichMediaActivation, :Version => "1.7", :ExtensionLevel => 3
|
|
451
|
-
field :Condition, :Type => Name, :Default => USER_ACTION, :Version => "1.7", :ExtensionLevel => 3
|
|
452
|
-
field :Animation, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
453
|
-
field :View, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
454
|
-
field :Configuration, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
455
|
-
field :Presentation, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
456
|
-
field :Scripts, :Type => Array, :Version => "1.7", :ExtensionLevel => 3
|
|
457
|
-
end
|
|
458
|
-
|
|
459
|
-
class Deactivation < Dictionary
|
|
460
|
-
include StandardObject
|
|
461
|
-
|
|
462
|
-
USER_ACTION = :XD
|
|
463
|
-
PAGE_CLOSE = :PC
|
|
464
|
-
PAGE_INVISIBLE = :PV
|
|
465
|
-
|
|
466
|
-
field :Type, :Type => Name, :Default => :RichMediaDeactivation, :Version => "1.7", :ExtensionLevel => 3
|
|
467
|
-
field :Condition, :Type => Name, :Default => USER_ACTION, :Version => "1.7", :ExtensionLevel => 3
|
|
468
|
-
end
|
|
469
|
-
|
|
470
|
-
class Animation < Dictionary
|
|
471
|
-
include StandardObject
|
|
472
|
-
|
|
473
|
-
NONE = :None
|
|
474
|
-
LINEAR = :Linear
|
|
475
|
-
OSCILLATING = :Oscillating
|
|
476
|
-
|
|
477
|
-
field :Type, :Type => Name, :Default => :RichMediaAnimation, :Version => "1.7", :ExtensionLevel => 3
|
|
478
|
-
field :Subtype, :Type => Name, :Default => NONE, :Version => "1.7", :ExtensionLevel => 3
|
|
479
|
-
field :PlayCount, :Type => Integer, :Default => -1, :Version => "1.7", :ExtensionLevel => 3
|
|
480
|
-
field :Speed, :Type => Number, :Default => 1, :Version => "1.7", :ExtensionLevel => 3
|
|
481
|
-
end
|
|
482
|
-
|
|
483
|
-
class Presentation < Dictionary
|
|
484
|
-
include StandardObject
|
|
485
|
-
|
|
486
|
-
WINDOWED = :Windowed
|
|
487
|
-
EMBEDDED = :Embedded
|
|
488
|
-
|
|
489
|
-
field :Type, :Type => Name, :Default => :RichMediaPresentation, :Version => "1.7", :ExtensionLevel => 3
|
|
490
|
-
field :Style, :Type => Name, :Default => EMBEDDED, :Version => "1.7", :ExtensionLevel => 3
|
|
491
|
-
field :Window, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
492
|
-
field :Transparent, :Type => Boolean, :Default => false, :Version => "1.7", :ExtensionLevel => 3
|
|
493
|
-
field :NavigationPane, :Type => Boolean, :Default => false, :Version => "1.7", :ExtensionLevel => 3
|
|
494
|
-
field :Toolbar, :Type => Boolean, :Version => "1.7", :ExtensionLevel => 3
|
|
495
|
-
field :PassContextClick, :Type => Boolean, :Default => false, :Version => "1.7", :ExtensionLevel => 3
|
|
496
|
-
end
|
|
497
|
-
|
|
498
|
-
class Window < Dictionary
|
|
499
|
-
include StandardObject
|
|
500
|
-
|
|
501
|
-
field :Type, :Type => Name, :Default => :RichMediaWindow, :Version => "1.7", :ExtensionLevel => 3
|
|
502
|
-
field :Width, :Type => Dictionary, :Default => {:Default => 288, :Max => 576, :Min => 72}, :Version => "1.7", :ExtensionLevel => 3
|
|
503
|
-
field :Height, :Type => Dictionary, :Default => {:Default => 216, :Max => 432, :Min => 72}, :Version => "1.7", :ExtensionLevel => 3
|
|
504
|
-
field :Position, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
505
|
-
end
|
|
506
|
-
|
|
507
|
-
class Position < Dictionary
|
|
508
|
-
include StandardObject
|
|
509
|
-
|
|
510
|
-
NEAR = :Near
|
|
511
|
-
CENTER = :Center
|
|
512
|
-
FAR = :Far
|
|
513
|
-
|
|
514
|
-
field :Type, :Type => Name, :Default => :RichMediaPosition, :Version => "1.7", :ExtensionLevel => 3
|
|
515
|
-
field :HAlign, :Type => Name, :Default => FAR, :Version => "1.7", :ExtensionLevel => 3
|
|
516
|
-
field :VAlign, :Type => Name, :Default => NEAR, :Version => "1.7", :ExtensionLevel => 3
|
|
517
|
-
field :HOffset, :Type => Number, :Default => 18, :Version => "1.7", :ExtensionLevel => 3
|
|
518
|
-
field :VOffset, :Type => Number, :Default => 18, :Version => "1.7", :ExtensionLevel => 3
|
|
519
|
-
end
|
|
520
|
-
|
|
521
|
-
class Content < Dictionary
|
|
522
|
-
include StandardObject
|
|
523
|
-
|
|
524
|
-
field :Type, :Type => Name, :Default => :RichMediaContent, :Version => "1.7", :ExtensionLevel => 3
|
|
525
|
-
field :Assets, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
526
|
-
field :Configurations, :Type => Array, :Version => "1.7", :ExtensionLevel => 3
|
|
527
|
-
field :Views, :Type => Array, :Version => "1.7", :ExtensionLevel => 3
|
|
528
|
-
end
|
|
529
|
-
|
|
530
|
-
class Configuration < Dictionary
|
|
531
|
-
include StandardObject
|
|
532
|
-
|
|
533
|
-
U3D = :"3D"
|
|
534
|
-
FLASH = :Flash
|
|
535
|
-
SOUND = :Sound
|
|
536
|
-
VIDEO = :Video
|
|
537
|
-
|
|
538
|
-
field :Type, :Type => Name, :Default => :RichMediaConfiguration, :Version => "1.7", :ExtensionLevel => 3
|
|
539
|
-
field :Subtype, :Type => Name, :Version => "1.7", :ExtensionLevel => 3
|
|
540
|
-
field :Name, :Type => String, :Version => "1.7", :ExtensionLevel => 3
|
|
541
|
-
field :Instances, :Type => Array, :Version => "1.7", :ExtensionLevel => 3
|
|
542
|
-
end
|
|
543
|
-
|
|
544
|
-
class Instance < Dictionary
|
|
545
|
-
include StandardObject
|
|
546
|
-
|
|
547
|
-
U3D = :"3D"
|
|
548
|
-
FLASH = :Flash
|
|
549
|
-
SOUND = :Sound
|
|
550
|
-
VIDEO = :Video
|
|
551
|
-
|
|
552
|
-
field :Type, :Type => Name, :Default => :RichMediaInstance, :Version => "1.7", :ExtensionLevel => 3
|
|
553
|
-
field :Subtype, :Type => Name, :Version => "1.7", :ExtensionLevel => 3
|
|
554
|
-
field :Params, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
555
|
-
field :Asset, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
556
|
-
end
|
|
557
|
-
|
|
558
|
-
class Parameters < Dictionary
|
|
559
|
-
include StandardObject
|
|
560
|
-
|
|
561
|
-
module Binding
|
|
562
|
-
NONE = :None
|
|
563
|
-
FOREGROUND = :Foreground
|
|
564
|
-
BACKGROUND = :Background
|
|
565
|
-
MATERIAL = :Material
|
|
291
|
+
class Square < Shape
|
|
292
|
+
field :Subtype, :Type => Name, :Default => :Square, :Required => true
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
class Circle < Shape
|
|
296
|
+
field :Subtype, :Type => Name, :Default => :Circle, :Required => true
|
|
566
297
|
end
|
|
567
298
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
299
|
+
#
|
|
300
|
+
# Text annotation
|
|
301
|
+
#
|
|
302
|
+
class Text < Annotation
|
|
303
|
+
include Markup
|
|
304
|
+
|
|
305
|
+
module TextName
|
|
306
|
+
COMMENT = :C
|
|
307
|
+
KEY = :K
|
|
308
|
+
NOTE = :N
|
|
309
|
+
HELP = :H
|
|
310
|
+
NEWPARAGRAPH = :NP
|
|
311
|
+
PARAGRAPH = :P
|
|
312
|
+
INSERT = :I
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
field :Subtype, :Type => Name, :Default => :Text, :Required => true
|
|
316
|
+
field :Open, :Type => Boolean, :Default => false
|
|
317
|
+
field :Name, :Type => Name, :Default => TextName::NOTE
|
|
318
|
+
field :State, :Type => String, :Version => "1.5"
|
|
319
|
+
field :StateModel, :Type => String, :Version => "1.5"
|
|
320
|
+
|
|
321
|
+
def pre_build
|
|
322
|
+
model = self.StateModel
|
|
323
|
+
state = self.State
|
|
324
|
+
|
|
325
|
+
case model
|
|
326
|
+
when "Marked"
|
|
327
|
+
self.State = "Unmarked" if state.nil?
|
|
328
|
+
when "Review"
|
|
329
|
+
self.State = "None" if state.nil?
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
super
|
|
333
|
+
end
|
|
334
|
+
end
|
|
581
335
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
336
|
+
#
|
|
337
|
+
# FreeText Annotation
|
|
338
|
+
#
|
|
339
|
+
class FreeText < Annotation
|
|
340
|
+
include Markup
|
|
341
|
+
|
|
342
|
+
module Intent
|
|
343
|
+
FREETEXT = :FreeText
|
|
344
|
+
FREETEXTCALLOUT = :FreeTextCallout
|
|
345
|
+
FREETEXTTYPEWRITER = :FreeTextTypeWriter
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
field :Subtype, :Type => Name, :Default => :FreeText, :Required => true
|
|
349
|
+
field :DA, :Type => String, :Default => "/F1 10 Tf 0 g", :Required => true
|
|
350
|
+
field :Q, :Type => Integer, :Default => Field::TextAlign::LEFT, :Version => "1.4"
|
|
351
|
+
field :RC, :Type => [String, Stream], :Version => "1.5"
|
|
352
|
+
field :DS, :Type => String, :Version => "1.5"
|
|
353
|
+
field :CL, :Type => Array.of(Number), :Version => "1.6"
|
|
354
|
+
field :IT, :Type => Name, :Default => Intent::FREETEXT, :Version => "1.6"
|
|
355
|
+
field :BE, :Type => BorderEffect, :Version => "1.6"
|
|
356
|
+
field :RD, :Type => Rectangle, :Version => "1.6"
|
|
357
|
+
field :BS, :Type => BorderStyle, :Version => "1.6"
|
|
358
|
+
field :LE, :Type => Name, :Default => :None, :Version => "1.6"
|
|
359
|
+
end
|
|
589
360
|
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
field :A, :Type => Dictionary, :Version => "1.1"
|
|
621
|
-
field :AA, :Type => Dictionary, :Version => "1.2"
|
|
622
|
-
field :BS, :Type => Dictionary, :Version => "1.2"
|
|
623
|
-
|
|
624
|
-
def onActivate(action)
|
|
625
|
-
|
|
626
|
-
unless action.is_a?(Action)
|
|
627
|
-
raise TypeError, "An Action object must be passed."
|
|
361
|
+
#
|
|
362
|
+
# Class representing an link annotation.
|
|
363
|
+
#
|
|
364
|
+
class Link < Annotation
|
|
365
|
+
|
|
366
|
+
#
|
|
367
|
+
# The annotations highlighting mode.
|
|
368
|
+
# The visual effect to be used when the mouse button is pressed or held down inside its active area.
|
|
369
|
+
#
|
|
370
|
+
module Highlight
|
|
371
|
+
# No highlighting
|
|
372
|
+
NONE = :N
|
|
373
|
+
|
|
374
|
+
# Invert the contents of the annotation rectangle.
|
|
375
|
+
INVERT = :I
|
|
376
|
+
|
|
377
|
+
# Invert the annotations border.
|
|
378
|
+
OUTLINE = :O
|
|
379
|
+
|
|
380
|
+
# Display the annotation as if it were being pushed below the surface of the page
|
|
381
|
+
PUSH = :P
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
field :Subtype, :Type => Name, :Default => :Link, :Required => true
|
|
385
|
+
field :A, :Type => Action, :Version => "1.1"
|
|
386
|
+
field :Dest, :Type => [ Destination, Name, String ]
|
|
387
|
+
field :H, :Type => Name, :Default => Highlight::INVERT, :Version => "1.2"
|
|
388
|
+
field :PA, :Type => Dictionary, :Version => "1.3"
|
|
389
|
+
field :QuadPoints, :Type => Array.of(Number), :Version => "1.6"
|
|
390
|
+
field :BS, :Type => BorderStyle, :Version => "1.6"
|
|
628
391
|
end
|
|
629
|
-
|
|
630
|
-
self.A = action
|
|
631
|
-
end
|
|
632
392
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
393
|
+
#
|
|
394
|
+
# Class representing a file attachment annotation.
|
|
395
|
+
#
|
|
396
|
+
class FileAttachment < Annotation
|
|
397
|
+
include Markup
|
|
398
|
+
|
|
399
|
+
# Icons to be displayed for file attachment.
|
|
400
|
+
module Icons
|
|
401
|
+
GRAPH = :Graph
|
|
402
|
+
PAPERCLIP = :Paperclip
|
|
403
|
+
PUSHPIN = :PushPin
|
|
404
|
+
TAG = :Tag
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
field :Subtype, :Type => Name, :Default => :FileAttachment, :Required => true
|
|
408
|
+
field :FS, :Type => FileSpec, :Required => true
|
|
409
|
+
field :Name, :Type => Name, :Default => Icons::PUSHPIN
|
|
640
410
|
end
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
411
|
+
|
|
412
|
+
#
|
|
413
|
+
# Class representing a screen Annotation.
|
|
414
|
+
# A screen annotation specifies a region of a page upon which media clips may be played. It also serves as an object from which actions can be triggered.
|
|
415
|
+
#
|
|
416
|
+
class Screen < Annotation
|
|
417
|
+
include Triggerable
|
|
418
|
+
|
|
419
|
+
field :Subtype, :Type => Name, :Default => :Screen, :Required => true
|
|
420
|
+
field :T, :Type => String
|
|
421
|
+
field :MK, :Type => AppearanceCharacteristics
|
|
422
|
+
field :A, :Type => Action, :Version => "1.1"
|
|
423
|
+
field :AA, :Type => AdditionalActions, :Version => "1.2"
|
|
654
424
|
end
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
class CheckBox < Button
|
|
659
|
-
|
|
660
|
-
def pre_build
|
|
425
|
+
|
|
426
|
+
class Sound < Annotation
|
|
427
|
+
include Markup
|
|
661
428
|
|
|
662
|
-
|
|
429
|
+
module Icons
|
|
430
|
+
SPEAKER = :Speaker
|
|
431
|
+
MIC = :Mic
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
field :Subtype, :Type => Name, :Default => :Sound, :Required => true
|
|
435
|
+
field :Sound, :Type => Stream, :Required => true
|
|
436
|
+
field :Name, :Type => Name, :Default => Icons::SPEAKER
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
class RichMedia < Annotation
|
|
663
440
|
|
|
664
|
-
|
|
665
|
-
|
|
441
|
+
class Position < Dictionary
|
|
442
|
+
include StandardObject
|
|
443
|
+
|
|
444
|
+
NEAR = :Near
|
|
445
|
+
CENTER = :Center
|
|
446
|
+
FAR = :Far
|
|
447
|
+
|
|
448
|
+
field :Type, :Type => Name, :Default => :RichMediaPosition, :Version => "1.7", :ExtensionLevel => 3
|
|
449
|
+
field :HAlign, :Type => Name, :Default => FAR, :Version => "1.7", :ExtensionLevel => 3
|
|
450
|
+
field :VAlign, :Type => Name, :Default => NEAR, :Version => "1.7", :ExtensionLevel => 3
|
|
451
|
+
field :HOffset, :Type => Number, :Default => 18, :Version => "1.7", :ExtensionLevel => 3
|
|
452
|
+
field :VOffset, :Type => Number, :Default => 18, :Version => "1.7", :ExtensionLevel => 3
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
class Window < Dictionary
|
|
456
|
+
include StandardObject
|
|
457
|
+
|
|
458
|
+
field :Type, :Type => Name, :Default => :RichMediaWindow, :Version => "1.7", :ExtensionLevel => 3
|
|
459
|
+
field :Width, :Type => Dictionary, :Default => {:Default => 288, :Max => 576, :Min => 72}, :Version => "1.7", :ExtensionLevel => 3
|
|
460
|
+
field :Height, :Type => Dictionary, :Default => {:Default => 216, :Max => 432, :Min => 72}, :Version => "1.7", :ExtensionLevel => 3
|
|
461
|
+
field :Position, :Type => Position, :Version => "1.7", :ExtensionLevel => 3
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
class Presentation < Dictionary
|
|
465
|
+
include StandardObject
|
|
466
|
+
|
|
467
|
+
WINDOWED = :Windowed
|
|
468
|
+
EMBEDDED = :Embedded
|
|
469
|
+
|
|
470
|
+
field :Type, :Type => Name, :Default => :RichMediaPresentation, :Version => "1.7", :ExtensionLevel => 3
|
|
471
|
+
field :Style, :Type => Name, :Default => EMBEDDED, :Version => "1.7", :ExtensionLevel => 3
|
|
472
|
+
field :Window, :Type => Window, :Version => "1.7", :ExtensionLevel => 3
|
|
473
|
+
field :Transparent, :Type => Boolean, :Default => false, :Version => "1.7", :ExtensionLevel => 3
|
|
474
|
+
field :NavigationPane, :Type => Boolean, :Default => false, :Version => "1.7", :ExtensionLevel => 3
|
|
475
|
+
field :Toolbar, :Type => Boolean, :Version => "1.7", :ExtensionLevel => 3
|
|
476
|
+
field :PassContextClick, :Type => Boolean, :Default => false, :Version => "1.7", :ExtensionLevel => 3
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
class Animation < Dictionary
|
|
480
|
+
include StandardObject
|
|
481
|
+
|
|
482
|
+
NONE = :None
|
|
483
|
+
LINEAR = :Linear
|
|
484
|
+
OSCILLATING = :Oscillating
|
|
485
|
+
|
|
486
|
+
field :Type, :Type => Name, :Default => :RichMediaAnimation, :Version => "1.7", :ExtensionLevel => 3
|
|
487
|
+
field :Subtype, :Type => Name, :Default => NONE, :Version => "1.7", :ExtensionLevel => 3
|
|
488
|
+
field :PlayCount, :Type => Integer, :Default => -1, :Version => "1.7", :ExtensionLevel => 3
|
|
489
|
+
field :Speed, :Type => Number, :Default => 1, :Version => "1.7", :ExtensionLevel => 3
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
class Activation < Dictionary
|
|
493
|
+
include StandardObject
|
|
494
|
+
|
|
495
|
+
USER_ACTION = :XA
|
|
496
|
+
PAGE_OPEN = :PO
|
|
497
|
+
PAGE_VISIBLE = :PV
|
|
498
|
+
|
|
499
|
+
field :Type, :Type => Name, :Default => :RichMediaActivation, :Version => "1.7", :ExtensionLevel => 3
|
|
500
|
+
field :Condition, :Type => Name, :Default => USER_ACTION, :Version => "1.7", :ExtensionLevel => 3
|
|
501
|
+
field :Animation, :Type => Animation, :Version => "1.7", :ExtensionLevel => 3
|
|
502
|
+
field :View, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
503
|
+
field :Configuration, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
504
|
+
field :Presentation, :Type => Presentation, :Version => "1.7", :ExtensionLevel => 3
|
|
505
|
+
field :Scripts, :Type => Array.of(FileSpec), :Version => "1.7", :ExtensionLevel => 3
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
class Deactivation < Dictionary
|
|
509
|
+
include StandardObject
|
|
510
|
+
|
|
511
|
+
USER_ACTION = :XD
|
|
512
|
+
PAGE_CLOSE = :PC
|
|
513
|
+
PAGE_INVISIBLE = :PV
|
|
514
|
+
|
|
515
|
+
field :Type, :Type => Name, :Default => :RichMediaDeactivation, :Version => "1.7", :ExtensionLevel => 3
|
|
516
|
+
field :Condition, :Type => Name, :Default => USER_ACTION, :Version => "1.7", :ExtensionLevel => 3
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
class Settings < Dictionary
|
|
520
|
+
include StandardObject
|
|
521
|
+
|
|
522
|
+
field :Type, :Type => Name, :Default => :RichMediaSettings, :Version => "1.7", :ExtensionLevel => 3
|
|
523
|
+
field :Activation, :Type => Activation, :Version => "1.7", :ExtensionLevel => 3
|
|
524
|
+
field :Deactivation, :Type => Deactivation, :Version => "1.7", :ExtensionLevel => 3
|
|
525
|
+
end
|
|
666
526
|
|
|
667
|
-
|
|
527
|
+
class CuePoint < Dictionary
|
|
528
|
+
include StandardObject
|
|
529
|
+
|
|
530
|
+
NAVIGATION = :Navigation
|
|
531
|
+
EVENT = :Event
|
|
532
|
+
|
|
533
|
+
field :Type, :Type => Name, :Default => :CuePoint, :Version => "1.7", :ExtensionLevel => 3
|
|
534
|
+
field :Subtype, :Type => Name, :Version => "1.7", :ExtensionLevel => 3
|
|
535
|
+
field :Name, :Type => String, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
536
|
+
field :Time, :Type => Number, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
537
|
+
field :A, :Type => Action, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
class Parameters < Dictionary
|
|
541
|
+
include StandardObject
|
|
542
|
+
|
|
543
|
+
module Binding
|
|
544
|
+
NONE = :None
|
|
545
|
+
FOREGROUND = :Foreground
|
|
546
|
+
BACKGROUND = :Background
|
|
547
|
+
MATERIAL = :Material
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
field :Type, :Type => Name, :Default => :RichMediaParams, :Version => "1.7", :ExtensionLevel => 3
|
|
551
|
+
field :FlashVars, :Type => [String, Stream], :Version => "1.7", :ExtensionLevel => 3
|
|
552
|
+
field :Binding, :Type => Name, :Default => Binding::NONE, :Version => "1.7", :ExtensionLevel => 3
|
|
553
|
+
field :BindingMaterialName, :Type => String, :Version => "1.7", :ExtensionLevel => 3
|
|
554
|
+
field :CuePoints, :Type => Array.of(CuePoint), :Default => [], :Version => "1.7", :ExtensionLevel => 3
|
|
555
|
+
field :Settings, :Type => [String, Stream], :Version => "1.7", :ExtensionLevel => 3
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
class Instance < Dictionary
|
|
559
|
+
include StandardObject
|
|
560
|
+
|
|
561
|
+
U3D = :"3D"
|
|
562
|
+
FLASH = :Flash
|
|
563
|
+
SOUND = :Sound
|
|
564
|
+
VIDEO = :Video
|
|
565
|
+
|
|
566
|
+
field :Type, :Type => Name, :Default => :RichMediaInstance, :Version => "1.7", :ExtensionLevel => 3
|
|
567
|
+
field :Subtype, :Type => Name, :Version => "1.7", :ExtensionLevel => 3
|
|
568
|
+
field :Params, :Type => Parameters, :Version => "1.7", :ExtensionLevel => 3
|
|
569
|
+
field :Asset, :Type => FileSpec, :Version => "1.7", :ExtensionLevel => 3
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
class Configuration < Dictionary
|
|
573
|
+
include StandardObject
|
|
574
|
+
|
|
575
|
+
U3D = :"3D"
|
|
576
|
+
FLASH = :Flash
|
|
577
|
+
SOUND = :Sound
|
|
578
|
+
VIDEO = :Video
|
|
579
|
+
|
|
580
|
+
field :Type, :Type => Name, :Default => :RichMediaConfiguration, :Version => "1.7", :ExtensionLevel => 3
|
|
581
|
+
field :Subtype, :Type => Name, :Version => "1.7", :ExtensionLevel => 3
|
|
582
|
+
field :Name, :Type => String, :Version => "1.7", :ExtensionLevel => 3
|
|
583
|
+
field :Instances, :Type => Array.of(Instance), :Version => "1.7", :ExtensionLevel => 3
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
class Content < Dictionary
|
|
587
|
+
include StandardObject
|
|
588
|
+
|
|
589
|
+
field :Type, :Type => Name, :Default => :RichMediaContent, :Version => "1.7", :ExtensionLevel => 3
|
|
590
|
+
field :Assets, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3
|
|
591
|
+
field :Configurations, :Type => Array.of(Configuration), :Version => "1.7", :ExtensionLevel => 3
|
|
592
|
+
field :Views, :Type => Array, :Version => "1.7", :ExtensionLevel => 3
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
#
|
|
596
|
+
# Fields of the RichMedia Annotation.
|
|
597
|
+
#
|
|
598
|
+
field :Subtype, :Type => Name, :Default => :RichMedia, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
599
|
+
field :RichMediaSettings, :Type => Settings, :Version => "1.7", :ExtensionLevel => 3
|
|
600
|
+
field :RichMediaContent, :Type => Content, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
668
601
|
end
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
602
|
+
|
|
603
|
+
# Added in ExtensionLevel 3.
|
|
604
|
+
class Projection < Annotation; end
|
|
605
|
+
|
|
606
|
+
#
|
|
607
|
+
# Class representing a widget Annotation.
|
|
608
|
+
# Interactive forms use widget annotations to represent the appearance of fields and to manage user interactions.
|
|
609
|
+
#
|
|
610
|
+
class Widget < Annotation
|
|
611
|
+
include Field
|
|
612
|
+
include Triggerable
|
|
613
|
+
|
|
614
|
+
module Highlight
|
|
615
|
+
# No highlighting
|
|
616
|
+
NONE = :N
|
|
617
|
+
|
|
618
|
+
# Invert the contents of the annotation rectangle.
|
|
619
|
+
INVERT = :I
|
|
620
|
+
|
|
621
|
+
# Invert the annotations border.
|
|
622
|
+
OUTLINE = :O
|
|
623
|
+
|
|
624
|
+
# Display the annotation as if it were being pushed below the surface of the page
|
|
625
|
+
PUSH = :P
|
|
626
|
+
|
|
627
|
+
# Same as P.
|
|
628
|
+
TOGGLE = :T
|
|
629
|
+
end
|
|
630
|
+
|
|
631
|
+
field :Subtype, :Type => Name, :Default => :Widget, :Required => true
|
|
632
|
+
field :H, :Type => Name, :Default => Highlight::INVERT
|
|
633
|
+
field :MK, :Type => AppearanceCharacteristics
|
|
634
|
+
field :A, :Type => Action, :Version => "1.1"
|
|
635
|
+
field :AA, :Type => AdditionalActions, :Version => "1.2"
|
|
636
|
+
field :BS, :Type => BorderStyle, :Version => "1.2"
|
|
675
637
|
|
|
676
|
-
|
|
638
|
+
def onActivate(action)
|
|
639
|
+
unless action.is_a?(Action)
|
|
640
|
+
raise TypeError, "An Action object must be passed."
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
self.A = action
|
|
644
|
+
end
|
|
645
|
+
|
|
646
|
+
class Button < Widget
|
|
647
|
+
|
|
648
|
+
module Flags
|
|
649
|
+
NOTOGGLETOOFF = 1 << 14
|
|
650
|
+
RADIO = 1 << 15
|
|
651
|
+
PUSHBUTTON = 1 << 16
|
|
652
|
+
RADIOSINUNISON = 1 << 26
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
field :FT, :Type => Name, :Default => Field::Type::BUTTON, :Required => true
|
|
656
|
+
end
|
|
677
657
|
|
|
678
|
-
|
|
679
|
-
|
|
658
|
+
class PushButton < Button
|
|
659
|
+
|
|
660
|
+
def pre_build
|
|
661
|
+
self.Ff ||= 0
|
|
662
|
+
self.Ff |= Button::Flags::PUSHBUTTON
|
|
663
|
+
|
|
664
|
+
super
|
|
665
|
+
end
|
|
666
|
+
end
|
|
680
667
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
DONOTSPELLCHECK = 1 << 22
|
|
693
|
-
DONOTSCROLL = 1 << 23
|
|
694
|
-
COMB = 1 << 24
|
|
695
|
-
RICHTEXT = 1 << 25
|
|
696
|
-
end
|
|
697
|
-
|
|
698
|
-
field :FT, :Type => Name, :Default => Field::Type::TEXT, :Required => true
|
|
699
|
-
field :MaxLen, :Type => Integer
|
|
700
|
-
|
|
701
|
-
end
|
|
702
|
-
|
|
703
|
-
class Choice < Widget
|
|
704
|
-
|
|
705
|
-
module Flags
|
|
706
|
-
COMBO = 1 << 17
|
|
707
|
-
EDIT = 1 << 18
|
|
708
|
-
SORT = 1 << 19
|
|
709
|
-
MULTISELECT = 1 << 21
|
|
710
|
-
DONOTSPELLCHECK = 1 << 22
|
|
711
|
-
COMMITONSELCHANGE = 1 << 26
|
|
712
|
-
end
|
|
713
|
-
|
|
714
|
-
field :FT, :Type => Name, :Default => Field::Type::CHOICE, :Required => true
|
|
715
|
-
field :Opt, :Type => Array
|
|
716
|
-
field :TI, :Type => Integer, :Default => 0
|
|
717
|
-
field :I, :Type => Array, :Version => "1.4"
|
|
718
|
-
|
|
719
|
-
end
|
|
720
|
-
|
|
721
|
-
class ComboBox < Choice
|
|
722
|
-
|
|
723
|
-
def pre_build
|
|
668
|
+
class CheckBox < Button
|
|
669
|
+
|
|
670
|
+
def pre_build
|
|
671
|
+
self.Ff ||= 0
|
|
672
|
+
|
|
673
|
+
self.Ff &= ~Button::Flags::RADIO
|
|
674
|
+
self.Ff &= ~Button::Flags::PUSHBUTTON
|
|
675
|
+
|
|
676
|
+
super
|
|
677
|
+
end
|
|
678
|
+
end
|
|
724
679
|
|
|
725
|
-
|
|
726
|
-
|
|
680
|
+
class Radio < Button
|
|
681
|
+
|
|
682
|
+
def pre_build
|
|
683
|
+
self.Ff ||= 0
|
|
684
|
+
|
|
685
|
+
self.Ff &= ~Button::Flags::PUSHBUTTON
|
|
686
|
+
self.Ff |= Button::Flags::RADIO
|
|
687
|
+
|
|
688
|
+
super
|
|
689
|
+
end
|
|
690
|
+
end
|
|
727
691
|
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
692
|
+
class Text < Widget
|
|
693
|
+
module Flags
|
|
694
|
+
MULTILINE = 1 << 12
|
|
695
|
+
PASSWORD = 1 << 13
|
|
696
|
+
FILESELECT = 1 << 20
|
|
697
|
+
DONOTSPELLCHECK = 1 << 22
|
|
698
|
+
DONOTSCROLL = 1 << 23
|
|
699
|
+
COMB = 1 << 24
|
|
700
|
+
RICHTEXT = 1 << 25
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
field :FT, :Type => Name, :Default => Field::Type::TEXT, :Required => true
|
|
704
|
+
field :MaxLen, :Type => Integer
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
class Choice < Widget
|
|
708
|
+
module Flags
|
|
709
|
+
COMBO = 1 << 17
|
|
710
|
+
EDIT = 1 << 18
|
|
711
|
+
SORT = 1 << 19
|
|
712
|
+
MULTISELECT = 1 << 21
|
|
713
|
+
DONOTSPELLCHECK = 1 << 22
|
|
714
|
+
COMMITONSELCHANGE = 1 << 26
|
|
715
|
+
end
|
|
716
|
+
|
|
717
|
+
field :FT, :Type => Name, :Default => Field::Type::CHOICE, :Required => true
|
|
718
|
+
field :Opt, :Type => Array
|
|
719
|
+
field :TI, :Type => Integer, :Default => 0
|
|
720
|
+
field :I, :Type => Array, :Version => "1.4"
|
|
721
|
+
end
|
|
736
722
|
|
|
737
|
-
|
|
738
|
-
|
|
723
|
+
class ComboBox < Choice
|
|
724
|
+
|
|
725
|
+
def pre_build
|
|
726
|
+
self.Ff ||= 0
|
|
727
|
+
self.Ff |= Choice::Flags::COMBO
|
|
728
|
+
|
|
729
|
+
super
|
|
730
|
+
end
|
|
731
|
+
end
|
|
739
732
|
|
|
733
|
+
class ListBox < Choice
|
|
734
|
+
|
|
735
|
+
def pre_build
|
|
736
|
+
self.Ff ||= 0
|
|
737
|
+
self.Ff &= ~Choice::Flags::COMBO
|
|
738
|
+
|
|
739
|
+
super
|
|
740
|
+
end
|
|
741
|
+
end
|
|
742
|
+
|
|
743
|
+
class Signature < Widget
|
|
744
|
+
field :FT, :Type => Name, :Default => Field::Type::SIGNATURE
|
|
745
|
+
field :Lock, :Type => SignatureLock, :Version => "1.5"
|
|
746
|
+
field :SV, :Type => SignatureSeedValue, :Version => "1.5"
|
|
747
|
+
end
|
|
740
748
|
end
|
|
741
|
-
|
|
742
|
-
end
|
|
743
|
-
|
|
744
|
-
class Signature < Widget
|
|
745
|
-
|
|
746
|
-
field :FT, :Type => Name, :Default => Field::Type::SIGNATURE
|
|
747
|
-
field :Lock, :Type => Dictionary, :Version => "1.5"
|
|
748
|
-
field :SV, :Type => Dictionary, :Version => "1.5"
|
|
749
|
-
|
|
750
|
-
end
|
|
751
|
-
|
|
752
|
-
end
|
|
753
|
-
|
|
754
|
-
#
|
|
755
|
-
# Class representing additional actions which can be associated with an annotation having an AA field.
|
|
756
|
-
#
|
|
757
|
-
class AdditionalActions < Dictionary
|
|
758
|
-
|
|
759
|
-
include StandardObject
|
|
760
|
-
|
|
761
|
-
field :E, :Type => Dictionary, :Version => "1.2" # Mouse Enter
|
|
762
|
-
field :X, :Type => Dictionary, :Version => "1.2" # Mouse Exit
|
|
763
|
-
field :D, :Type => Dictionary, :Version => "1.2" # Mouse Down
|
|
764
|
-
field :U, :Type => Dictionary, :Version => "1.2" # Mouse Up
|
|
765
|
-
field :Fo, :Type => Dictionary, :Version => "1.2" # Focus
|
|
766
|
-
field :Bl, :Type => Dictionary, :Version => "1.2" # Blur
|
|
767
|
-
field :PO, :Type => Dictionary, :Version => "1.2" # Page Open
|
|
768
|
-
field :PC, :Type => Dictionary, :Version => "1.2" # Page Close
|
|
769
|
-
field :PV, :Type => Dictionary, :Version => "1.2" # Page Visible
|
|
770
|
-
field :PI, :Type => Dictionary, :Version => "1.2" # Page Invisible
|
|
771
|
-
|
|
772
749
|
end
|
|
773
750
|
|
|
774
|
-
end
|
|
775
|
-
|
|
776
751
|
end
|