dvi 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/dvi_spec.rb ADDED
@@ -0,0 +1,17 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+
3
+ describe Dvi do
4
+ it "can parse a dvi file(misc/latex/latex.dvi)" do
5
+ path = File.join(File.dirname(__FILE__), "..", "misc", "latex", "latex.dvi")
6
+ Proc.new{ Dvi.parse(File.open(path)) }.should_not raise_error(StandardError)
7
+ end
8
+
9
+ it "can process a dvi file(misc/latex/latex.dvi)" do
10
+ path = File.join(File.dirname(__FILE__), "..", "misc", "latex", "latex.dvi")
11
+ Proc.new{
12
+ Dvi.process(File.open(path)).chars.each do |char|
13
+ p [char.h, char.v, char.index]
14
+ end
15
+ }.should_not raise_error(StandardError)
16
+ end
17
+ end
data/spec/lsr_spec.rb ADDED
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+
3
+ describe Dvi::LsR do
4
+ it "can find cmr10.tfm." do
5
+ File.basename(Dvi::LsR.default.find("cmr10.tfm")).should == "cmr10.tfm"
6
+ end
7
+
8
+ it "cmr10.tfm should exist." do
9
+ File.exist?(Dvi::LsR.default.find("cmb10.tfm")).should be_true
10
+ end
11
+ end
@@ -0,0 +1,881 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+
3
+ describe Dvi::Opcode::SetChar do
4
+ before do
5
+ @ps = Dvi::Processor.new
6
+ tfm = Dvi::Tfm.read(Dvi::LsR.default.find("cmr10.tfm"))
7
+ @ps.font = Dvi::Font.new(nil, 10, 10, nil, "cmr10", tfm)
8
+ end
9
+
10
+ it "opcode byte should be in range of 0..127" do
11
+ 0.upto(255) do |i|
12
+ if (0..127).include?(i)
13
+ Dvi::Opcode::SetChar.range.should include(i)
14
+ else
15
+ Dvi::Opcode::SetChar.range.should_not include(i)
16
+ end
17
+ end
18
+ end
19
+
20
+ it "move right with character width" do
21
+ 0.upto(127) do |i|
22
+ setchar = Dvi::Opcode::SetChar.new(i)
23
+ h = @ps.h
24
+ setchar.interpret(@ps)
25
+ @ps.h.should eql(h + @ps.font.design_size * @ps.chars[-1].metric.width)
26
+ end
27
+ end
28
+
29
+ it "push a character" do
30
+ 0.upto(127) do |i|
31
+ setchar = Dvi::Opcode::SetChar.new(i)
32
+ c = @ps.chars.size
33
+ setchar.interpret(@ps)
34
+ @ps.chars.size.should == c + 1
35
+ @ps.chars[-1].index.should == i
36
+ end
37
+ end
38
+
39
+ after do
40
+ @ps = nil
41
+ end
42
+ end
43
+
44
+ describe Dvi::Opcode::Set do
45
+ before do
46
+ @ps = Dvi::Processor.new
47
+ tfm = Dvi::Tfm.read(Dvi::LsR.default.find("cmr10.tfm"))
48
+ @ps.font = Dvi::Font.new(nil, 10, 10, nil, "cmr10", tfm)
49
+ end
50
+
51
+ it "opcode byte should be 128..131" do
52
+ 0.upto(255) do |i|
53
+ if (128..131).include?(i)
54
+ Dvi::Opcode::Set.range.should include(i)
55
+ else
56
+ Dvi::Opcode::Set.range.should_not include(i)
57
+ end
58
+ end
59
+ end
60
+
61
+ it "index of set1 should be between 0..255" do
62
+ -1.upto(256) do |i|
63
+ if (0..255).include?(i)
64
+ Proc.new do
65
+ Dvi::Opcode::Set.new(i, 1)
66
+ end.should_not raise_error(ArgumentError)
67
+ else
68
+ Proc.new do
69
+ Dvi::Opcode::Set.new(i, 1)
70
+ end.should raise_error(ArgumentError)
71
+ end
72
+ end
73
+ end
74
+
75
+ it "index of set2 should be between 0..65535" do
76
+ [-1, 0, 65535, 65536].each do |i|
77
+ if (0..65535).include?(i)
78
+ Proc.new do
79
+ Dvi::Opcode::Set.new(i, 2)
80
+ end.should_not raise_error(ArgumentError)
81
+ else
82
+ Proc.new do
83
+ Dvi::Opcode::Set.new(i, 2)
84
+ end.should raise_error(ArgumentError)
85
+ end
86
+ end
87
+ end
88
+
89
+ it "index of set3 should be between 0..16777215" do
90
+ [-1, 0, 16777215, 16777216].each do |i|
91
+ if (0..16777215).include?(i)
92
+ Proc.new do
93
+ Dvi::Opcode::Set.new(i, 3)
94
+ end.should_not raise_error(ArgumentError)
95
+ else
96
+ Proc.new do
97
+ Dvi::Opcode::Set.new(i, 3)
98
+ end.should raise_error(ArgumentError)
99
+ end
100
+ end
101
+ end
102
+
103
+ it "index of set4 should be between -2147483648..2147483647" do
104
+ [-2147483648, -2147483647, 2147483647, 2147483648].each do |i|
105
+ if (-2147483648..2147483647).include?(i)
106
+ Proc.new do
107
+ Dvi::Opcode::Set.new(i, 4)
108
+ end.should_not raise_error(ArgumentError)
109
+ else
110
+ Proc.new do
111
+ Dvi::Opcode::Set.new(i, 4)
112
+ end.should raise_error(ArgumentError)
113
+ end
114
+ end
115
+ end
116
+
117
+ it "shold push a character with set1..set4" do
118
+ 1.upto(4) do |n|
119
+ setchar = Dvi::Opcode::Set.new(1, n)
120
+ c = @ps.chars.size
121
+ setchar.interpret(@ps)
122
+ @ps.chars.size.should == c + 1
123
+ @ps.chars[-1].index.should == 1
124
+ end
125
+ end
126
+
127
+ it "should move right with character width" do
128
+ 1.upto(4) do |n|
129
+ 0.upto(127) do |i|
130
+ setchar = Dvi::Opcode::Set.new(i, n)
131
+ h = @ps.h
132
+ setchar.interpret(@ps)
133
+ @ps.h.should eql(h + @ps.font.design_size * @ps.chars[-1].metric.width)
134
+ end
135
+ end
136
+ end
137
+
138
+ after do
139
+ @ps = nil
140
+ end
141
+ end
142
+
143
+ describe Dvi::Opcode::Put do
144
+ before do
145
+ @ps = Dvi::Processor.new
146
+ tfm = Dvi::Tfm.read(Dvi::LsR.default.find("cmr10.tfm"))
147
+ @ps.font = Dvi::Font.new(nil, 10, 10, nil, "cmr10", tfm)
148
+ end
149
+
150
+ it "opcode byte should be 133..136" do
151
+ 0.upto(255) do |i|
152
+ if (133..136).include?(i)
153
+ Dvi::Opcode::Put.range.should include(i)
154
+ else
155
+ Dvi::Opcode::Put.range.should_not include(i)
156
+ end
157
+ end
158
+ end
159
+
160
+ it "index of put1 should be between 0..255" do
161
+ -1.upto(256) do |i|
162
+ if (0..255).include?(i)
163
+ Proc.new do
164
+ Dvi::Opcode::Put.new(i, 1)
165
+ end.should_not raise_error(ArgumentError)
166
+ else
167
+ Proc.new do
168
+ Dvi::Opcode::Put.new(i, 1)
169
+ end.should raise_error(ArgumentError)
170
+ end
171
+ end
172
+ end
173
+
174
+ it "index of put2 should be between 0..65535" do
175
+ [-1, 0, 65535, 65536].each do |i|
176
+ if (0..65535).include?(i)
177
+ Proc.new do
178
+ Dvi::Opcode::Put.new(i, 2)
179
+ end.should_not raise_error(ArgumentError)
180
+ else
181
+ Proc.new do
182
+ Dvi::Opcode::Put.new(i, 2)
183
+ end.should raise_error(ArgumentError)
184
+ end
185
+ end
186
+ end
187
+
188
+ it "index of put3 should be between 0..16777215" do
189
+ [-1, 0, 16777215, 16777216].each do |i|
190
+ if (0..16777215).include?(i)
191
+ Proc.new do
192
+ Dvi::Opcode::Put.new(i, 3)
193
+ end.should_not raise_error(ArgumentError)
194
+ else
195
+ Proc.new do
196
+ Dvi::Opcode::Put.new(i, 3)
197
+ end.should raise_error(ArgumentError)
198
+ end
199
+ end
200
+ end
201
+
202
+ it "index of put4 should be between -2147483648..2147483647" do
203
+ [-2147483648, -2147483647, 2147483647, 2147483648].each do |i|
204
+ if (-2147483648..2147483647).include?(i)
205
+ Proc.new do
206
+ Dvi::Opcode::Put.new(i, 4)
207
+ end.should_not raise_error(ArgumentError)
208
+ else
209
+ Proc.new do
210
+ Dvi::Opcode::Put.new(i, 4)
211
+ end.should raise_error(ArgumentError)
212
+ end
213
+ end
214
+ end
215
+
216
+ it "should push a character with put1..put4" do
217
+ 1.upto(4) do |n|
218
+ setchar = Dvi::Opcode::Put.new(1, n)
219
+ c = @ps.chars.size
220
+ setchar.interpret(@ps)
221
+ @ps.chars.size.should == c + 1
222
+ @ps.chars[-1].index.should == 1
223
+ end
224
+ end
225
+
226
+ it "shouldn't move right with character width" do
227
+ 1.upto(4) do |n|
228
+ 0.upto(127) do |i|
229
+ setchar = Dvi::Opcode::Put.new(i, n)
230
+ h = @ps.h
231
+ setchar.interpret(@ps)
232
+ @ps.h.should eql(h)
233
+ end
234
+ end
235
+ end
236
+
237
+ after do
238
+ @ps = nil
239
+ end
240
+ end
241
+
242
+ describe Dvi::Opcode::SetRule do
243
+ before do
244
+ @ps = Dvi::Processor.new
245
+ end
246
+
247
+ it "opcode byte should be 132" do
248
+ 0.upto(255) do |i|
249
+ if i == 132
250
+ Dvi::Opcode::SetRule.range.should include(i)
251
+ else
252
+ Dvi::Opcode::SetRule.range.should_not include(i)
253
+ end
254
+ end
255
+ end
256
+
257
+ it "should push a rule to the processor" do
258
+ setrule = Dvi::Opcode::SetRule.new(1, 2)
259
+ c = @ps.rules.size
260
+ setrule.interpret(@ps)
261
+ @ps.rules.size.should eql(c + 1)
262
+ end
263
+
264
+ it "should move right with rule width" do
265
+ setrule = Dvi::Opcode::SetRule.new(1, 2)
266
+ h = @ps.h
267
+ setrule.interpret(@ps)
268
+ @ps.h.should eql(h + 2)
269
+ end
270
+
271
+ after do
272
+ @ps = nil
273
+ end
274
+ end
275
+
276
+ describe Dvi::Opcode::PutRule do
277
+ before do
278
+ @ps = Dvi::Processor.new
279
+ end
280
+
281
+ it "opcode byte should be 137" do
282
+ 0.upto(255) do |i|
283
+ if i == 137
284
+ Dvi::Opcode::PutRule.range.should include(i)
285
+ else
286
+ Dvi::Opcode::PutRule.range.should_not include(i)
287
+ end
288
+ end
289
+ end
290
+
291
+ it "should push a rule to the processor" do
292
+ setrule = Dvi::Opcode::PutRule.new(1, 2)
293
+ c = @ps.rules.size
294
+ setrule.interpret(@ps)
295
+ @ps.rules.size.should eql(c + 1)
296
+ end
297
+
298
+ it "shouldn't move right" do
299
+ setrule = Dvi::Opcode::PutRule.new(1, 2)
300
+ h = @ps.h
301
+ setrule.interpret(@ps)
302
+ @ps.h.should eql(h)
303
+ end
304
+
305
+ after do
306
+ @ps = nil
307
+ end
308
+ end
309
+
310
+ describe Dvi::Opcode::Nop do
311
+ before do
312
+ @ps = Dvi::Processor.new
313
+ end
314
+
315
+ it "opcode byte should be 138" do
316
+ 0.upto(255) do |i|
317
+ if i == 138
318
+ Dvi::Opcode::Nop.range.should include(i)
319
+ else
320
+ Dvi::Opcode::Nop.range.should_not include(i)
321
+ end
322
+ end
323
+ end
324
+
325
+ it "should do nothing" do
326
+ nop = Dvi::Opcode::Nop.new
327
+ Proc.new{ @ps.process(nop) }.should_not raise_error(StandardError)
328
+ end
329
+
330
+ after do
331
+ @ps = nil
332
+ end
333
+ end
334
+
335
+ describe Dvi::Opcode::Bop do
336
+ before do
337
+ @ps = Dvi::Processor.new
338
+ end
339
+
340
+ it "opcode byte should be 139" do
341
+ 0.upto(255) do |i|
342
+ if i == 139
343
+ Dvi::Opcode::Bop.range.should include(i)
344
+ else
345
+ Dvi::Opcode::Bop.range.should_not include(i)
346
+ end
347
+ end
348
+ end
349
+
350
+ it "should begin a new page" do
351
+ @ps.h = 100
352
+ @ps.v = 100
353
+ @ps.w = 100
354
+ @ps.x = 100
355
+ @ps.y = 100
356
+ @ps.z = 100
357
+ @ps.process(Dvi::Opcode::Bop.new([0,0,0,0,0,0,0,0,0,0], -1))
358
+ @ps.h.should == 0
359
+ @ps.v.should == 0
360
+ @ps.w.should == 0
361
+ @ps.x.should == 0
362
+ @ps.y.should == 0
363
+ @ps.z.should == 0
364
+ end
365
+
366
+ after do
367
+ @ps = nil
368
+ end
369
+ end
370
+
371
+ describe Dvi::Opcode::Eop do
372
+ before do
373
+ @ps = Dvi::Processor.new
374
+ end
375
+
376
+ it "opcode byte should be 140" do
377
+ 0.upto(255) do |i|
378
+ if i == 140
379
+ Dvi::Opcode::Eop.range.should include(i)
380
+ else
381
+ Dvi::Opcode::Eop.range.should_not include(i)
382
+ end
383
+ end
384
+ end
385
+
386
+ it "should set the stack empty" do
387
+ @ps.stack << [1,2,3,4,5,6]
388
+ n = @ps.stack.size
389
+ @ps.process(Dvi::Opcode::Eop.new)
390
+ @ps.stack.size.should == 0
391
+ end
392
+
393
+ after do
394
+ @ps = nil
395
+ end
396
+ end
397
+
398
+ describe Dvi::Opcode::Push do
399
+ before do
400
+ @ps = Dvi::Processor.new
401
+ end
402
+
403
+ it "opcode byte should be 141" do
404
+ 0.upto(255) do |i|
405
+ if i == 141
406
+ Dvi::Opcode::Push.range.should include(i)
407
+ else
408
+ Dvi::Opcode::Push.range.should_not include(i)
409
+ end
410
+ end
411
+ end
412
+
413
+ it "should push the stack" do
414
+ n = @ps.stack.size
415
+ @ps.process(Dvi::Opcode::Push.new)
416
+ @ps.stack.size.should == n + 1
417
+ end
418
+
419
+ after do
420
+ @ps = nil
421
+ end
422
+ end
423
+
424
+ describe Dvi::Opcode::Pop do
425
+ before do
426
+ @ps = Dvi::Processor.new
427
+ end
428
+
429
+ it "opcode byte should be 141" do
430
+ 0.upto(255) do |i|
431
+ if i == 142
432
+ Dvi::Opcode::Pop.range.should include(i)
433
+ else
434
+ Dvi::Opcode::Pop.range.should_not include(i)
435
+ end
436
+ end
437
+ end
438
+
439
+ it "should pop the stack" do
440
+ @ps.stack << [1,2,3,4,5,6]
441
+ n = @ps.stack.size
442
+ @ps.process(Dvi::Opcode::Pop.new)
443
+ @ps.stack.size.should == n - 1
444
+ @ps.h.should == 1
445
+ @ps.v.should == 2
446
+ @ps.w.should == 3
447
+ @ps.x.should == 4
448
+ @ps.y.should == 5
449
+ @ps.z.should == 6
450
+ end
451
+
452
+ after do
453
+ @ps = nil
454
+ end
455
+ end
456
+
457
+ describe Dvi::Opcode::Right do
458
+ before do
459
+ @ps = Dvi::Processor.new
460
+ end
461
+
462
+ it "opcode byte should be 143..146" do
463
+ 0.upto(255) do |i|
464
+ if (143..146).include?(i)
465
+ Dvi::Opcode::Right.range.should include(i)
466
+ else
467
+ Dvi::Opcode::Right.range.should_not include(i)
468
+ end
469
+ end
470
+ end
471
+
472
+ it "should move right" do
473
+ h = @ps.h
474
+ @ps.process(Dvi::Opcode::Right.new(100))
475
+ @ps.h.should == h + 100
476
+ end
477
+
478
+ after do
479
+ @ps = nil
480
+ end
481
+ end
482
+
483
+ describe Dvi::Opcode::W0 do
484
+ before do
485
+ @ps = Dvi::Processor.new
486
+ end
487
+
488
+ it "opcode byte should be 147" do
489
+ 0.upto(255) do |i|
490
+ if i == 147
491
+ Dvi::Opcode::W0.range.should include(i)
492
+ else
493
+ Dvi::Opcode::W0.range.should_not include(i)
494
+ end
495
+ end
496
+ end
497
+
498
+ it "should move right" do
499
+ h = @ps.h
500
+ @ps.w = 100
501
+ @ps.process(Dvi::Opcode::W0.new)
502
+ @ps.h.should == h + 100
503
+ end
504
+
505
+ after do
506
+ @ps = nil
507
+ end
508
+ end
509
+
510
+ describe Dvi::Opcode::W do
511
+ before do
512
+ @ps = Dvi::Processor.new
513
+ end
514
+
515
+ it "opcode byte should be 148..151" do
516
+ 0.upto(255) do |i|
517
+ if (148..151).include?(i)
518
+ Dvi::Opcode::W.range.should include(i)
519
+ else
520
+ Dvi::Opcode::W.range.should_not include(i)
521
+ end
522
+ end
523
+ end
524
+
525
+ it "should change w and move right" do
526
+ h = @ps.h
527
+ @ps.w = 0
528
+ @ps.process(Dvi::Opcode::W.new(100))
529
+ @ps.w.should == 100
530
+ @ps.h.should == h + 100
531
+ end
532
+
533
+ after do
534
+ @ps = nil
535
+ end
536
+ end
537
+
538
+ describe Dvi::Opcode::X0 do
539
+ before do
540
+ @ps = Dvi::Processor.new
541
+ end
542
+
543
+ it "opcode byte should be 147" do
544
+ 0.upto(255) do |i|
545
+ if i == 152
546
+ Dvi::Opcode::X0.range.should include(i)
547
+ else
548
+ Dvi::Opcode::X0.range.should_not include(i)
549
+ end
550
+ end
551
+ end
552
+
553
+ it "should move right" do
554
+ h = @ps.h
555
+ @ps.x = 100
556
+ @ps.process(Dvi::Opcode::X0.new)
557
+ @ps.h.should == h + 100
558
+ end
559
+
560
+ after do
561
+ @ps = nil
562
+ end
563
+ end
564
+
565
+ describe Dvi::Opcode::X do
566
+ before do
567
+ @ps = Dvi::Processor.new
568
+ end
569
+
570
+ it "opcode byte should be 153..156" do
571
+ 0.upto(255) do |i|
572
+ if (153..156).include?(i)
573
+ Dvi::Opcode::X.range.should include(i)
574
+ else
575
+ Dvi::Opcode::X.range.should_not include(i)
576
+ end
577
+ end
578
+ end
579
+
580
+ it "should change x and move right" do
581
+ h = @ps.h
582
+ @ps.x = 0
583
+ @ps.process(Dvi::Opcode::X.new(100))
584
+ @ps.x.should == 100
585
+ @ps.h.should == h + 100
586
+ end
587
+
588
+ after do
589
+ @ps = nil
590
+ end
591
+ end
592
+
593
+ describe Dvi::Opcode::Down do
594
+ before do
595
+ @ps = Dvi::Processor.new
596
+ end
597
+
598
+ it "opcode byte should be 157..160" do
599
+ 0.upto(255) do |i|
600
+ if (157..160).include?(i)
601
+ Dvi::Opcode::Down.range.should include(i)
602
+ else
603
+ Dvi::Opcode::Down.range.should_not include(i)
604
+ end
605
+ end
606
+ end
607
+
608
+ it "should move down" do
609
+ v = @ps.v
610
+ @ps.process(Dvi::Opcode::Down.new(100))
611
+ @ps.v.should == v + 100
612
+ end
613
+
614
+ after do
615
+ @ps = nil
616
+ end
617
+ end
618
+
619
+ describe Dvi::Opcode::Y0 do
620
+ before do
621
+ @ps = Dvi::Processor.new
622
+ end
623
+
624
+ it "opcode byte should be 161" do
625
+ 0.upto(255) do |i|
626
+ if i == 161
627
+ Dvi::Opcode::Y0.range.should include(i)
628
+ else
629
+ Dvi::Opcode::Y0.range.should_not include(i)
630
+ end
631
+ end
632
+ end
633
+
634
+ it "should move down" do
635
+ v = @ps.v
636
+ @ps.y = 100
637
+ @ps.process(Dvi::Opcode::Y0.new)
638
+ @ps.v.should == v + 100
639
+ end
640
+
641
+ after do
642
+ @ps = nil
643
+ end
644
+ end
645
+
646
+ describe Dvi::Opcode::Y do
647
+ before do
648
+ @ps = Dvi::Processor.new
649
+ end
650
+
651
+ it "opcode byte should be 162..165" do
652
+ 0.upto(255) do |i|
653
+ if (162..165).include?(i)
654
+ Dvi::Opcode::Y.range.should include(i)
655
+ else
656
+ Dvi::Opcode::Y.range.should_not include(i)
657
+ end
658
+ end
659
+ end
660
+
661
+ it "should change y and move down" do
662
+ v = @ps.v
663
+ @ps.y = 0
664
+ @ps.process(Dvi::Opcode::Y.new(100))
665
+ @ps.y.should == 100
666
+ @ps.v.should == v + 100
667
+ end
668
+
669
+ after do
670
+ @ps = nil
671
+ end
672
+ end
673
+
674
+ describe Dvi::Opcode::Z0 do
675
+ before do
676
+ @ps = Dvi::Processor.new
677
+ end
678
+
679
+ it "opcode byte should be 166" do
680
+ 0.upto(255) do |i|
681
+ if i == 166
682
+ Dvi::Opcode::Z0.range.should include(i)
683
+ else
684
+ Dvi::Opcode::Z0.range.should_not include(i)
685
+ end
686
+ end
687
+ end
688
+
689
+ it "should move down" do
690
+ v = @ps.v
691
+ @ps.z = 100
692
+ @ps.process(Dvi::Opcode::Z0.new)
693
+ @ps.v.should == v + 100
694
+ end
695
+
696
+ after do
697
+ @ps = nil
698
+ end
699
+ end
700
+
701
+ describe Dvi::Opcode::Z do
702
+ before do
703
+ @ps = Dvi::Processor.new
704
+ end
705
+
706
+ it "opcode byte should be 167..170" do
707
+ 0.upto(255) do |i|
708
+ if (167..170).include?(i)
709
+ Dvi::Opcode::Z.range.should include(i)
710
+ else
711
+ Dvi::Opcode::Z.range.should_not include(i)
712
+ end
713
+ end
714
+ end
715
+
716
+ it "should change z and move down" do
717
+ v = @ps.v
718
+ @ps.z = 0
719
+ @ps.process(Dvi::Opcode::Z.new(100))
720
+ @ps.z.should == 100
721
+ @ps.v.should == v + 100
722
+ end
723
+
724
+ after do
725
+ @ps = nil
726
+ end
727
+ end
728
+
729
+ describe Dvi::Opcode::FntNum do
730
+ before do
731
+ @ps = Dvi::Processor.new
732
+ @ps.process(Dvi::Opcode::FntDef.new(1, nil, 1, 1, nil, "cmr8"))
733
+ @ps.process(Dvi::Opcode::FntDef.new(2, nil, 1, 1, nil, "cmr10"))
734
+ @ps.process(Dvi::Opcode::FntDef.new(3, nil, 1, 1, nil, "cmb10"))
735
+ end
736
+
737
+ it "opcode byte should be 171..234" do
738
+ 0.upto(255) do |i|
739
+ if (171..234).include?(i)
740
+ Dvi::Opcode::FntNum.range.should include(i)
741
+ else
742
+ Dvi::Opcode::FntNum.range.should_not include(i)
743
+ end
744
+ end
745
+ end
746
+
747
+ it "should change the current font" do
748
+ @ps.process(Dvi::Opcode::FntNum.new(1))
749
+ @ps.font.name.should == "cmr8"
750
+ @ps.process(Dvi::Opcode::FntNum.new(2))
751
+ @ps.font.name.should == "cmr10"
752
+ @ps.process(Dvi::Opcode::FntNum.new(3))
753
+ @ps.font.name.should == "cmb10"
754
+ end
755
+
756
+ after do
757
+ @ps = nil
758
+ end
759
+ end
760
+
761
+ describe Dvi::Opcode::Fnt do
762
+ before do
763
+ @ps = Dvi::Processor.new
764
+ @ps.process(Dvi::Opcode::FntDef.new(1, nil, 1, 1, nil, "cmr8"))
765
+ @ps.process(Dvi::Opcode::FntDef.new(2, nil, 1, 1, nil, "cmr10"))
766
+ @ps.process(Dvi::Opcode::FntDef.new(3, nil, 1, 1, nil, "cmb10"))
767
+ end
768
+
769
+ it "opcode byte should be 171..234" do
770
+ 0.upto(255) do |i|
771
+ if (171..234).include?(i)
772
+ Dvi::Opcode::FntNum.range.should include(i)
773
+ else
774
+ Dvi::Opcode::FntNum.range.should_not include(i)
775
+ end
776
+ end
777
+ end
778
+
779
+ it "should change the current font" do
780
+ @ps.process(Dvi::Opcode::FntNum.new(1))
781
+ @ps.font.name.should == "cmr8"
782
+ @ps.process(Dvi::Opcode::FntNum.new(2))
783
+ @ps.font.name.should == "cmr10"
784
+ @ps.process(Dvi::Opcode::FntNum.new(3))
785
+ @ps.font.name.should == "cmb10"
786
+ end
787
+
788
+ after do
789
+ @ps = nil
790
+ end
791
+ end
792
+
793
+ describe Dvi::Opcode::XXX do
794
+ before do
795
+ @ps = Dvi::Processor.new
796
+ end
797
+
798
+ it "opcode byte should be 239..242" do
799
+ 0.upto(255) do |i|
800
+ if (239..242).include?(i)
801
+ Dvi::Opcode::XXX.range.should include(i)
802
+ else
803
+ Dvi::Opcode::XXX.range.should_not include(i)
804
+ end
805
+ end
806
+ end
807
+
808
+ after do
809
+ @ps = nil
810
+ end
811
+ end
812
+
813
+ describe Dvi::Opcode::FntDef do
814
+ before do
815
+ @ps = Dvi::Processor.new
816
+ end
817
+
818
+ it "opcode byte should be 243..246" do
819
+ 0.upto(255) do |i|
820
+ if (243..246).include?(i)
821
+ Dvi::Opcode::FntDef.range.should include(i)
822
+ else
823
+ Dvi::Opcode::FntDef.range.should_not include(i)
824
+ end
825
+ end
826
+ end
827
+
828
+ it "should add a font" do
829
+ f = @ps.fonts.size
830
+ @ps.process(Dvi::Opcode::FntDef.new(1, nil, 1, 1, nil, "cmr10"))
831
+ @ps.fonts.size.should == f + 1
832
+ end
833
+
834
+ after do
835
+ @ps = nil
836
+ end
837
+ end
838
+
839
+ describe Dvi::Opcode::Pre do
840
+ before do
841
+ @ps = Dvi::Processor.new
842
+ end
843
+
844
+ it "opcode byte should be 247" do
845
+ 0.upto(255) do |i|
846
+ if i == 247
847
+ Dvi::Opcode::Pre.range.should include(i)
848
+ else
849
+ Dvi::Opcode::Pre.range.should_not include(i)
850
+ end
851
+ end
852
+ end
853
+
854
+ it "set processor's dvi_version" do
855
+ @ps.dvi_version = nil
856
+ @ps.process(Dvi::Opcode::Pre.new(2, 25400000, 473628672, 1000, "This is a test."))
857
+ @ps.dvi_version.should == 2
858
+ end
859
+
860
+ it "set processor's numerator" do
861
+ @ps.numerator = nil
862
+ @ps.process(Dvi::Opcode::Pre.new(2, 25400000, 473628672, 1000, "This is a test."))
863
+ @ps.numerator.should == 25400000
864
+ end
865
+
866
+ it "set processor's denominator" do
867
+ @ps.denominator = nil
868
+ @ps.process(Dvi::Opcode::Pre.new(2, 25400000, 473628672, 1000, "This is a test."))
869
+ @ps.denominator.should == 473628672
870
+ end
871
+
872
+ it "set processor's mag" do
873
+ @ps.mag = nil
874
+ @ps.process(Dvi::Opcode::Pre.new(2, 25400000, 473628672, 1000, "This is a test."))
875
+ @ps.mag.should == 1000
876
+ end
877
+
878
+ after do
879
+ @ps = nil
880
+ end
881
+ end