rpdf2txt 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/LICENCE +515 -0
- data/Manifest.txt +126 -0
- data/README.txt +30 -0
- data/Rakefile +24 -0
- data/bin/rpdf2txt +58 -0
- data/config.save +12 -0
- data/install.rb +1098 -0
- data/lib/rpdf2txt-rockit/base_extensions.rb +73 -0
- data/lib/rpdf2txt-rockit/bootstrap.rb +120 -0
- data/lib/rpdf2txt-rockit/bounded_lru_cache.rb +43 -0
- data/lib/rpdf2txt-rockit/conflict_resolution.rb +302 -0
- data/lib/rpdf2txt-rockit/directed_graph.rb +401 -0
- data/lib/rpdf2txt-rockit/glr_parser.rb +393 -0
- data/lib/rpdf2txt-rockit/grammar.rb +644 -0
- data/lib/rpdf2txt-rockit/graphdrawing.rb +107 -0
- data/lib/rpdf2txt-rockit/graphviz_dot.rb +63 -0
- data/lib/rpdf2txt-rockit/indexable.rb +53 -0
- data/lib/rpdf2txt-rockit/lalr_parsetable_generator.rb +144 -0
- data/lib/rpdf2txt-rockit/parse_table.rb +273 -0
- data/lib/rpdf2txt-rockit/parsetable_generation.rb +164 -0
- data/lib/rpdf2txt-rockit/parsing_ambiguities.rb +84 -0
- data/lib/rpdf2txt-rockit/profiler.rb +168 -0
- data/lib/rpdf2txt-rockit/reduce_actions_generator.rb +523 -0
- data/lib/rpdf2txt-rockit/rockit.rb +76 -0
- data/lib/rpdf2txt-rockit/rockit_grammar_ast_eval.rb +187 -0
- data/lib/rpdf2txt-rockit/rockit_grammars_parser.rb +126 -0
- data/lib/rpdf2txt-rockit/sourcecode_dumpable.rb +181 -0
- data/lib/rpdf2txt-rockit/stringscanner.rb +54 -0
- data/lib/rpdf2txt-rockit/syntax_tree.rb +452 -0
- data/lib/rpdf2txt-rockit/token.rb +364 -0
- data/lib/rpdf2txt-rockit/version.rb +3 -0
- data/lib/rpdf2txt/attributesparser.rb +42 -0
- data/lib/rpdf2txt/cmapparser.rb +65 -0
- data/lib/rpdf2txt/data/_cmap.grammar +11 -0
- data/lib/rpdf2txt/data/_cmap_range.grammar +15 -0
- data/lib/rpdf2txt/data/_pdfattributes.grammar +32 -0
- data/lib/rpdf2txt/data/cmap.grammar +11 -0
- data/lib/rpdf2txt/data/cmap.rb +37 -0
- data/lib/rpdf2txt/data/cmap_range.grammar +15 -0
- data/lib/rpdf2txt/data/cmap_range.rb +43 -0
- data/lib/rpdf2txt/data/fonts/Courier-Bold.afm +342 -0
- data/lib/rpdf2txt/data/fonts/Courier-BoldOblique.afm +342 -0
- data/lib/rpdf2txt/data/fonts/Courier-Oblique.afm +342 -0
- data/lib/rpdf2txt/data/fonts/Courier.afm +342 -0
- data/lib/rpdf2txt/data/fonts/Helvetica-Bold.afm +2827 -0
- data/lib/rpdf2txt/data/fonts/Helvetica-BoldOblique.afm +2827 -0
- data/lib/rpdf2txt/data/fonts/Helvetica-Oblique.afm +3051 -0
- data/lib/rpdf2txt/data/fonts/Helvetica.afm +3051 -0
- data/lib/rpdf2txt/data/fonts/License-Adobe.txt +65 -0
- data/lib/rpdf2txt/data/fonts/Symbol.afm +213 -0
- data/lib/rpdf2txt/data/fonts/Times-Bold.afm +2588 -0
- data/lib/rpdf2txt/data/fonts/Times-BoldItalic.afm +2384 -0
- data/lib/rpdf2txt/data/fonts/Times-Italic.afm +2667 -0
- data/lib/rpdf2txt/data/fonts/Times-Roman.afm +2419 -0
- data/lib/rpdf2txt/data/fonts/ZapfDingbats.afm +225 -0
- data/lib/rpdf2txt/data/pdfattributes.grammar +32 -0
- data/lib/rpdf2txt/data/pdfattributes.rb +71 -0
- data/lib/rpdf2txt/data/pdftext.grammar +102 -0
- data/lib/rpdf2txt/data/pdftext.rb +146 -0
- data/lib/rpdf2txt/default_handler.rb +352 -0
- data/lib/rpdf2txt/lzw.rb +69 -0
- data/lib/rpdf2txt/object.rb +1114 -0
- data/lib/rpdf2txt/parser.rb +169 -0
- data/lib/rpdf2txt/symbol.rb +408 -0
- data/lib/rpdf2txt/text.rb +182 -0
- data/lib/rpdf2txt/text_state.rb +434 -0
- data/lib/rpdf2txt/textparser.rb +42 -0
- data/test/data/3392_obj +0 -0
- data/test/data/397_decrypted +15 -0
- data/test/data/450_decrypted +153 -0
- data/test/data/450_obj +0 -0
- data/test/data/452_decrypted +125 -0
- data/test/data/454_decrypted +108 -0
- data/test/data/456_decrypted +106 -0
- data/test/data/458_decrypted +111 -0
- data/test/data/458_obj +0 -0
- data/test/data/460_decrypted +118 -0
- data/test/data/460_obj +0 -0
- data/test/data/463_decrypted +117 -0
- data/test/data/465_decrypted +107 -0
- data/test/data/465_obj +0 -0
- data/test/data/90_obj +0 -0
- data/test/data/90_obj_comp +1 -0
- data/test/data/decrypted +0 -0
- data/test/data/encrypt_obj +0 -0
- data/test/data/encrypt_string +0 -0
- data/test/data/encrypt_string_128bit +0 -0
- data/test/data/encrypted_object_stream.pdf +0 -0
- data/test/data/firststream +1 -0
- data/test/data/index.pdfobj +0 -0
- data/test/data/index_2bit.pdfobj +0 -0
- data/test/data/index_masked.pdfobj +0 -0
- data/test/data/indexed.pdfobj +0 -0
- data/test/data/indexed_2bit.pdfobj +0 -0
- data/test/data/indexed_masked.pdfobj +0 -0
- data/test/data/inline.png +0 -0
- data/test/data/logo.png +0 -0
- data/test/data/lzw.pdfobj +0 -0
- data/test/data/lzw_index.pdfobj +0 -0
- data/test/data/page_tree.pdf +148 -0
- data/test/data/pdf_20.png +0 -0
- data/test/data/pdf_21.png +0 -0
- data/test/data/pdf_22.png +0 -0
- data/test/data/pdf_50.png +0 -0
- data/test/data/png.pdfobj +0 -0
- data/test/data/space_bug_stream.txt +119 -0
- data/test/data/stream.txt +292 -0
- data/test/data/stream_kerning_bug.txt +13 -0
- data/test/data/stream_kerning_bug2.txt +6 -0
- data/test/data/test.pdf +0 -0
- data/test/data/test.txt +8 -0
- data/test/data/test_text.txt +42 -0
- data/test/data/working_obj +0 -0
- data/test/data/working_obj2 +0 -0
- data/test/mock.rb +149 -0
- data/test/suite.rb +30 -0
- data/test/test_pdf_object.rb +1802 -0
- data/test/test_pdf_parser.rb +1340 -0
- data/test/test_pdf_text.rb +789 -0
- data/test/test_space_bug_05_2004.rb +87 -0
- data/test/test_stream.rb +194 -0
- data/test/test_text_state.rb +315 -0
- data/usage-en.txt +112 -0
- data/user-stories/UserStories_Rpdf2Txt.txt +34 -0
- data/user-stories/documents/swissmedicjournal/04_2004.pdf +0 -0
- metadata +220 -0
@@ -0,0 +1,789 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Rpdf2txt -- PDF to Text Parser
|
4
|
+
# Copyright (C) 2003 Andreas Schrafl, Hannes Wyss
|
5
|
+
#
|
6
|
+
# This library is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
8
|
+
# License as published by the Free Software Foundation; either
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This library 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 GNU
|
14
|
+
# Lesser General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
17
|
+
# License along with this library; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
#
|
20
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Z�rich, Switzerland
|
21
|
+
# hwyss@ywesee.com, aschrafl@ywesee.com
|
22
|
+
#
|
23
|
+
# TestText -- Rpdf2txt -- 28.11.2002 -- aschrafl@ywesee.com
|
24
|
+
|
25
|
+
$: << File.dirname(__FILE__)
|
26
|
+
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
27
|
+
|
28
|
+
require 'test/unit'
|
29
|
+
require 'rpdf2txt/text'
|
30
|
+
require 'mock'
|
31
|
+
|
32
|
+
module Rpdf2txt
|
33
|
+
class Text
|
34
|
+
attr_accessor :src
|
35
|
+
end
|
36
|
+
class TestText < Test::Unit::TestCase
|
37
|
+
def setup
|
38
|
+
path = File.expand_path("./data/test_text.txt", File.dirname(__FILE__))
|
39
|
+
src = File.read(path)
|
40
|
+
#@handler = Rpdf2txt::HTMLHandler.new
|
41
|
+
@text=Rpdf2txt::Text.new(src)
|
42
|
+
end
|
43
|
+
def test_scan
|
44
|
+
result = @text.scan
|
45
|
+
assert_instance_of(Array, result)
|
46
|
+
assert_equal(28, result.size)
|
47
|
+
end
|
48
|
+
def test_scan_line1
|
49
|
+
@text.src = <<-EOS
|
50
|
+
BT
|
51
|
+
[(Packungen:)-4532.5(01)-305.3(005)-7697.4(1)-566.9(Stechampulle\\(n\\))-11154.6(A)]TJ
|
52
|
+
ET
|
53
|
+
EOS
|
54
|
+
expected = "Packungen: 01 005 1 Stechampulle(n) A"
|
55
|
+
assert_nothing_raised{
|
56
|
+
ast = Rpdf2txt.text_parser.parse(@text.src)
|
57
|
+
}
|
58
|
+
end
|
59
|
+
def test_scan_line2
|
60
|
+
pointer = Mock.new
|
61
|
+
@text.src = <<-EOS
|
62
|
+
BT
|
63
|
+
[(Druck:)-277.8(Rickli+Wyss AG, Eymattstrasse 5, Postfach 316, 3027 Ber)-17.8(n)]TJ
|
64
|
+
ET
|
65
|
+
EOS
|
66
|
+
expected = "Druck: Rickli+Wyss AG, Eymattstrasse 5, Postfach 316, 3027 Bern"
|
67
|
+
assert_nothing_raised{
|
68
|
+
ast = Rpdf2txt.text_parser.parse(@text.src)
|
69
|
+
}
|
70
|
+
end
|
71
|
+
def test_extract_Tc
|
72
|
+
#PDF doc: Tc always has 1 operand
|
73
|
+
@text.src = <<-EOS
|
74
|
+
BT
|
75
|
+
-0.0002 Tc
|
76
|
+
ET
|
77
|
+
EOS
|
78
|
+
ast = Rpdf2txt.text_parser.parse(@text.src)
|
79
|
+
assert_equal("-0.0002", ast.values.first.charspace.value)
|
80
|
+
text_state = Mock.new("text_state")
|
81
|
+
text_state.__next(:transformation_matrix=) {}
|
82
|
+
@text.text_state = text_state
|
83
|
+
text_state.__next(:set_char_spacing){|value|
|
84
|
+
assert_equal("-0.0002", value)
|
85
|
+
}
|
86
|
+
@text.scan
|
87
|
+
text_state.__verify
|
88
|
+
end
|
89
|
+
def test_extract_TD
|
90
|
+
#PDF doc: TD always has 2 operands
|
91
|
+
@text.src = <<-EOS
|
92
|
+
BT
|
93
|
+
-36.7896 -1.3662 TD
|
94
|
+
ET
|
95
|
+
EOS
|
96
|
+
text_state = Mock.new("text_state")
|
97
|
+
text_state.__next(:transformation_matrix=) {}
|
98
|
+
@text.text_state = text_state
|
99
|
+
text_state.__next(:update_x){ |x|
|
100
|
+
assert_equal(-36.7896, x)
|
101
|
+
}
|
102
|
+
text_state.__next(:set_lead) { |y|
|
103
|
+
assert_equal(-1.3662, y)
|
104
|
+
}
|
105
|
+
text_state.__next(:update_y) { |y|
|
106
|
+
assert_equal(-1.3662, y)
|
107
|
+
}
|
108
|
+
@text.scan
|
109
|
+
text_state.__verify
|
110
|
+
end
|
111
|
+
def test_extract_Td
|
112
|
+
#PDF doc: TD always has 2 operands
|
113
|
+
@text.src = <<-EOS
|
114
|
+
BT
|
115
|
+
-36.7896 -1.3662 Td
|
116
|
+
ET
|
117
|
+
EOS
|
118
|
+
text_state = Mock.new("text_state")
|
119
|
+
text_state.__next(:transformation_matrix=) {}
|
120
|
+
@text.text_state = text_state
|
121
|
+
text_state.__next(:update_x){}
|
122
|
+
text_state.__next(:update_y){}
|
123
|
+
@text.scan
|
124
|
+
text_state.__verify
|
125
|
+
end
|
126
|
+
def test_extract_Tf
|
127
|
+
current_page = Mock.new("current_page")
|
128
|
+
@text.current_page = current_page
|
129
|
+
@text.src = <<-EOS
|
130
|
+
BT
|
131
|
+
/F16 1 Tf
|
132
|
+
ET
|
133
|
+
EOS
|
134
|
+
text_state = Mock.new("text_state")
|
135
|
+
text_state.__next(:transformation_matrix=) {}
|
136
|
+
@text.text_state = text_state
|
137
|
+
current_page.__next(:font){ |font|
|
138
|
+
assert_equal(:f16, font)
|
139
|
+
}
|
140
|
+
text_state.__next(:set_font){ |font|}
|
141
|
+
text_state.__next(:set_font_size){ |font|}
|
142
|
+
@text.scan
|
143
|
+
text_state.__verify
|
144
|
+
end
|
145
|
+
def test_ff2
|
146
|
+
current_page = Mock.new("current_page")
|
147
|
+
@text.current_page = current_page
|
148
|
+
@text.src = <<-EOS
|
149
|
+
BT
|
150
|
+
/C2_0 1 Tf
|
151
|
+
ET
|
152
|
+
EOS
|
153
|
+
text_state = Mock.new("text_state")
|
154
|
+
text_state.__next(:transformation_matrix=) {}
|
155
|
+
@text.text_state = text_state
|
156
|
+
current_page.__next(:font){ |font|
|
157
|
+
assert_equal(:c2_0, font)
|
158
|
+
}
|
159
|
+
text_state.__next(:set_font){ |font|}
|
160
|
+
text_state.__next(:set_font_size){ |font|}
|
161
|
+
@text.scan
|
162
|
+
text_state.__verify
|
163
|
+
end
|
164
|
+
def test_extract_Tm
|
165
|
+
#according to the pdf doc the Tm operator always has 6 operands
|
166
|
+
@text.src = <<-EOS
|
167
|
+
BT
|
168
|
+
10 0 0 10 113.0394 441.3592 Tm
|
169
|
+
ET
|
170
|
+
EOS
|
171
|
+
text_state = Mock.new("text_state")
|
172
|
+
text_state.__next(:transformation_matrix=) {}
|
173
|
+
@text.text_state = text_state
|
174
|
+
text_state.__next(:set_xscale){|x|
|
175
|
+
assert_equal("10", x)
|
176
|
+
}
|
177
|
+
text_state.__next(:tmalpha=){|x|
|
178
|
+
assert_equal(0.0, x)
|
179
|
+
}
|
180
|
+
text_state.__next(:tmbeta=){|x|
|
181
|
+
assert_equal(0.0, x)
|
182
|
+
}
|
183
|
+
text_state.__next(:set_yscale){|y|
|
184
|
+
assert_equal("10", y)
|
185
|
+
}
|
186
|
+
text_state.__next(:set_x){|x|
|
187
|
+
assert_equal(113.0394, x)
|
188
|
+
}
|
189
|
+
text_state.__next(:set_y){ |y|
|
190
|
+
assert_equal("441.3592", y)
|
191
|
+
}
|
192
|
+
@text.scan
|
193
|
+
text_state.__verify
|
194
|
+
end
|
195
|
+
def test_extract_Tw
|
196
|
+
@text.src = <<-EOS
|
197
|
+
BT
|
198
|
+
0.0000 Tw
|
199
|
+
ET
|
200
|
+
EOS
|
201
|
+
text_state = Mock.new("text_state")
|
202
|
+
text_state.__next(:transformation_matrix=) {}
|
203
|
+
@text.text_state = text_state
|
204
|
+
text_state.__next(:set_word_spacing){ |wordspace|
|
205
|
+
assert_equal('0.0000', wordspace)
|
206
|
+
}
|
207
|
+
@text.scan
|
208
|
+
text_state.__verify
|
209
|
+
end
|
210
|
+
def test_extract_Tj
|
211
|
+
input = <<-EOS
|
212
|
+
BT
|
213
|
+
(Abgabekategorie: \\) )Tj
|
214
|
+
ET
|
215
|
+
EOS
|
216
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
217
|
+
assert_equal("(Abgabekategorie: \\) )", ast.values.first.snippet.value)
|
218
|
+
end
|
219
|
+
def test_extract_Tj_2
|
220
|
+
input = <<-EOS
|
221
|
+
BT
|
222
|
+
(50882)Tj\n
|
223
|
+
ET
|
224
|
+
EOS
|
225
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
226
|
+
assert_equal("(50882)", ast.values.first.snippet.value)
|
227
|
+
@text.scan
|
228
|
+
end
|
229
|
+
def test_extract_Tj_3
|
230
|
+
@text.src = <<-EOS
|
231
|
+
BT
|
232
|
+
/F2 1 Tf
|
233
|
+
6 0 0 6 502.3646 619.0707 Tm
|
234
|
+
0.000 0.000 0.000 1.000 k
|
235
|
+
/GS3 gs
|
236
|
+
0.2778 Tc
|
237
|
+
0.0000 Tw
|
238
|
+
[(01.)-358.6(Jahrgang)]TJ
|
239
|
+
0 -1.1667 TD
|
240
|
+
(01)Tj
|
241
|
+
3 0 0 3 512.371 614.1957 Tm
|
242
|
+
0.0000 Tc
|
243
|
+
(e)Tj
|
244
|
+
6 0 0 6 517.8562 612.0707 Tm
|
245
|
+
0.2779 Tc
|
246
|
+
(ann)Tj
|
247
|
+
5 0 0 5 502.3646 598.5707 Tm
|
248
|
+
0.1111 Tc
|
249
|
+
-0.0306 Tw
|
250
|
+
(ISSN 0026-9212)Tj
|
251
|
+
/F4 1 Tf
|
252
|
+
14 0 0 14 501.6627 625.3198 Tm
|
253
|
+
0.0000 Tw
|
254
|
+
(5/2002)Tj
|
255
|
+
ET
|
256
|
+
EOS
|
257
|
+
assert_nothing_raised{
|
258
|
+
@text.scan
|
259
|
+
}
|
260
|
+
end
|
261
|
+
def test_extract_Tj4
|
262
|
+
input = <<-EOS
|
263
|
+
BT
|
264
|
+
(Abgabekategorie: )Tj
|
265
|
+
ET
|
266
|
+
EOS
|
267
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
268
|
+
assert_equal("(Abgabekategorie: )", ast.values.first.snippet.value)
|
269
|
+
end
|
270
|
+
def test_extract_Tj_hex
|
271
|
+
input = <<-EOS
|
272
|
+
BT
|
273
|
+
<0074>Tj
|
274
|
+
ET
|
275
|
+
EOS
|
276
|
+
#input2 = '<00af>Tj'
|
277
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
278
|
+
assert_equal("0074", ast.values.first.hexsnippet.value)
|
279
|
+
#ast = Rpdf2txt.text_parser.parse(input2)
|
280
|
+
#assert_equal("00af", ast.values.first.hexsnippet.value)
|
281
|
+
@text.scan
|
282
|
+
end
|
283
|
+
def test_extract_Tj_binary
|
284
|
+
@text.src = <<-EOS
|
285
|
+
BT
|
286
|
+
(\001\002\003
|
287
|
+
\002\004
|
288
|
+
\001\003)Tj
|
289
|
+
ET
|
290
|
+
EOS
|
291
|
+
#input2 = '<00af>Tj'
|
292
|
+
#ast = Rpdf2txt.text_parser.parse(@text.src)
|
293
|
+
#puts ast.values.first.snippet.value
|
294
|
+
#assert_equal("0074", ast.values.first.hexsnippet.value)
|
295
|
+
#ast = Rpdf2txt.text_parser.parse(input2)
|
296
|
+
#assert_equal("00af", ast.values.first.hexsnippet.value)
|
297
|
+
@text.scan
|
298
|
+
end
|
299
|
+
def test_extract_TL
|
300
|
+
input = <<-EOS
|
301
|
+
BT
|
302
|
+
2.345 TL
|
303
|
+
ET
|
304
|
+
EOS
|
305
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
306
|
+
assert_equal('2.345', ast.values.first.lead.value)
|
307
|
+
end
|
308
|
+
def test_extract_TStar
|
309
|
+
input = <<-EOS
|
310
|
+
BT
|
311
|
+
T*
|
312
|
+
ET
|
313
|
+
EOS
|
314
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
315
|
+
assert_equal('T*', ast.values.first.linebreak.value)
|
316
|
+
end
|
317
|
+
def test_extract_Apostroph
|
318
|
+
input = <<-EOS
|
319
|
+
BT
|
320
|
+
(foobar)'
|
321
|
+
ET
|
322
|
+
EOS
|
323
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
324
|
+
assert_equal("(foobar)", ast.values.first.aposnippet.value)
|
325
|
+
end
|
326
|
+
def test_extract_quotes
|
327
|
+
input = <<-EOS
|
328
|
+
BT
|
329
|
+
1.2 3.4 (barbaz)"
|
330
|
+
ET
|
331
|
+
EOS
|
332
|
+
ast = Rpdf2txt::text_parser.parse(input)
|
333
|
+
assert_equal("1.2", ast.values.first.wordspace.value)
|
334
|
+
assert_equal("3.4", ast.values.first.charspace.value)
|
335
|
+
assert_equal("(barbaz)", ast.values.first.aposnippet.value)
|
336
|
+
end
|
337
|
+
def test_extract_TmTcTw
|
338
|
+
input = <<-EOS
|
339
|
+
BT
|
340
|
+
0.003 Tc -0.0008 Tw 7.5 0 0 7.5 320.1 764.1803 Tm
|
341
|
+
ET
|
342
|
+
EOS
|
343
|
+
assert_nothing_raised{
|
344
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
345
|
+
}
|
346
|
+
end
|
347
|
+
def test_extract_Tj2
|
348
|
+
input = <<-EOS
|
349
|
+
BT
|
350
|
+
(cht-)Tj
|
351
|
+
ET
|
352
|
+
EOS
|
353
|
+
ast = Rpdf2txt.text_parser.parse(input)
|
354
|
+
assert_equal("(cht-)", ast.values.first.snippet.value)
|
355
|
+
end
|
356
|
+
def test_extract_color_space
|
357
|
+
input = <<-EOS
|
358
|
+
BT
|
359
|
+
/F5 1 Tf
|
360
|
+
12.5 0 0 12.5 34.311 811.2271 Tm
|
361
|
+
0.13725 0.12157 0.12549 scn
|
362
|
+
-0.0001 Tc
|
363
|
+
0 Tw
|
364
|
+
(Inhalt)Tj
|
365
|
+
ET
|
366
|
+
EOS
|
367
|
+
assert_nothing_raised {
|
368
|
+
Rpdf2txt.text_parser.parse(input)
|
369
|
+
}
|
370
|
+
end
|
371
|
+
def test_real_life
|
372
|
+
@text.src = <<-EOS
|
373
|
+
BT
|
374
|
+
10 0 0 10 113.0394 441.3592 Tm
|
375
|
+
-0.0002 Tc
|
376
|
+
0.0000 Tw
|
377
|
+
[(Zul.-Nr)91.6(.: )]TJ
|
378
|
+
/F16 1 Tf
|
379
|
+
3.8771 0 TD
|
380
|
+
(33273)Tj
|
381
|
+
/F3 1 Tf
|
382
|
+
8.8787 0 TD
|
383
|
+
-0.0001 Tc
|
384
|
+
(Abgabekategorie: )Tj
|
385
|
+
/F16 1 Tf
|
386
|
+
8.6923 0 TD
|
387
|
+
0.0000 Tc
|
388
|
+
(B)Tj
|
389
|
+
/F3 1 Tf
|
390
|
+
4.0636 0 TD
|
391
|
+
-0.0001 Tc
|
392
|
+
-0.0306 Tw
|
393
|
+
[(Index: 02.08.3.)-9563.5(18.11.2002)]TJ
|
394
|
+
-25.5118 -2.2428 TD
|
395
|
+
0.0000 Tw
|
396
|
+
[(Zusammensetzung:)-921.1(06)]TJ
|
397
|
+
8.3 0 0 8.3 226.4252 418.9312 Tm
|
398
|
+
0.2005 Tw
|
399
|
+
[(POLIDOCANOLUM 600 5)-278.1(mg, ETHANOLUM, KALII et NA)73.7(TRII PHOSPHA)73.7(TES, A)]TJ
|
400
|
+
36.7896 0 TD
|
401
|
+
(QUA q.s. ad)Tj
|
402
|
+
-36.7896 -1.3662 TD
|
403
|
+
-0.0306 Tw
|
404
|
+
[(SOLUTIONEM pro 1)-278.1(mL. )]TJ
|
405
|
+
10 0 0 10 212.252 393.4185 Tm
|
406
|
+
-0.0002 Tc
|
407
|
+
0.0000 Tw
|
408
|
+
(07)Tj
|
409
|
+
8.3 0 0 8.3 226.4252 393.4185 Tm
|
410
|
+
-0.0001 Tc
|
411
|
+
0.1449 Tw
|
412
|
+
[(POLIDOCANOLUM 600 10)-278.1(mg, ETHANOLUM, KALII et NA)73.7(TRII PHOSPHA)73.7(TES, )]TJ
|
413
|
+
36.1789 0 TD
|
414
|
+
(AQUA q.s. ad)Tj
|
415
|
+
-36.1789 -1.3661 TD
|
416
|
+
-0.0306 Tw
|
417
|
+
[(SOLUTIONEM pro 1)-278.1(mL. )]TJ
|
418
|
+
10 0 0 10 212.252 367.9059 Tm
|
419
|
+
-0.0002 Tc
|
420
|
+
0.0000 Tw
|
421
|
+
(08)Tj
|
422
|
+
8.3 0 0 8.3 226.4252 367.9059 Tm
|
423
|
+
-0.0001 Tc
|
424
|
+
0.1449 Tw
|
425
|
+
[(POLIDOCANOLUM 600 20)-278.1(mg, ETHANOLUM, KALII et NA)73.7(TRII PHOSPHA)73.7(TES, )]TJ
|
426
|
+
36.1789 0 TD
|
427
|
+
(AQUA q.s. ad)Tj
|
428
|
+
-36.1789 -1.3662 TD
|
429
|
+
-0.0306 Tw
|
430
|
+
[(SOLUTIONEM pro 1)-278.1(mL. )]TJ
|
431
|
+
10 0 0 10 212.252 342.3933 Tm
|
432
|
+
-0.0002 Tc
|
433
|
+
0.0000 Tw
|
434
|
+
(09)Tj
|
435
|
+
8.3 0 0 8.3 226.4252 342.3934 Tm
|
436
|
+
-0.0001 Tc
|
437
|
+
0.1449 Tw
|
438
|
+
[(POLIDOCANOLUM 600 30)-278.1(mg, ETHANOLUM, KALII et NA)73.7(TRII PHOSPHA)73.7(TES, )]TJ
|
439
|
+
36.1789 0 TD
|
440
|
+
(AQUA q.s. ad)Tj
|
441
|
+
-36.1789 -1.3662 TD
|
442
|
+
-0.0306 Tw
|
443
|
+
[(SOLUTIONEM pro 1)-278.1(mL. )]TJ
|
444
|
+
10 0 0 10 212.252 316.8806 Tm
|
445
|
+
-0.0002 Tc
|
446
|
+
0.0000 Tw
|
447
|
+
(11)Tj
|
448
|
+
8.3 0 0 8.3 226.4252 316.8806 Tm
|
449
|
+
-0.0001 Tc
|
450
|
+
0.1172 Tw
|
451
|
+
[(POLIDOCANOLUM 600 2.5)-278.1(mg, ETHANOLUM, KALII et NA)73.7(TRII PHOSPHA)73.7(TES,)]TJ
|
452
|
+
35.8395 0 TD
|
453
|
+
0.1171 Tw
|
454
|
+
[( AQUA q.s. ad)]TJ
|
455
|
+
-35.8395 -1.3661 TD
|
456
|
+
-0.0306 Tw
|
457
|
+
[(SOLUTIONEM pro 1)-278.1(mL. )]TJ
|
458
|
+
10 0 0 10 113.0394 291.368 Tm
|
459
|
+
0.0000 Tw
|
460
|
+
[(Anwendung:)-5285.2(V)48.7(arizenver�dung)]TJ
|
461
|
+
0 -1.4174 TD
|
462
|
+
-0.0306 Tw
|
463
|
+
[(Packungen:)-4532.7(06)-305.6(010)-5591.4(1 x 30)-567(mL)-12217.5(B)]TJ
|
464
|
+
11.3386 -1.4174 TD
|
465
|
+
[(061)-6147.3(5 x 2)-567(m)0(L)-12217.5(B)]TJ
|
466
|
+
-1.4173 -1.4174 TD
|
467
|
+
[(07)-305.6(029)-5591.4(1 x 30)-567(mL)-12217.5(B)]TJ
|
468
|
+
1.4173 -1.4174 TD
|
469
|
+
[(088)-6147.3(5 x 2)-567(m)0(L)-12217.5(B)]TJ
|
470
|
+
-1.4173 -1.4174 TD
|
471
|
+
[(08)-305.6(096)-6147.3(5 x 2)-567(m)0(L)-12217.5(B)]TJ
|
472
|
+
T*
|
473
|
+
[(09)-305.6(118)-6147.3(5 x 2)-567(m)0(L)-12217.5(B)]TJ
|
474
|
+
T*
|
475
|
+
[(11)-305.6(134)-6147.3(5 x 2)-567(m)0(L)-12217.5(B)]TJ
|
476
|
+
-9.9213 -1.4174 TD
|
477
|
+
[(* G�ltig bis:)-5844.6(17. November 2007)]TJ
|
478
|
+
ET
|
479
|
+
EOS
|
480
|
+
assert_nothing_raised {
|
481
|
+
@text.scan
|
482
|
+
}
|
483
|
+
end
|
484
|
+
def test_oneliner
|
485
|
+
@text.src = <<-EOS
|
486
|
+
BT /F1 16 Tf 1 0 0 -1 0 14.347 Tm(Ponstan�) Tj 0 0 0 RG ET
|
487
|
+
EOS
|
488
|
+
assert_nothing_raised {
|
489
|
+
@text.scan
|
490
|
+
}
|
491
|
+
end
|
492
|
+
def test_array_space_tj
|
493
|
+
@text.src = <<-EOS
|
494
|
+
BT /F0 8 Tf 1 0 0 -1 232.336 7.573 Tm[(Interesting text just before an empty space)
|
495
|
+
-3( )] TJ ET
|
496
|
+
EOS
|
497
|
+
assert_nothing_raised {
|
498
|
+
@text.scan
|
499
|
+
}
|
500
|
+
end
|
501
|
+
def test_array_hexsnippet
|
502
|
+
@text.src = <<-EOS
|
503
|
+
BT /F2 8 Tf 1 0 0 -1 0 62.573 Tm(Pulver und L�sungsmittel zur Herstellung einer Injektionsl�sung)
|
504
|
+
Tj /F3 9 Tf 0 -14.547 Td(Fibrinolytikum) Tj /F2 8 Tf 0 -15.853 Td(Zusammensetzung)
|
505
|
+
Tj /F3 8 Tf 0 -9.6 Td(Metalyse 8'000 U) Tj 0 -9.6 Td(1 Injektionsflasche) Tj /F0
|
506
|
+
8 Tf 65.816 0 Td( enth�lt: 8'000 U \\(40 mg\\) Tenecteplasum \\(gefriergetrocknetes Pulver\\).)
|
507
|
+
Tj /F3 8 Tf -65.816 -9.6 Td(Hilfsstoffe:) Tj /F0 8 Tf 37.344 0 Td( Polysorbatum 20, L-Argininum, Acidum phosphoricum.)
|
508
|
+
Tj /F3 8 Tf -37.344 -9.6 Td(1 Fertigspritze) Tj /F0 8 Tf 50.684 0 Td( enth�lt: 8 ml Aqua ad iniectabilia \\(Ph. Eur.\\).)
|
509
|
+
Tj /F3 8 Tf -50.684 -13.6 Td(Metalyse 10'000 U) Tj 0 -9.6 Td(1 Injektionsflasche)
|
510
|
+
Tj /F0 8 Tf 65.816 0 Td( enth�lt: 10'000 U \\(50 mg\\) Tenecteplasum \\(gefriergetrocknetes Pulver\\).)
|
511
|
+
Tj /F3 8 Tf -65.816 -9.6 Td(Hilfsstoffe:) Tj /F0 8 Tf 37.344 0 Td( Polysorbatum 20, L-Argininum, Acidum phosphoricum.)
|
512
|
+
Tj /F3 8 Tf -37.344 -9.6 Td(1 Fertigspritze) Tj /F0 8 Tf 50.684 0 Td( enth�lt: 10 ml Aqua ad iniectabilia \\(Ph. Eur.\\).)
|
513
|
+
Tj -50.684 -9.6 Td(Die gebrauchsfertige L�sung enth�lt 1'000 U \\(5 mg\\) Tenecteplase pro ml.)
|
514
|
+
Tj 0 -9.6 Td(Die Wirkst�rke von Tenecteplase wird in Einheiten \\(U\\) angegeben, unter Bezugnahme auf einen Referenzstandard, der)
|
515
|
+
Tj 0 -9.6 Td(Tenecteplase-spezifisch ist und mit den f�r andere Fibrinolytika verwendeten Einheiten nicht vergleichbar ist.)
|
516
|
+
Tj /F2 8 Tf 0 -15.6 Td(Eigenschaften/Wirkungen) Tj /F0 8 Tf 0 -9.6 Td(Tenecteplase ist ein rekombinanter fibrinspezifischer Plasminogen-Aktivator \\(t-PA\\), der durch Modifizierung von nat�rlichem)
|
517
|
+
Tj 0 -9.6 Td(Plasminogen-Aktivator t-PA an drei Stellen des Molek�ls entsteht. Er bindet an das Fibrin eines Thrombus \\(Blutgerinnsel\\) und)
|
518
|
+
Tj 0 -9.6 Td(wandelt an den Thrombus gebundenes Plasminogen in Plasmin um, und f�hrt so zur Aufl�sung des Thrombus. Tenecteplase)
|
519
|
+
Tj 0 -9.6 Td(weist eine h�here Fibrinspezifit�t als nat�rliches t-PA auf und wird weniger durch den endogenen Inhibitor \\(PAI-1\\) inaktiviert.)Tj 0 -9.6 Td(Nach Gabe von Tenecteplase wurde ein dosisabh�ngiger Verbrauch von )
|
520
|
+
Tj /F4 8 Tf 260.128 0 Td[ -4<012e>] TJ /F0 8 Tf 4.656 0 Td(2-Antiplasmin \\(dem plasmatischen Inhibitor des)
|
521
|
+
Tj -264.784 -9.6 Td(Plasmins\\) mit entsprechender Zunahme einer systemischen Plasminbildung beobachtet. In Vergleichsstudien \\(Tenecteplase)
|
522
|
+
Tj 0 -9.6 Td(versus Alteplase\\) wurde bei Patienten, die mit der Maximaldosis von Tenecteplase \\(10'000 U, entsprechend 50 mg\\) behandelt)
|
523
|
+
Tj -0.134 Tw 0 -9.6 Td(wurden, ein Abfall des Fibrinogens um weniger als 15% und des Plasminogens um weniger als 25% beobachtet. Demgegen�ber)
|
524
|
+
Tj 0 Tw 0 -9.6 Td(kam es unter Alteplase zu einem Abfall der Fibrinogen- und Plasminogenspiegel um ca. 50%.)
|
525
|
+
Tj -0.449 Tw 0 -9.6 Td(Die Gef�ssdurchg�ngigkeitswerte angiographisch kontrollierter Phase I und II Studien zeigen, dass Tenecteplase als intraven�ser)
|
526
|
+
Tj 0 Tw 0 -9.6 Td(Einfach-Bolus dosisabh�ngig Thromben in der Infarktarterie von Patienten mit akutem Herzinfarkt aufl�st. In einer Dosis-)
|
527
|
+
Tj -0.156 Tw 0 -9.6 Td(Wirkungsstudie \\(TIMI 10B\\) konnte mit 30 mg Tenecteplase bei 54%, mit 40 mg bei 63% und mit 50 mg bei 66% der Patienten ein)
|
528
|
+
Tj 0 Tw 0 -9.6 Td(Fluss TIMI Grad 3 erzielt werden. Diese Unterschiede waren statistisch nicht signifikant.)
|
529
|
+
Tj 0 -9.6 Td(Eine grosse doppelblinde Vergleichsstudie \\(ASSENT-II\\) mit etwa 17'000 Patienten zeigte, dass Tenecteplase im Vergleich zu)
|
530
|
+
Tj -0.122 Tw 0 -9.6 Td(Alteplase hinsichtlich der Mortalit�tsrate therapeutisch �quivalent ist \\(6,2% in beiden Therapiegruppen nach 30 Tagen\\), wobei es)
|
531
|
+
Tj -0.048 Tw 0 -9.6 Td(unter Tenecteplase zu signifikant weniger nicht-zerebralen Blutungen kam \\(26,4% versus 28,9%, p= 0,0003\\). Dies bedingte eine)
|
532
|
+
Tj 0 Tw 0 -9.6 Td(signifikant geringere Bluttransfusionsrate \\(4,3% versus 5,5%, p= 0,0002\\). Die zerebrale Blutungsrate betrug 0,93% f�r)
|
533
|
+
Tj 0 -9.6 Td(Tenecteplase bzw. 0,94% f�r Alteplase.) Tj 0 -9.6 Td(Nach 30 Tagen wurde keine Antik�rperbildung gegen Tenecteplase beobachtet. Daten zur wiederholten Gabe liegen allerdings)
|
534
|
+
Tj 0 -9.6 Td(nicht vor.) Tj -0.425 Tw 0 -9.6 Td(Eine weitere randomisierte Vergleichsstudie \\(ASSENT-III\\) wurde an ca. 6'000 Patienten zur Ermittlung der Nutzen/Risiko-Relation)
|
535
|
+
Tj 0 Tw 0 -9.6 Td(von Metalyse bei gleichzeitiger Gabe von verschiedenen antithrombotischen Substanzen bei der Lysetherapie akuter)
|
536
|
+
Tj 0 -9.6 Td(Myokardinfarkte durchgef�hrt. Je ca. 2'000 Patienten wurden einer der folgenden Gruppen zugeteilt:)
|
537
|
+
Tj /F3 8 Tf -0.28 Tw 0 -9.6 Td(Gruppe A:) Tj /F0 8 Tf 36.184 0 Td( Metalyse in unten angegebener Dosierung als Einmalbolus i.v. und unfraktioniertes Heparin als Einmalbolus \\(60 IU/kg,)
|
538
|
+
Tj -0.243 Tw -36.184 -9.6 Td(max. 4'000 IU\\), danach als i.v. Infusion \\(12 IU/kg/Std., max. 1'000 IU/Std. �ber 3 Stunden, danach �ber bis zu 48 Stunden je nach)
|
539
|
+
Tj 0 Tw 0 -9.6 Td(aPTT [Ziel: 50-70 Sek.]\\).) Tj /F3 8 Tf -0.398 Tw 0 -9.6 Td(Gruppe B:)
|
540
|
+
Tj /F0 8 Tf 36.067 0 Td( Metalyse in unten angegebener Dosierung als Einmalbolus i.v. und Enoxaparin \\(ein initialer i.v.-Bolus von 30 mg, sofort)
|
541
|
+
Tj 0 Tw -36.067 -9.6 Td(danach beginnend alle 12 Stunden s.c. Injektion von 1 mg/kg, max. 100 mg f�r die ersten beiden s.c. Dosen\\). Die Enoxaparin-)
|
542
|
+
Tj 0 -9.6 Td(Therapie wurde bis zur Entlassung aus der station�ren Behandlung oder bis zur Revaskularisation oder maximal �ber 1 Woche)
|
543
|
+
Tj 0 -9.6 Td(durchgef�hrt.) Tj /F3 8 Tf -0.682 Tw 0 -9.6 Td(Gruppe C:) Tj /F0 8 Tf
|
544
|
+
36.225 0 Td( Metalyse in der halben unten angegebenen Dosierung \\(gewichtsadaptiert 3'000 U-5'000 U\\) und Abciximab \\(Einmaldosis)
|
545
|
+
Tj -0.231 Tw -36.225 -9.6 Td(0,25 mg/kg, danach i.v. Infusion von 0,125 �g/kg/Min., max. 10 �g/Min., �ber 12 Stunden\\) und zus�tzlich unfraktioniertes Heparin)
|
546
|
+
Tj -0.307 Tw 0 -9.6 Td(\\(40 IU/kg, max. 3'000 IU als Einmalbolus i.v., danach 7 IU/kg/Std., max. 800 IU/Std., als i.v. Infusion �ber 3 Stunden, danach nach)
|
547
|
+
Tj -0.54 Tw 0 -9.6 Td(aPTT �ber bis zu 48 Stunden\\). Die Patienten in allen 3 Gruppen erhielten zus�tzlich Acetylsalicyls�ure oral \\(150-325 mg bei Eintritt)
|
548
|
+
Tj 0 -9.6 Td(in die Studie, danach 75-325 mg �ber mind. 30 Tage\\). Falls eine orale Anwendung von Acetylsalicyls�ure nicht m�glich war, wurde)
|
549
|
+
Tj 0 Tw 0 -9.6 Td(die Substanz in einer Dosierung von 150-250 mg rektal oder i.v. verabreicht.)
|
550
|
+
Tj -0.564 Tw 0 -9.6 Td(Es zeigte sich, dass die Patienten der Gruppen B und C bez�glich der Wirksamkeits-Endpunkte \\(30-Tage-Mortalit�t einschliesslich)
|
551
|
+
Tj -0.741 Tw 0 -9.6 Td(der w�hrend der station�ren Behandlung auftretenden Reinfarkte oder persistierenden kardialen Isch�mien\\) signifikant \\(p= 0,0001\\))
|
552
|
+
Tj 0 Tw 0 -9.6 Td(im Vorteil waren. Die Rate der oben genannten Komplikationen lag bei Gruppe A bei 15,4%, w�hrend sie bei Gruppe B und C)
|
553
|
+
Tj 0 -9.6 Td(11,4% bzw. 11,1% betrug. Bei zus�tzlicher Betrachtung der Sicherheits-Endpunkte \\(intrakranielle Blutungen w�hrend des)
|
554
|
+
Tj -0.045 Tw 0 -9.6 Td(station�ren Aufenthalts, weitere Blutungen mit konsekutiver Kreislaufinsuffizienz oder transfusionspflichtige Blutungen\\) lagen die)
|
555
|
+
Tj -0.073 Tw 0 -9.6 Td(Komplikationsraten bei 17,0% in Gruppe A, bei 13,8% in Gruppe B und bei 14,2% in Gruppe C. Schwerwiegende sowie leichtere)
|
556
|
+
Tj 0 Tw 0 -9.6 Td(Blutungen und Thrombozytopenien wurden allerdings in Gruppe C signifikant h�ufiger als in den beiden anderen Gruppen)
|
557
|
+
Tj 0 -9.6 Td(festgestellt.) Tj /F2 8 Tf 0 -15.6 Td(Pharmakokinetik) Tj /F3 8 Tf 0
|
558
|
+
-9.6 Td(Metabolismus) Tj /F0 8 Tf 0 -9.6 Td(Tenecteplase wird durch Bindung an spezifische Leberrezeptoren und nachfolgende Spaltung in kleine Peptide aus dem)
|
559
|
+
Tj 0 -9.6 Td(Blutkreislauf eliminiert. Im Vergleich zu nat�rlichem t-PA ist die Bindung an die Leberrezeptoren weniger stark ausgepr�gt, was)
|
560
|
+
Tj 0 -9.6 Td(zu einer verl�ngerten Halbwertszeit f�hrt.) Tj ET
|
561
|
+
EOS
|
562
|
+
assert_nothing_raised {
|
563
|
+
@text.scan
|
564
|
+
}
|
565
|
+
end
|
566
|
+
def test__yab
|
567
|
+
@text.src = <<-EOS
|
568
|
+
BT
|
569
|
+
/F0 1 Tf
|
570
|
+
10 0 0 10 100.0144 143.3671 Tm
|
571
|
+
0 Tr
|
572
|
+
0 0 0 1 k
|
573
|
+
0 Tc
|
574
|
+
-0.031 Tw
|
575
|
+
[(Erscheint monatlich)-139(/)-167(Publication mensuelle)]TJ
|
576
|
+
0 -2.24 TD
|
577
|
+
[(Jahr)18(esabonnement)-303(\\()50(12 Nummer)-18(n\\))-1091(Fr)92(. 150.\\320)-3432(Einzelnummer)-1033(Fr)92(. 15.\\320)]TJ
|
578
|
+
0 -1.12 TD
|
579
|
+
0 Tw
|
580
|
+
(Abonnement)Tj
|
581
|
+
5.80374 0.00001 TD
|
582
|
+
(annuel)Tj
|
583
|
+
3.08134 0.00001 TD
|
584
|
+
(\\()Tj
|
585
|
+
0.2556 0.00001 TD
|
586
|
+
(12)Tj
|
587
|
+
1.3035 0.00001 TD
|
588
|
+
(num\\216r)Tj
|
589
|
+
2.75952 0.00001 TD
|
590
|
+
(os\\))Tj
|
591
|
+
2.38685 0.00001 TD
|
592
|
+
-0.031 Tw
|
593
|
+
[(Fr)91(. 150.\\320)-3431(Un num\\216r)18(o)-2301(Fr)91(. 15.\\320)]TJ
|
594
|
+
-15.5906 -2.24 TD
|
595
|
+
[(Redaktion und Administration: Stabsber)18(eich Kommunikation, Hallerstrasse 7, Postfach, CH-3000 Ber)-18(n 9, )]TJ
|
596
|
+
0 -1.12 TD
|
597
|
+
(T)Tj
|
598
|
+
0.3892 0 TD
|
599
|
+
(el. +41 (0)31 322 02 11, www)Tj
|
600
|
+
12.86619 0.00001 TD
|
601
|
+
0 Tw
|
602
|
+
(.swissmedic.ch)Tj
|
603
|
+
-13.2554 -2.24 TD
|
604
|
+
-0.031 Tw
|
605
|
+
[(Druck:)-278(Rickli+Wyss AG, Eymattstrasse 5, Postfach 316, 3027 Ber)-18(n)]TJ
|
606
|
+
ET
|
607
|
+
EOS
|
608
|
+
assert_nothing_raised {
|
609
|
+
@text.scan
|
610
|
+
}
|
611
|
+
end
|
612
|
+
def test__yab__side_effects
|
613
|
+
## bracket opens in Tj, closes in following TJ
|
614
|
+
@text.src = <<-EOS
|
615
|
+
BT
|
616
|
+
/F1 1 Tf
|
617
|
+
10.02 0 0 10.02 48.24 821.187 Tm
|
618
|
+
0 g
|
619
|
+
-0.0001 Tc
|
620
|
+
-0.0024 Tw
|
621
|
+
[(Regulator)5.7(y News / R\351gl)8.4(ementation )]TJ
|
622
|
+
/F2 1 Tf
|
623
|
+
7.02 0 0 7.02 87.9 24.987 Tm
|
624
|
+
0 Tc
|
625
|
+
0.004 Tw
|
626
|
+
[(Swissmedic)8.1( Journa)9(l 06)9(-2007)9( )]TJ
|
627
|
+
1 g
|
628
|
+
30.6752 0 TD
|
629
|
+
-0.0004 Tc
|
630
|
+
0 Tw
|
631
|
+
(434)Tj
|
632
|
+
0 g
|
633
|
+
1.6667 0 TD
|
634
|
+
0 Tc
|
635
|
+
( )Tj
|
636
|
+
/F1 1 Tf
|
637
|
+
10.02 0 0 10.02 96.42 774.147 Tm
|
638
|
+
24.8982 0 TD
|
639
|
+
-0.0009 Tc
|
640
|
+
0.1241 Tw
|
641
|
+
(\\(Texte, Abbildungen und allf\344llige graphische )Tj
|
642
|
+
-21.3772 -1.1976 TD
|
643
|
+
-0.0002 Tc
|
644
|
+
-0.0023 Tw
|
645
|
+
[(Gest)5.6(altung f)5.6(\374)0(r Faltsch)6(a)-1.1(ch)6(teln, Sachet)5.6(s usw.\\), \\(5-fac)6.7(h\\). )]TJ
|
646
|
+
ET
|
647
|
+
EOS
|
648
|
+
assert_nothing_raised {
|
649
|
+
@text.scan
|
650
|
+
}
|
651
|
+
end
|
652
|
+
def test__scn_with_names
|
653
|
+
@text.src = <<-EOS
|
654
|
+
BT
|
655
|
+
/F3 1 Tf
|
656
|
+
6 0 0 6 476.5289 590.9604 Tm
|
657
|
+
/RelativeColorimetric ri /Cs2 cs 1.0 scn
|
658
|
+
/GS3 gs [(;)-278]TJ
|
659
|
+
[<1A>-278]TJ
|
660
|
+
[(,)278]TJ
|
661
|
+
2.58198 0 Td
|
662
|
+
[(\n)-278]TJ
|
663
|
+
[<12>-278]TJ
|
664
|
+
1.38866 0 Td
|
665
|
+
[( )-278]TJ
|
666
|
+
[(.)-278]TJ
|
667
|
+
[<1F>-278]TJ
|
668
|
+
[<12>-278]TJ
|
669
|
+
[(&)-278]TJ
|
670
|
+
[<1F>556]TJ
|
671
|
+
-3.97064 -1.16667 TD
|
672
|
+
[(;)-278]TJ
|
673
|
+
[<1A>556]TJ
|
674
|
+
3 0 0 3 486.5352 586.0854 Tm
|
675
|
+
/GS3 gs <18>Tj
|
676
|
+
6 0 0 6 492.0204 583.9604 Tm
|
677
|
+
/GS3 gs [<12>-278]TJ
|
678
|
+
[(&)-278]TJ
|
679
|
+
[(&)-278]TJ
|
680
|
+
2.44569 0 Td
|
681
|
+
[<19>-278]TJ
|
682
|
+
[<18>500]TJ
|
683
|
+
5 0 0 5 476.5289 570.4604 Tm
|
684
|
+
/GS3 gs [(\t)-111]TJ
|
685
|
+
0.3331 0.0000076 TD
|
686
|
+
[<0E>-111]TJ
|
687
|
+
[<0E>-111]TJ
|
688
|
+
1.22237 0 Td
|
689
|
+
[<0B>-111]TJ
|
690
|
+
1.1366 0 Td
|
691
|
+
[(;)-111]TJ
|
692
|
+
0.66708 0 Td
|
693
|
+
[(;)-111]TJ
|
694
|
+
0.66708 0 Td
|
695
|
+
[(6)-111]TJ
|
696
|
+
0.66708 0 Td
|
697
|
+
[(1)-111]TJ
|
698
|
+
0.66708 0 Td
|
699
|
+
[(!)-111]TJ
|
700
|
+
[(')-111]TJ
|
701
|
+
1.11102 0 Td
|
702
|
+
[(6)-111]TJ
|
703
|
+
[(\))-111]TJ
|
704
|
+
1.33416 0 Td
|
705
|
+
[(6)556]TJ
|
706
|
+
/F1 1 Tf
|
707
|
+
14 0 0 14 473.3866 597.2096 Tm
|
708
|
+
/GS3 gs <02>Tj
|
709
|
+
0.62262 0 Td
|
710
|
+
[<03>-111]TJ
|
711
|
+
0.50009 0 Td
|
712
|
+
[<04>-111]TJ
|
713
|
+
[<05>-111]TJ
|
714
|
+
1.33417 0 Td
|
715
|
+
[<05>-111]TJ
|
716
|
+
[<01>556]TJ
|
717
|
+
ET
|
718
|
+
|
719
|
+
EOS
|
720
|
+
assert_nothing_raised {
|
721
|
+
@text.scan
|
722
|
+
}
|
723
|
+
end
|
724
|
+
def test__ambiguity_in_scm
|
725
|
+
@text.src = <<-EOS
|
726
|
+
BT
|
727
|
+
/F1 1 Tf
|
728
|
+
10.02 0 0 10.02 160.2 1147.6191 Tm
|
729
|
+
/RelativeColorimetric ri /Cs1 cs 1.0 scn
|
730
|
+
-0.0007 Tc
|
731
|
+
-0.0018 Tw
|
732
|
+
/GS3 gs (Inhalt / Table des mati?res )Tj
|
733
|
+
/TT2 1 Tf
|
734
|
+
7.02 0 0 7.02 199.86 351.4191 Tm
|
735
|
+
-0.0008 Tc
|
736
|
+
0.005 Tw
|
737
|
+
/GS3 gs [(Sw)12(issmedic Journa)8.3(l 06/2009)8.3( )]TJ
|
738
|
+
/RelativeColorimetric ri /Cs1 cs 0.0 scn
|
739
|
+
30.6752 0 TD
|
740
|
+
-0.0006 Tc
|
741
|
+
0 Tw
|
742
|
+
/GS2 gs (554 )Tj
|
743
|
+
/RelativeColorimetric ri /Cs1 cs 1.0 scn
|
744
|
+
37.1795 0 TD
|
745
|
+
0 Tc
|
746
|
+
/GS3 gs ( )Tj
|
747
|
+
/F2 1 Tf
|
748
|
+
11.52 0 0 11.52 208.38 1100.5791 Tm
|
749
|
+
-0.0013 Tc
|
750
|
+
16.7786 Tw
|
751
|
+
/GS3 gs [( Seite)]TJ
|
752
|
+
/F1 1 Tf
|
753
|
+
10.02 0 0 10.02 208.38 1076.399 Tm
|
754
|
+
-0.0005 Tc
|
755
|
+
-0.0021 Tw
|
756
|
+
/GS3 gs [(Im Brennpun)5.7(kt )-11407.2( )]TJ
|
757
|
+
ET
|
758
|
+
|
759
|
+
EOS
|
760
|
+
assert_nothing_raised {
|
761
|
+
begin
|
762
|
+
@text.scan
|
763
|
+
rescue Exception => e
|
764
|
+
e.alternatives.each do |alt| puts alt.inspect end
|
765
|
+
raise
|
766
|
+
end
|
767
|
+
}
|
768
|
+
end
|
769
|
+
def test__binary_TJ
|
770
|
+
@text.src = <<-EOS
|
771
|
+
BT
|
772
|
+
1 scn
|
773
|
+
/T1_4 1 Tf
|
774
|
+
8 0 0 8 33 892.8898 Tm
|
775
|
+
[(\021\001\004\r\003\007\023\005\003\003\b)-1200(\007\001\013\001\005\003\003\f\000\000\004\b\r\006\f\000\022\025\027\000\
|
776
|
+
\000\021\024\026\030\024\000\004)]TJ
|
777
|
+
ET
|
778
|
+
EOS
|
779
|
+
assert_nothing_raised {
|
780
|
+
begin
|
781
|
+
@text.scan
|
782
|
+
rescue Exception => e
|
783
|
+
e.alternatives.each do |alt| puts alt.inspect end
|
784
|
+
raise
|
785
|
+
end
|
786
|
+
}
|
787
|
+
end
|
788
|
+
end
|
789
|
+
end
|