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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/examples/attachments/attachment.rb +7 -8
- data/examples/attachments/nested_document.rb +6 -5
- data/examples/encryption/encryption.rb +5 -4
- data/examples/events/events.rb +7 -6
- data/examples/flash/flash.rb +10 -9
- data/examples/forms/javascript.rb +14 -13
- data/examples/forms/xfa.rb +67 -66
- data/examples/javascript/hello_world.rb +6 -5
- data/examples/javascript/js_emulation.rb +26 -26
- data/examples/loop/goto.rb +12 -11
- data/examples/loop/named.rb +17 -16
- data/examples/signature/signature.rb +11 -11
- data/examples/uri/javascript.rb +25 -24
- data/examples/uri/open-uri.rb +5 -4
- data/examples/uri/submitform.rb +11 -10
- data/lib/origami/3d.rb +330 -334
- data/lib/origami/acroform.rb +267 -268
- data/lib/origami/actions.rb +266 -278
- data/lib/origami/annotations.rb +659 -670
- data/lib/origami/array.rb +192 -196
- data/lib/origami/boolean.rb +66 -70
- data/lib/origami/catalog.rb +360 -363
- data/lib/origami/collections.rb +132 -133
- data/lib/origami/compound.rb +125 -129
- data/lib/origami/destinations.rb +226 -237
- data/lib/origami/dictionary.rb +155 -154
- data/lib/origami/encryption.rb +967 -923
- data/lib/origami/extensions/fdf.rb +270 -275
- data/lib/origami/extensions/ppklite.rb +323 -328
- data/lib/origami/filespec.rb +170 -173
- data/lib/origami/filters/ascii.rb +162 -167
- data/lib/origami/filters/ccitt/tables.rb +248 -252
- data/lib/origami/filters/ccitt.rb +309 -312
- data/lib/origami/filters/crypt.rb +31 -34
- data/lib/origami/filters/dct.rb +47 -50
- data/lib/origami/filters/flate.rb +57 -60
- data/lib/origami/filters/jbig2.rb +50 -53
- data/lib/origami/filters/jpx.rb +40 -43
- data/lib/origami/filters/lzw.rb +151 -155
- data/lib/origami/filters/predictors.rb +250 -255
- data/lib/origami/filters/runlength.rb +111 -115
- data/lib/origami/filters.rb +319 -325
- data/lib/origami/font.rb +173 -177
- data/lib/origami/functions.rb +62 -66
- data/lib/origami/graphics/colors.rb +203 -208
- data/lib/origami/graphics/instruction.rb +79 -81
- data/lib/origami/graphics/path.rb +141 -144
- data/lib/origami/graphics/patterns.rb +156 -160
- data/lib/origami/graphics/render.rb +51 -47
- data/lib/origami/graphics/state.rb +144 -142
- data/lib/origami/graphics/text.rb +185 -188
- data/lib/origami/graphics/xobject.rb +818 -804
- data/lib/origami/graphics.rb +25 -26
- data/lib/origami/header.rb +63 -65
- data/lib/origami/javascript.rb +718 -651
- data/lib/origami/linearization.rb +284 -285
- data/lib/origami/metadata.rb +156 -135
- data/lib/origami/name.rb +98 -100
- data/lib/origami/null.rb +49 -51
- data/lib/origami/numeric.rb +133 -135
- data/lib/origami/obfuscation.rb +180 -182
- data/lib/origami/object.rb +634 -631
- data/lib/origami/optionalcontent.rb +147 -149
- data/lib/origami/outline.rb +46 -48
- data/lib/origami/outputintents.rb +76 -77
- data/lib/origami/page.rb +637 -596
- data/lib/origami/parser.rb +214 -221
- data/lib/origami/parsers/fdf.rb +44 -45
- data/lib/origami/parsers/pdf/lazy.rb +147 -154
- data/lib/origami/parsers/pdf/linear.rb +104 -109
- data/lib/origami/parsers/pdf.rb +109 -107
- data/lib/origami/parsers/ppklite.rb +44 -46
- data/lib/origami/pdf.rb +886 -896
- data/lib/origami/reference.rb +116 -120
- data/lib/origami/signature.rb +617 -625
- data/lib/origami/stream.rb +560 -558
- data/lib/origami/string.rb +366 -368
- data/lib/origami/template/patterns.rb +50 -52
- data/lib/origami/template/widgets.rb +111 -114
- data/lib/origami/trailer.rb +153 -157
- data/lib/origami/tree.rb +55 -57
- data/lib/origami/version.rb +19 -19
- data/lib/origami/webcapture.rb +87 -90
- data/lib/origami/xfa/config.rb +409 -414
- data/lib/origami/xfa/connectionset.rb +113 -117
- data/lib/origami/xfa/datasets.rb +38 -42
- data/lib/origami/xfa/localeset.rb +33 -37
- data/lib/origami/xfa/package.rb +49 -52
- data/lib/origami/xfa/pdf.rb +54 -59
- data/lib/origami/xfa/signature.rb +33 -37
- data/lib/origami/xfa/sourceset.rb +34 -38
- data/lib/origami/xfa/stylesheet.rb +35 -39
- data/lib/origami/xfa/template.rb +1630 -1634
- data/lib/origami/xfa/xdc.rb +33 -37
- data/lib/origami/xfa/xfa.rb +132 -123
- data/lib/origami/xfa/xfdf.rb +34 -38
- data/lib/origami/xfa/xmpmeta.rb +34 -38
- data/lib/origami/xfa.rb +50 -53
- data/lib/origami/xreftable.rb +462 -462
- data/lib/origami.rb +37 -38
- data/test/test_actions.rb +22 -20
- data/test/test_annotations.rb +54 -52
- data/test/test_forms.rb +23 -21
- data/test/test_native_types.rb +82 -78
- data/test/test_object_tree.rb +25 -24
- data/test/test_pages.rb +43 -41
- data/test/test_pdf.rb +2 -0
- data/test/test_pdf_attachment.rb +23 -21
- data/test/test_pdf_create.rb +16 -15
- data/test/test_pdf_encrypt.rb +69 -66
- data/test/test_pdf_parse.rb +131 -129
- data/test/test_pdf_parse_lazy.rb +53 -53
- data/test/test_pdf_sign.rb +67 -67
- data/test/test_streams.rb +145 -143
- data/test/test_xrefs.rb +46 -45
- metadata +64 -8
data/lib/origami/numeric.rb
CHANGED
@@ -1,181 +1,179 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
require 'delegate'
|
22
22
|
|
23
23
|
module Origami
|
24
|
+
class InvalidIntegerObjectError < InvalidObjectError # :nodoc:
|
25
|
+
end
|
24
26
|
|
25
|
-
|
27
|
+
#
|
28
|
+
# Class representing a PDF number (Integer, or Real).
|
29
|
+
#
|
30
|
+
module Number
|
31
|
+
include Origami::Object
|
32
|
+
|
33
|
+
def ~
|
34
|
+
self.class.new(~value)
|
26
35
|
end
|
27
36
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
module Number
|
32
|
-
include Origami::Object
|
37
|
+
def |(other)
|
38
|
+
self.class.new(value | other)
|
39
|
+
end
|
33
40
|
|
34
|
-
|
35
|
-
|
36
|
-
|
41
|
+
def &(other)
|
42
|
+
self.class.new(value & other)
|
43
|
+
end
|
37
44
|
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
def ^(other)
|
46
|
+
self.class.new(value ^ other)
|
47
|
+
end
|
41
48
|
|
42
|
-
|
43
|
-
|
44
|
-
|
49
|
+
def <<(val)
|
50
|
+
self.class.new(value << val)
|
51
|
+
end
|
45
52
|
|
46
|
-
|
47
|
-
|
48
|
-
|
53
|
+
def >>(other)
|
54
|
+
self.class.new(value >> other)
|
55
|
+
end
|
49
56
|
|
50
|
-
|
51
|
-
|
52
|
-
|
57
|
+
def +(other)
|
58
|
+
self.class.new(value + other)
|
59
|
+
end
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
|
61
|
+
def -(other)
|
62
|
+
self.class.new(value - other)
|
63
|
+
end
|
57
64
|
|
58
|
-
|
59
|
-
|
60
|
-
|
65
|
+
def -@
|
66
|
+
self.class.new(-value)
|
67
|
+
end
|
61
68
|
|
62
|
-
|
63
|
-
|
64
|
-
|
69
|
+
def *(other)
|
70
|
+
self.class.new(value * other)
|
71
|
+
end
|
65
72
|
|
66
|
-
|
67
|
-
|
68
|
-
|
73
|
+
def /(other)
|
74
|
+
self.class.new(value / other)
|
75
|
+
end
|
69
76
|
|
70
|
-
|
71
|
-
|
72
|
-
|
77
|
+
def abs
|
78
|
+
self.class.new(value.abs)
|
79
|
+
end
|
73
80
|
|
74
|
-
|
75
|
-
|
76
|
-
|
81
|
+
def **(other)
|
82
|
+
self.class.new(value**other)
|
83
|
+
end
|
84
|
+
end
|
77
85
|
|
78
|
-
|
79
|
-
|
80
|
-
|
86
|
+
#
|
87
|
+
# Class representing an Integer Object.
|
88
|
+
#
|
89
|
+
class Integer < DelegateClass(::Integer)
|
90
|
+
include Number
|
81
91
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
92
|
+
TOKENS = ["(\\+|-)?[\\d]+[^.]?"] # :nodoc:
|
93
|
+
REGEXP_TOKEN = Regexp.new(TOKENS.first)
|
94
|
+
|
95
|
+
@@regexp = Regexp.new(WHITESPACES + "(?<int>(\\+|-)?[\\d]+)")
|
86
96
|
|
87
97
|
#
|
88
|
-
#
|
98
|
+
# Creates a new Integer from a Ruby Fixnum / Bignum.
|
99
|
+
# _i_:: The Integer value.
|
89
100
|
#
|
90
|
-
|
91
|
-
|
101
|
+
def initialize(i = 0)
|
102
|
+
unless i.is_a?(::Integer)
|
103
|
+
raise TypeError, "Expected type Fixnum or Bignum, received #{i.class}."
|
104
|
+
end
|
92
105
|
|
93
|
-
|
94
|
-
|
106
|
+
super
|
107
|
+
end
|
95
108
|
|
96
|
-
|
109
|
+
def self.parse(stream, _parser = nil) # :nodoc:
|
110
|
+
scanner = Parser.init_scanner(stream)
|
111
|
+
offset = scanner.pos
|
97
112
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
#
|
102
|
-
def initialize(i = 0)
|
103
|
-
unless i.is_a?(::Integer)
|
104
|
-
raise TypeError, "Expected type Fixnum or Bignum, received #{i.class}."
|
105
|
-
end
|
113
|
+
if !scanner.scan(@@regexp)
|
114
|
+
raise InvalidIntegerObjectError, "Invalid integer format"
|
115
|
+
end
|
106
116
|
|
107
|
-
|
108
|
-
|
117
|
+
value = scanner['int'].to_i
|
118
|
+
int = Integer.new(value)
|
119
|
+
int.file_offset = offset
|
109
120
|
|
110
|
-
|
111
|
-
|
112
|
-
offset = scanner.pos
|
121
|
+
int
|
122
|
+
end
|
113
123
|
|
114
|
-
|
115
|
-
|
116
|
-
|
124
|
+
def to_s(eol: $/) # :nodoc:
|
125
|
+
super(value.to_s, eol: eol)
|
126
|
+
end
|
117
127
|
|
118
|
-
|
119
|
-
|
120
|
-
int.file_offset = offset
|
128
|
+
alias_method :value, :to_i
|
129
|
+
end
|
121
130
|
|
122
|
-
|
123
|
-
|
131
|
+
class InvalidRealObjectError < InvalidObjectError # :nodoc:
|
132
|
+
end
|
124
133
|
|
125
|
-
|
126
|
-
|
127
|
-
|
134
|
+
#
|
135
|
+
# Class representing a Real number Object.
|
136
|
+
# PDF real numbers are arbitrary precision numbers, depending on architectures.
|
137
|
+
#
|
138
|
+
class Real < DelegateClass(Float)
|
139
|
+
include Number
|
128
140
|
|
129
|
-
|
130
|
-
|
141
|
+
TOKENS = ["(\\+|-)?([\\d]*\\.[\\d]+|[\\d]+\\.[\\d]*)([eE](\\+|-)?[\\d]+)?"] # :nodoc:
|
142
|
+
REGEXP_TOKEN = Regexp.new(TOKENS.first)
|
131
143
|
|
132
|
-
|
133
|
-
end
|
144
|
+
@@regexp = Regexp.new(WHITESPACES + "(?<real>#{TOKENS.first})")
|
134
145
|
|
135
146
|
#
|
136
|
-
#
|
137
|
-
#
|
147
|
+
# Creates a new Real from a Ruby Float.
|
148
|
+
# _f_:: The new Real value.
|
138
149
|
#
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
REGEXP_TOKEN = Regexp.new(TOKENS.first)
|
144
|
-
|
145
|
-
@@regexp = Regexp.new(WHITESPACES + "(?<real>#{TOKENS.first})")
|
150
|
+
def initialize(f = 0)
|
151
|
+
unless f.is_a?(Float)
|
152
|
+
raise TypeError, "Expected type Float, received #{f.class}."
|
153
|
+
end
|
146
154
|
|
147
|
-
|
148
|
-
|
149
|
-
# _f_:: The new Real value.
|
150
|
-
#
|
151
|
-
def initialize(f = 0)
|
152
|
-
unless f.is_a?(Float)
|
153
|
-
raise TypeError, "Expected type Float, received #{f.class}."
|
154
|
-
end
|
155
|
-
|
156
|
-
super(f)
|
157
|
-
end
|
155
|
+
super
|
156
|
+
end
|
158
157
|
|
159
|
-
|
160
|
-
|
161
|
-
|
158
|
+
def self.parse(stream, _parser = nil) # :nodoc:
|
159
|
+
scanner = Parser.init_scanner(stream)
|
160
|
+
offset = scanner.pos
|
162
161
|
|
163
|
-
|
164
|
-
|
165
|
-
|
162
|
+
if !scanner.scan(@@regexp)
|
163
|
+
raise InvalidRealObjectError, "Invalid real number format"
|
164
|
+
end
|
166
165
|
|
167
|
-
|
168
|
-
|
169
|
-
|
166
|
+
value = scanner['real'].to_f
|
167
|
+
real = Real.new(value)
|
168
|
+
real.file_offset = offset
|
170
169
|
|
171
|
-
|
172
|
-
|
170
|
+
real
|
171
|
+
end
|
173
172
|
|
174
|
-
|
173
|
+
alias_method :value, :to_f
|
175
174
|
|
176
|
-
|
177
|
-
|
178
|
-
end
|
175
|
+
def to_s(eol: $/) # :nodoc:
|
176
|
+
super(sprintf("%f", self).sub(/\.0*$|(\.\d*[^0])0*$/, '\1'), eol: eol)
|
179
177
|
end
|
180
|
-
|
178
|
+
end
|
181
179
|
end
|