rpdf2txt 0.8.2

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 (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