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/spec.opts ADDED
@@ -0,0 +1 @@
1
+ -fs --colour
@@ -0,0 +1,16 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $LOAD_PATH << File.join(File.dirname(__FILE__), "..", "lib")
10
+
11
+ require "pp"
12
+ require "dvi"
13
+
14
+ $TEXMF = File.join(File.dirname(__FILE__), "..", "tmp")
15
+ Dvi::LsR.default = Dvi::LsR.new($TEXMF)
16
+
data/spec/tfm_spec.rb ADDED
@@ -0,0 +1,167 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+
3
+ describe Dvi::Tfm do
4
+ before do
5
+ @ps = Dvi::Processor.new
6
+ end
7
+
8
+ it "can read tfm files." do
9
+ Proc.new do
10
+ Dvi::Tfm.read(Dvi::LsR.default.find("cmr8.tfm"))
11
+ end.should_not raise_error(Dvi::Tfm::Format::Error)
12
+ end
13
+ end
14
+
15
+ describe Dvi::Tfm, " when cmr8.tfm" do
16
+ before do
17
+ @tfm = Dvi::Tfm.read(Dvi::LsR.default.find("cmr8.tfm"))
18
+ end
19
+
20
+ it "font_size should be 8pt." do
21
+ @tfm.design_size.should == 8.0
22
+ end
23
+
24
+ it "font_coding_scheme should be 'TeX text.'" do
25
+ @tfm.font_coding_scheme.should == "TeX text"
26
+ end
27
+
28
+ it "font_identifier should be 'CMR'." do
29
+ @tfm.font_identifier.should == "CMR"
30
+ end
31
+
32
+ it "should contains 128 character informations." do
33
+ @tfm.char.size.should == 128
34
+ end
35
+
36
+ it "width of 'a' should be 0.531258(design-size unit)." do
37
+ (@tfm.char[97].width*1000000).round.should == 531258
38
+ end
39
+
40
+ it "height of 'a' should be 0.430555(design-size unit)." do
41
+ (@tfm.char[97].height*1000000).round.should == 430555
42
+ end
43
+
44
+ it "depth of 'a' should be 0." do
45
+ @tfm.char[97].depth.should == 0
46
+ end
47
+
48
+ it "italic correction size of 'a' should be 0." do
49
+ @tfm.char[97].italic_correction.should == 0
50
+ end
51
+
52
+ it "lig_kern size of 'a' should be 4." do
53
+ @tfm.char[97].kerning.size.should == 4
54
+ end
55
+
56
+ it "kerning of 'a' should be a kind of Dvi::Tfm::Kerning." do
57
+ @tfm.char[97].kerning.values.each do |k|
58
+ k.should be_a_kind_of(Dvi::Tfm::Kerning)
59
+ end
60
+ end
61
+
62
+ it "the kenring amount of 'av' should be -0.029514(design-size unit)." do
63
+ (@tfm.char[97].kerning[118].amount*1000000).round.should == -29514
64
+ end
65
+
66
+ it "the kenring amount of 'aj' should be 0.059029(design-size unit)." do
67
+ (@tfm.char[97].kerning[106].amount*1000000).round.should == 59029
68
+ end
69
+
70
+ it "the kenring amount of 'ay' should be -0.029514(design-size unit)." do
71
+ (@tfm.char[97].kerning[121].amount*1000000).round.should == -29514
72
+ end
73
+
74
+ it "the kenring amount of 'aw' should be -0.029514(design-size unit)." do
75
+ (@tfm.char[97].kerning[119].amount*1000000).round.should == -29514
76
+ end
77
+
78
+ it "ligature of 'fi' should be 12. (MAYBE)" do
79
+ @tfm.char[102].ligature[105].index.should == 12
80
+ end
81
+
82
+ it "ligature of 'ff' should be 11. (MAYBE)" do
83
+ @tfm.char[102].ligature[102].index.should == 11
84
+ end
85
+
86
+ it "ligature of 'fl' should be 13. (MAYBE)" do
87
+ @tfm.char[102].ligature[108].index.should == 13
88
+ end
89
+
90
+ it "width of 'y' should be width 0.560772(design-size unit)." do
91
+ (@tfm.char[121].width*1000000).round.should == 560772
92
+ end
93
+
94
+ it "height of 'y' should be 0.430555(design-size unit)." do
95
+ (@tfm.char[121].height*1000000).round.should == 430555
96
+ end
97
+
98
+ it "depth of 'y' should be 0.194445(design-size unit)." do
99
+ (@tfm.char[121].depth*1000000).round.should == 194445
100
+ end
101
+
102
+ it "italic correction size of 'y' should be 0.014757(design-size unit)." do
103
+ (@tfm.char[121].italic_correction*1000000).round.should == 14757
104
+ end
105
+
106
+ after do
107
+ @tfm = nil
108
+ end
109
+ end
110
+
111
+ describe Dvi::Tfm, " when cmb10.tfm" do
112
+ before do
113
+ @tfm = Dvi::Tfm.read(Dvi::LsR.default.find("cmb10.tfm"))
114
+ end
115
+
116
+ it "font_size should be 10pt." do
117
+ @tfm.design_size.should == 10.0
118
+ end
119
+
120
+ it "font_coding_scheme should be 'TeX text.'" do
121
+ @tfm.font_coding_scheme.should == "TeX text"
122
+ end
123
+
124
+ it "font_identifier should be 'CMB'." do
125
+ @tfm.font_identifier.should == "CMB"
126
+ end
127
+
128
+ it "should contains 128 character informations." do
129
+ @tfm.char.size.should == 128
130
+ end
131
+
132
+ it "width of 'a' should be 0.486113(design-size unit)." do
133
+ (@tfm.char[97].width*1000000).round.should == 486113
134
+ end
135
+
136
+ it "height of 'a' should be 0.444445(design-size unit)." do
137
+ (@tfm.char[97].height*1000000).round.should == 444445
138
+ end
139
+
140
+ it "depth of 'a' should be 0." do
141
+ @tfm.char[97].depth.should == 0
142
+ end
143
+
144
+ it "italic correction size of 'a' should be 0." do
145
+ @tfm.char[97].italic_correction.should == 0
146
+ end
147
+
148
+ it "width of 'y' should be width 0.527781(design-size unit)." do
149
+ (@tfm.char[121].width*1000000).round.should == 527781
150
+ end
151
+
152
+ it "height of 'y' should be 0.444445(design-size unit)." do
153
+ (@tfm.char[121].height*1000000).round.should == 444445
154
+ end
155
+
156
+ it "depth of 'y' should be 0.194445(design-size unit)." do
157
+ (@tfm.char[121].depth*1000000).round.should == 194445
158
+ end
159
+
160
+ it "italic correction size of 'y' should be 0.013888(design-size unit)." do
161
+ (@tfm.char[121].italic_correction*1000000).round.should == 13888
162
+ end
163
+
164
+ after do
165
+ @tfm = nil
166
+ end
167
+ end
@@ -0,0 +1,34 @@
1
+ desc 'Release the website and new gem version'
2
+ task :deploy => [:check_version, :website, :release] do
3
+ puts "Remember to create SVN tag:"
4
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
6
+ puts "Suggested comment:"
7
+ puts "Tagging release #{CHANGES}"
8
+ end
9
+
10
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:website_generate, :install_gem]
12
+
13
+ task :check_version do
14
+ unless ENV['VERSION']
15
+ puts 'Must pass a VERSION=x.y.z release version'
16
+ exit
17
+ end
18
+ unless ENV['VERSION'] == VERS
19
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
20
+ exit
21
+ end
22
+ end
23
+
24
+ desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
25
+ task :install_gem_no_doc => [:clean, :package] do
26
+ sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
27
+ end
28
+
29
+ namespace :manifest do
30
+ desc 'Recreate Manifest.txt to include ALL files'
31
+ task :refresh do
32
+ `rake check_manifest | patch -p0 > Manifest.txt`
33
+ end
34
+ end
data/tasks/dvi.rake ADDED
@@ -0,0 +1,16 @@
1
+ namespace "dvi" do
2
+ desc "Download sample tfm files."
3
+ task :download_tfm do
4
+ url = "http://www.ctan.org/get/fonts/cm/tfm"
5
+ [ "cmr8.tfm", "cmr10.tfm", "cmr12.tfm", "cmb10.tfm" ].each do |name|
6
+ unless File.exist?(File.join(File.dirname(__FILE__), "..", "tmp", "tfm", name))
7
+ sh %{ curl --create-dirs --location -o tmp/tfm/#{name} #{url}/#{name} }
8
+ end
9
+ end
10
+ end
11
+
12
+ desc "Make ls-R."
13
+ task :lsr => :download_tfm do
14
+ sh %{mktexlsr tmp}
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ task :ruby_env do
2
+ RUBY_APP = if RUBY_PLATFORM =~ /java/
3
+ "jruby"
4
+ else
5
+ "ruby"
6
+ end unless defined? RUBY_APP
7
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/*_spec.rb']
21
+ end
@@ -0,0 +1,17 @@
1
+ desc 'Generate website files'
2
+ task :website_generate => :ruby_env do
3
+ (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
4
+ sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
5
+ end
6
+ end
7
+
8
+ desc 'Upload website files to rubyforge'
9
+ task :website_upload do
10
+ host = "#{rubyforge_username}@rubyforge.org"
11
+ remote_dir = "/var/www/gforge-projects/#{PATH}/"
12
+ local_dir = 'website'
13
+ sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
14
+ end
15
+
16
+ desc 'Generate and upload website files'
17
+ task :website => [:website_generate, :website_upload, :publish_docs]
@@ -0,0 +1,119 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ ruby-dvi
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>ruby-dvi</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/dvi"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/dvi" class="numbers">0.1.0</a>
37
+ </div>
38
+ <h2>What</h2>
39
+
40
+
41
+ <p>This is a library to read <acronym title="DeVice Independent">DVI</acronym> and <acronym title="TeX Font Metric">TFM</acronym> file format.</p>
42
+
43
+
44
+ <h2>Installing</h2>
45
+
46
+
47
+ <p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">dvi</span></pre></p>
48
+
49
+
50
+ <h2><span class="caps">API</span> document</h2>
51
+
52
+
53
+ <p><a href="http://dvi.rubyforge.org/rdoc/">http://dvi.rubyforge.org/rdoc/</a></p>
54
+
55
+
56
+ <h2>The basics</h2>
57
+
58
+
59
+ <h3>Read <span class="caps">DVI</span> file</h3>
60
+
61
+
62
+ <p><pre class='syntax'>
63
+ <span class="constant">Dvi</span><span class="punct">.</span><span class="ident">read</span><span class="punct">(</span><span class="constant">File</span><span class="punct">.</span><span class="ident">open</span><span class="punct">(</span><span class="ident">path</span><span class="punct">))</span>
64
+ </pre></p>
65
+
66
+
67
+ <h3>Read <span class="caps">TFM</span> file</h3>
68
+
69
+
70
+ <p><pre class='syntax'>
71
+ <span class="constant">Dvi</span><span class="punct">::</span><span class="constant">Tfm</span><span class="punct">.</span><span class="ident">read</span><span class="punct">(</span><span class="constant">File</span><span class="punct">.</span><span class="ident">open</span><span class="punct">(</span><span class="ident">path</span><span class="punct">))</span>
72
+ </pre></p>
73
+
74
+
75
+ <h2>Test</h2>
76
+
77
+
78
+ <pre>rake spec</pre>
79
+
80
+ <p>You should run before test:</p>
81
+
82
+
83
+ <pre>rake dvi:lsr</pre>
84
+
85
+ <h2>Forum</h2>
86
+
87
+
88
+ <p><a href="http://groups.google.com/group/ruby-dvi">http://groups.google.com/group/ruby-dvi</a></p>
89
+
90
+
91
+ <h2>How to submit patches</h2>
92
+
93
+
94
+ <p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people&#8217;s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
95
+
96
+
97
+ <p>The trunk repository is <code>svn://rubyforge.org/var/svn/dvi/trunk</code> for anonymous access.</p>
98
+
99
+
100
+ <h2>License</h2>
101
+
102
+
103
+ <p>This code is free to use under the terms of the Ruby license.</p>
104
+
105
+
106
+ <h2>Contact</h2>
107
+
108
+
109
+ <p>Comments are welcome. Send an email to <a href="mailto:keita.yamaguchi@gmail.com">Keita Yamaguchi</a> or the <a href="http://groups.google.com/group/ruby-dvi">forum</a></p>
110
+ <p class="coda">
111
+ <a href="keita.yamaguchi@gmail.com">FIXME full name</a>, 18th December 2007<br>
112
+ Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
113
+ </p>
114
+ </div>
115
+
116
+ <!-- insert site tracking codes here, like Google Urchin -->
117
+
118
+ </body>
119
+ </html>
data/website/index.txt ADDED
@@ -0,0 +1,55 @@
1
+ h1. ruby-dvi
2
+
3
+ h2. What
4
+
5
+ This is a library to read DVI(DeVice Independent) and TFM(TeX Font Metric) file format.
6
+
7
+ h2. Installing
8
+
9
+ <pre syntax="ruby">sudo gem install dvi</pre>
10
+
11
+ h2. API document
12
+
13
+ "http://dvi.rubyforge.org/rdoc/":http://dvi.rubyforge.org/rdoc/
14
+
15
+ h2. The basics
16
+
17
+
18
+ h3. Read DVI file
19
+
20
+ <pre syntax="ruby">
21
+ Dvi.read(File.open(path))
22
+ </pre>
23
+
24
+ h3. Read TFM file
25
+
26
+ <pre syntax="ruby">
27
+ Dvi::Tfm.read(File.open(path))
28
+ </pre>
29
+
30
+ h2. Test
31
+
32
+ <pre>rake spec</pre>
33
+
34
+ You should run before test:
35
+
36
+ <pre>rake dvi:lsr</pre>
37
+
38
+ h2. Forum
39
+
40
+ "http://groups.google.com/group/ruby-dvi":http://groups.google.com/group/ruby-dvi
41
+
42
+ h2. How to submit patches
43
+
44
+ Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
45
+
46
+ The trunk repository is <code>svn://rubyforge.org/var/svn/dvi/trunk</code> for anonymous access.
47
+
48
+ h2. License
49
+
50
+ This code is free to use under the terms of the Ruby license.
51
+
52
+ h2. Contact
53
+
54
+ Comments are welcome. Send an email to "Keita Yamaguchi":mailto:keita.yamaguchi@gmail.com or the "forum":http://groups.google.com/group/ruby-dvi
55
+