dvi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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