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/History.txt +4 -0
- data/License.txt +56 -0
- data/Manifest.txt +37 -0
- data/README.txt +10 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +72 -0
- data/config/requirements.rb +17 -0
- data/lib/dvi.rb +99 -0
- data/lib/dvi/lsr.rb +41 -0
- data/lib/dvi/opcode.rb +515 -0
- data/lib/dvi/tfm.rb +68 -0
- data/lib/dvi/tfm/format.rb +290 -0
- data/lib/dvi/util.rb +37 -0
- data/lib/dvi/version.rb +9 -0
- data/log/debug.log +0 -0
- data/misc/latex/latex.dvi +0 -0
- data/misc/latex/latex.tex +4 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/spec/dvi_spec.rb +17 -0
- data/spec/lsr_spec.rb +11 -0
- data/spec/opcode_spec.rb +881 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/tfm_spec.rb +167 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/dvi.rake +16 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/website.rake +17 -0
- data/website/index.html +119 -0
- data/website/index.txt +55 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +48 -0
- metadata +87 -0
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
|
data/spec/opcode_spec.rb
ADDED
@@ -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
|