rpdf2txt 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. data/History.txt +5 -0
  2. data/LICENCE +515 -0
  3. data/Manifest.txt +126 -0
  4. data/README.txt +30 -0
  5. data/Rakefile +24 -0
  6. data/bin/rpdf2txt +58 -0
  7. data/config.save +12 -0
  8. data/install.rb +1098 -0
  9. data/lib/rpdf2txt-rockit/base_extensions.rb +73 -0
  10. data/lib/rpdf2txt-rockit/bootstrap.rb +120 -0
  11. data/lib/rpdf2txt-rockit/bounded_lru_cache.rb +43 -0
  12. data/lib/rpdf2txt-rockit/conflict_resolution.rb +302 -0
  13. data/lib/rpdf2txt-rockit/directed_graph.rb +401 -0
  14. data/lib/rpdf2txt-rockit/glr_parser.rb +393 -0
  15. data/lib/rpdf2txt-rockit/grammar.rb +644 -0
  16. data/lib/rpdf2txt-rockit/graphdrawing.rb +107 -0
  17. data/lib/rpdf2txt-rockit/graphviz_dot.rb +63 -0
  18. data/lib/rpdf2txt-rockit/indexable.rb +53 -0
  19. data/lib/rpdf2txt-rockit/lalr_parsetable_generator.rb +144 -0
  20. data/lib/rpdf2txt-rockit/parse_table.rb +273 -0
  21. data/lib/rpdf2txt-rockit/parsetable_generation.rb +164 -0
  22. data/lib/rpdf2txt-rockit/parsing_ambiguities.rb +84 -0
  23. data/lib/rpdf2txt-rockit/profiler.rb +168 -0
  24. data/lib/rpdf2txt-rockit/reduce_actions_generator.rb +523 -0
  25. data/lib/rpdf2txt-rockit/rockit.rb +76 -0
  26. data/lib/rpdf2txt-rockit/rockit_grammar_ast_eval.rb +187 -0
  27. data/lib/rpdf2txt-rockit/rockit_grammars_parser.rb +126 -0
  28. data/lib/rpdf2txt-rockit/sourcecode_dumpable.rb +181 -0
  29. data/lib/rpdf2txt-rockit/stringscanner.rb +54 -0
  30. data/lib/rpdf2txt-rockit/syntax_tree.rb +452 -0
  31. data/lib/rpdf2txt-rockit/token.rb +364 -0
  32. data/lib/rpdf2txt-rockit/version.rb +3 -0
  33. data/lib/rpdf2txt/attributesparser.rb +42 -0
  34. data/lib/rpdf2txt/cmapparser.rb +65 -0
  35. data/lib/rpdf2txt/data/_cmap.grammar +11 -0
  36. data/lib/rpdf2txt/data/_cmap_range.grammar +15 -0
  37. data/lib/rpdf2txt/data/_pdfattributes.grammar +32 -0
  38. data/lib/rpdf2txt/data/cmap.grammar +11 -0
  39. data/lib/rpdf2txt/data/cmap.rb +37 -0
  40. data/lib/rpdf2txt/data/cmap_range.grammar +15 -0
  41. data/lib/rpdf2txt/data/cmap_range.rb +43 -0
  42. data/lib/rpdf2txt/data/fonts/Courier-Bold.afm +342 -0
  43. data/lib/rpdf2txt/data/fonts/Courier-BoldOblique.afm +342 -0
  44. data/lib/rpdf2txt/data/fonts/Courier-Oblique.afm +342 -0
  45. data/lib/rpdf2txt/data/fonts/Courier.afm +342 -0
  46. data/lib/rpdf2txt/data/fonts/Helvetica-Bold.afm +2827 -0
  47. data/lib/rpdf2txt/data/fonts/Helvetica-BoldOblique.afm +2827 -0
  48. data/lib/rpdf2txt/data/fonts/Helvetica-Oblique.afm +3051 -0
  49. data/lib/rpdf2txt/data/fonts/Helvetica.afm +3051 -0
  50. data/lib/rpdf2txt/data/fonts/License-Adobe.txt +65 -0
  51. data/lib/rpdf2txt/data/fonts/Symbol.afm +213 -0
  52. data/lib/rpdf2txt/data/fonts/Times-Bold.afm +2588 -0
  53. data/lib/rpdf2txt/data/fonts/Times-BoldItalic.afm +2384 -0
  54. data/lib/rpdf2txt/data/fonts/Times-Italic.afm +2667 -0
  55. data/lib/rpdf2txt/data/fonts/Times-Roman.afm +2419 -0
  56. data/lib/rpdf2txt/data/fonts/ZapfDingbats.afm +225 -0
  57. data/lib/rpdf2txt/data/pdfattributes.grammar +32 -0
  58. data/lib/rpdf2txt/data/pdfattributes.rb +71 -0
  59. data/lib/rpdf2txt/data/pdftext.grammar +102 -0
  60. data/lib/rpdf2txt/data/pdftext.rb +146 -0
  61. data/lib/rpdf2txt/default_handler.rb +352 -0
  62. data/lib/rpdf2txt/lzw.rb +69 -0
  63. data/lib/rpdf2txt/object.rb +1114 -0
  64. data/lib/rpdf2txt/parser.rb +169 -0
  65. data/lib/rpdf2txt/symbol.rb +408 -0
  66. data/lib/rpdf2txt/text.rb +182 -0
  67. data/lib/rpdf2txt/text_state.rb +434 -0
  68. data/lib/rpdf2txt/textparser.rb +42 -0
  69. data/test/data/3392_obj +0 -0
  70. data/test/data/397_decrypted +15 -0
  71. data/test/data/450_decrypted +153 -0
  72. data/test/data/450_obj +0 -0
  73. data/test/data/452_decrypted +125 -0
  74. data/test/data/454_decrypted +108 -0
  75. data/test/data/456_decrypted +106 -0
  76. data/test/data/458_decrypted +111 -0
  77. data/test/data/458_obj +0 -0
  78. data/test/data/460_decrypted +118 -0
  79. data/test/data/460_obj +0 -0
  80. data/test/data/463_decrypted +117 -0
  81. data/test/data/465_decrypted +107 -0
  82. data/test/data/465_obj +0 -0
  83. data/test/data/90_obj +0 -0
  84. data/test/data/90_obj_comp +1 -0
  85. data/test/data/decrypted +0 -0
  86. data/test/data/encrypt_obj +0 -0
  87. data/test/data/encrypt_string +0 -0
  88. data/test/data/encrypt_string_128bit +0 -0
  89. data/test/data/encrypted_object_stream.pdf +0 -0
  90. data/test/data/firststream +1 -0
  91. data/test/data/index.pdfobj +0 -0
  92. data/test/data/index_2bit.pdfobj +0 -0
  93. data/test/data/index_masked.pdfobj +0 -0
  94. data/test/data/indexed.pdfobj +0 -0
  95. data/test/data/indexed_2bit.pdfobj +0 -0
  96. data/test/data/indexed_masked.pdfobj +0 -0
  97. data/test/data/inline.png +0 -0
  98. data/test/data/logo.png +0 -0
  99. data/test/data/lzw.pdfobj +0 -0
  100. data/test/data/lzw_index.pdfobj +0 -0
  101. data/test/data/page_tree.pdf +148 -0
  102. data/test/data/pdf_20.png +0 -0
  103. data/test/data/pdf_21.png +0 -0
  104. data/test/data/pdf_22.png +0 -0
  105. data/test/data/pdf_50.png +0 -0
  106. data/test/data/png.pdfobj +0 -0
  107. data/test/data/space_bug_stream.txt +119 -0
  108. data/test/data/stream.txt +292 -0
  109. data/test/data/stream_kerning_bug.txt +13 -0
  110. data/test/data/stream_kerning_bug2.txt +6 -0
  111. data/test/data/test.pdf +0 -0
  112. data/test/data/test.txt +8 -0
  113. data/test/data/test_text.txt +42 -0
  114. data/test/data/working_obj +0 -0
  115. data/test/data/working_obj2 +0 -0
  116. data/test/mock.rb +149 -0
  117. data/test/suite.rb +30 -0
  118. data/test/test_pdf_object.rb +1802 -0
  119. data/test/test_pdf_parser.rb +1340 -0
  120. data/test/test_pdf_text.rb +789 -0
  121. data/test/test_space_bug_05_2004.rb +87 -0
  122. data/test/test_stream.rb +194 -0
  123. data/test/test_text_state.rb +315 -0
  124. data/usage-en.txt +112 -0
  125. data/user-stories/UserStories_Rpdf2Txt.txt +34 -0
  126. data/user-stories/documents/swissmedicjournal/04_2004.pdf +0 -0
  127. 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