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,129 +1,125 @@
1
- =begin
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # This file is part of Origami, PDF manipulation framework for Ruby
5
+ # Copyright (C) 2016 Guillaume Delugré.
6
+ #
7
+ # Origami is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # Origami is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with Origami. If not, see <http://www.gnu.org/licenses/>.
19
+ #
2
20
 
3
- This file is part of Origami, PDF manipulation framework for Ruby
4
- Copyright (C) 2016 Guillaume Delugré.
21
+ module Origami
22
+ module Filter
23
+ class InvalidRunLengthDataError < DecodeError # :nodoc:
24
+ end
5
25
 
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.
26
+ #
27
+ # Class representing a Filter used to encode and decode data using RLE compression algorithm.
28
+ #
29
+ class RunLength
30
+ include Filter
10
31
 
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.
32
+ EOD = 128 # :nodoc:
15
33
 
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/>.
34
+ #
35
+ # Encodes data using RLE compression method.
36
+ # _stream_:: The data to encode.
37
+ #
38
+ def encode(stream)
39
+ result = "".b
40
+ i = 0
18
41
 
19
- =end
42
+ while i < stream.size
20
43
 
21
- module Origami
44
+ # How many identical bytes coming?
45
+ length = compute_run_length(stream, i)
46
+
47
+ # If more than 1, then compress them.
48
+ if length > 1
49
+ result << (257 - length).chr << stream[i]
50
+
51
+ # Otherwise how many different bytes to copy?
52
+ else
53
+ next_pos = find_next_run(stream, i)
54
+ length = next_pos - i
22
55
 
23
- module Filter
56
+ result << (length - 1).chr << stream[i, length]
57
+
58
+ end
59
+ i += length
60
+ end
61
+
62
+ result << EOD.chr
63
+ end
64
+
65
+ #
66
+ # Decodes data using RLE decompression method.
67
+ # _stream_:: The data to decode.
68
+ #
69
+ def decode(stream)
70
+ result = "".b
71
+
72
+ i = 0
73
+ until (i >= stream.length) || (stream[i].ord == EOD)
74
+
75
+ # At least two bytes are required.
76
+ if i > stream.length - 2
77
+ raise InvalidRunLengthDataError.new("Truncated run-length data", input_data: stream, decoded_data: result)
78
+ end
79
+
80
+ length = stream[i].ord
81
+ if length < EOD
82
+ result << stream[i + 1, length + 1]
83
+ i = i + length + 2
84
+ else
85
+ result << stream[i + 1] * (257 - length)
86
+ i += 2
87
+ end
88
+ end
24
89
 
25
- class InvalidRunLengthDataError < DecodeError #:nodoc:
90
+ # Check if offset is beyond the end of data.
91
+ if i > stream.length
92
+ raise InvalidRunLengthDataError.new("Truncated run-length data", input_data: stream, decoded_data: result)
26
93
  end
27
94
 
28
- #
29
- # Class representing a Filter used to encode and decode data using RLE compression algorithm.
30
- #
31
- class RunLength
32
- include Filter
33
-
34
- EOD = 128 #:nodoc:
35
-
36
- #
37
- # Encodes data using RLE compression method.
38
- # _stream_:: The data to encode.
39
- #
40
- def encode(stream)
41
- result = "".b
42
- i = 0
43
-
44
- while i < stream.size
45
-
46
- # How many identical bytes coming?
47
- length = compute_run_length(stream, i)
48
-
49
- # If more than 1, then compress them.
50
- if length > 1
51
- result << (257 - length).chr << stream[i]
52
- i += length
53
-
54
- # Otherwise how many different bytes to copy?
55
- else
56
- next_pos = find_next_run(stream, i)
57
- length = next_pos - i
58
-
59
- result << (length - 1).chr << stream[i, length]
60
-
61
- i += length
62
- end
63
- end
64
-
65
- result << EOD.chr
66
- end
67
-
68
- #
69
- # Decodes data using RLE decompression method.
70
- # _stream_:: The data to decode.
71
- #
72
- def decode(stream)
73
- result = "".b
74
-
75
- i = 0
76
- until i >= stream.length or stream[i].ord == EOD do
77
-
78
- # At least two bytes are required.
79
- if i > stream.length - 2
80
- raise InvalidRunLengthDataError.new("Truncated run-length data", input_data: stream, decoded_data: result)
81
- end
82
-
83
- length = stream[i].ord
84
- if length < EOD
85
- result << stream[i + 1, length + 1]
86
- i = i + length + 2
87
- else
88
- result << stream[i + 1] * (257 - length)
89
- i = i + 2
90
- end
91
- end
92
-
93
- # Check if offset is beyond the end of data.
94
- if i > stream.length
95
- raise InvalidRunLengthDataError.new("Truncated run-length data", input_data: stream, decoded_data: result)
96
- end
97
-
98
- result
99
- end
100
-
101
- private
102
-
103
- #
104
- # Find the position of the next byte at which a new run starts.
105
- #
106
- def find_next_run(input, pos)
107
- start = pos
108
- pos += 1 while pos + 1 < input.size and (pos - start + 1) < EOD and input[pos] != input[pos + 1]
109
-
110
- pos + 1
111
- end
112
-
113
- #
114
- # Computes the length of the run at the given position.
115
- #
116
- def compute_run_length(input, pos)
117
- run_length = 1
118
- while pos + 1 < input.size and run_length < EOD and input[pos] == input[pos + 1]
119
- run_length += 1
120
- pos += 1
121
- end
122
-
123
- run_length
124
- end
95
+ result
96
+ end
97
+
98
+ private
99
+
100
+ #
101
+ # Find the position of the next byte at which a new run starts.
102
+ #
103
+ def find_next_run(input, pos)
104
+ start = pos
105
+ pos += 1 while (pos + 1 < input.size) && ((pos - start + 1) < EOD) && (input[pos] != input[pos + 1])
106
+
107
+ pos + 1
108
+ end
109
+
110
+ #
111
+ # Computes the length of the run at the given position.
112
+ #
113
+ def compute_run_length(input, pos)
114
+ run_length = 1
115
+ while (pos + 1 < input.size) && (run_length < EOD) && (input[pos] == input[pos + 1])
116
+ run_length += 1
117
+ pos += 1
125
118
  end
126
- RL = RunLength
127
119
 
120
+ run_length
121
+ end
128
122
  end
123
+ RL = RunLength
124
+ end
129
125
  end