png_font 0.0.1
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/Manifest.txt +8 -0
- data/README.txt +10 -0
- data/Rakefile +16 -0
- data/lib/font/p04b_03.rb +189 -0
- data/lib/png_font.rb +47 -0
- data/test/png_fonts_test_case.rb +41 -0
- data/test/test_png_fonts.rb +18 -0
- metadata +62 -0
data/Manifest.txt
ADDED
data/README.txt
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'hoe'
|
3
|
+
$:.unshift(File.dirname(__FILE__) + "/lib")
|
4
|
+
require 'png_font'
|
5
|
+
|
6
|
+
Hoe.new('PNGFont', PNG::Font::VERSION) do |p|
|
7
|
+
p.name = "png_font"
|
8
|
+
p.author = "Geoffrey Grosenbach"
|
9
|
+
p.description = "Simple fonts for use with the pure Ruby PNG library."
|
10
|
+
p.email = 'boss@topfunky.com'
|
11
|
+
p.summary = "Simple fonts."
|
12
|
+
p.url = "http://nubyonrails.com/pages/png_font"
|
13
|
+
p.clean_globs = ['test/output/*.png']
|
14
|
+
|
15
|
+
p.extra_deps = ['png']
|
16
|
+
end
|
data/lib/font/p04b_03.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
##
|
2
|
+
# Shamelessly looted from the wonderful freeware font 04B-03.
|
3
|
+
#
|
4
|
+
# http://www.dsg4.com/04/extra/bitmap/
|
5
|
+
|
6
|
+
class PNG
|
7
|
+
module Font
|
8
|
+
module P04B_03
|
9
|
+
|
10
|
+
@@glyphs = []
|
11
|
+
@@glyphs['A'[0]] = [
|
12
|
+
[[0,2],[0,5]], # L side
|
13
|
+
[[3,2],[3,5]], # R side
|
14
|
+
[[1,1],[2,1]], # T
|
15
|
+
[[0,4],[3,4]] # Bar
|
16
|
+
]
|
17
|
+
@@glyphs['B'[0]] = [
|
18
|
+
[[0,1],[0,5]], # L
|
19
|
+
[[0,1],[2,1]], # T
|
20
|
+
[[0,3],[2,3]], # M bar
|
21
|
+
[[0,5],[2,5]], # B
|
22
|
+
[[3,2],[3,2]], # TR of B
|
23
|
+
[[3,4],[3,4]], # TB of B
|
24
|
+
]
|
25
|
+
@@glyphs['C'[0]] = [
|
26
|
+
[[0,2],[0,4]], # L side
|
27
|
+
[[1,1],[2,1]], # T
|
28
|
+
[[1,5],[2,5]] # B
|
29
|
+
]
|
30
|
+
@@glyphs['D'[0]] = [
|
31
|
+
[[0,1],[0,5]], # L side
|
32
|
+
[[0,1],[2,1]], # Top
|
33
|
+
[[3,2],[3,4]], # R
|
34
|
+
[[0,5],[2,5]] # Bottom
|
35
|
+
]
|
36
|
+
@@glyphs['E'[0]] = [
|
37
|
+
[[0,1],[0,5]], # L side
|
38
|
+
[[0,1],[2,1]], # Top
|
39
|
+
[[0,3],[2,3]], # Middle bar
|
40
|
+
[[0,5],[2,5]] # Bottom
|
41
|
+
]
|
42
|
+
@@glyphs['F'[0]] = [
|
43
|
+
[[0,1],[0,5]], # L side
|
44
|
+
[[0,1],[2,1]], # Top
|
45
|
+
[[0,3],[2,3]] # Middle bar
|
46
|
+
]
|
47
|
+
@@glyphs['G'[0]] = [
|
48
|
+
[[0,2],[0,4]], # L side
|
49
|
+
[[1,1],[3,1]], # T
|
50
|
+
[[1,5],[3,5]], # B
|
51
|
+
[[3,3],[3,5]], # R
|
52
|
+
[[2,3],[3,3]] # Handle of G
|
53
|
+
]
|
54
|
+
@@glyphs['H'[0]] = [
|
55
|
+
[[0,1],[0,5]], # L side
|
56
|
+
[[3,1],[3,5]], # R side
|
57
|
+
[[0,3],[3,3]] # Bar
|
58
|
+
]
|
59
|
+
@@glyphs['I'[0]] = [
|
60
|
+
[[1,1],[1,5]], # M vert bar
|
61
|
+
[[0,1],[2,1]], # Top
|
62
|
+
[[0,5],[2,5]] # Bottom
|
63
|
+
]
|
64
|
+
@@glyphs['J'[0]] = [
|
65
|
+
[[2,1],[3,1]], # T
|
66
|
+
[[3,1],[3,4]], # R
|
67
|
+
[[0,4],[0,4]], # L
|
68
|
+
[[1,5],[2,5]] # B
|
69
|
+
]
|
70
|
+
@@glyphs['K'[0]] = [
|
71
|
+
[[0,1],[0,5]], # L
|
72
|
+
[[2,2],[2,2]], # T Angle HACK
|
73
|
+
[[3,1],[3,1]], # T Angle HACK
|
74
|
+
[[1,3],[3,5]] # B
|
75
|
+
]
|
76
|
+
@@glyphs['L'[0]] = [
|
77
|
+
[[0,1],[0,5]], # L vert bar
|
78
|
+
[[0,5],[2,5]] # Bottom
|
79
|
+
]
|
80
|
+
@@glyphs['M'[0]] = [
|
81
|
+
[[0,1],[0,5]], # L vert bar
|
82
|
+
[[0,1],[2,3]], # L angle
|
83
|
+
[[3,2],[3,2]], # Dot on up angle
|
84
|
+
[[4,1],[4,5]] # R vert bar
|
85
|
+
]
|
86
|
+
@@glyphs['N'[0]] = [
|
87
|
+
[[0,1],[0,5]], # L vert bar
|
88
|
+
[[0,1],[2,3]], # L Angle
|
89
|
+
[[3,1],[3,5]] # R vert bar
|
90
|
+
]
|
91
|
+
@@glyphs['O'[0]] = [
|
92
|
+
[[0,2],[0,4]], # L
|
93
|
+
[[1,1],[2,1]], # T
|
94
|
+
[[3,2],[3,4]], # R
|
95
|
+
[[1,5],[2,5]] # B
|
96
|
+
]
|
97
|
+
@@glyphs['P'[0]] = [
|
98
|
+
[[0,1],[0,5]], # L
|
99
|
+
[[1,1],[2,1]], # T
|
100
|
+
[[3,2],[3,3]], # R
|
101
|
+
[[1,4],[2,4]] # B
|
102
|
+
]
|
103
|
+
@@glyphs['Q'[0]] = [
|
104
|
+
[[0,2],[0,4]], # L
|
105
|
+
[[1,1],[2,1]], # T
|
106
|
+
[[3,2],[3,4]], # R
|
107
|
+
[[1,5],[2,5]], # B
|
108
|
+
[[3,6],[3,6]] # Foot
|
109
|
+
]
|
110
|
+
@@glyphs['R'[0]] = [
|
111
|
+
[[0,1],[0,5]], # L
|
112
|
+
[[1,1],[2,1]], # T
|
113
|
+
[[3,2],[3,3]], # R
|
114
|
+
[[1,4],[2,4]], # B
|
115
|
+
[[3,5],[3,5]] # Foot
|
116
|
+
]
|
117
|
+
@@glyphs['S'[0]] = [
|
118
|
+
[[1,1],[3,1]], # Top
|
119
|
+
[[0,2],[0,2]], # L
|
120
|
+
[[1,3],[2,3]], # Middle
|
121
|
+
[[3,4],[3,4]], # R
|
122
|
+
[[0,5],[2,5]] # Bottom
|
123
|
+
]
|
124
|
+
@@glyphs['T'[0]] = [
|
125
|
+
[[1,1],[1,5]], # M vert bar
|
126
|
+
[[0,1],[2,1]] # Top
|
127
|
+
]
|
128
|
+
@@glyphs['U'[0]] = [
|
129
|
+
[[0,1],[0,4]], # L
|
130
|
+
[[3,1],[3,4]], # R
|
131
|
+
[[1,5],[2,5]] # B
|
132
|
+
]
|
133
|
+
@@glyphs['V'[0]] = [
|
134
|
+
[[0,1],[0,4]], # L
|
135
|
+
[[2,1],[2,4]], # R
|
136
|
+
[[1,5],[1,5]] # B
|
137
|
+
]
|
138
|
+
@@glyphs['W'[0]] = [
|
139
|
+
[[0,1],[0,4]], # L vert bar
|
140
|
+
[[2,2],[2,4]], # M vert
|
141
|
+
[[1,5],[1,5]], # low tick
|
142
|
+
[[3,5],[3,5]], # low tick
|
143
|
+
[[4,1],[4,4]] # R vert bar
|
144
|
+
]
|
145
|
+
@@glyphs['X'[0]] = [
|
146
|
+
[[0,1],[0,2]], # L vert bar
|
147
|
+
[[0,4],[0,5]], # L vert bar
|
148
|
+
[[1,3],[2,3]], # horiz bar
|
149
|
+
[[3,1],[3,2]], # R vert bar
|
150
|
+
[[3,4],[3,5]] # R vert bar
|
151
|
+
]
|
152
|
+
@@glyphs['Y'[0]] = [
|
153
|
+
[[0,1],[0,2]], # L
|
154
|
+
[[3,1],[3,4]], # R
|
155
|
+
[[1,3],[2,3]], # horiz bar
|
156
|
+
[[1,5],[2,5]] # B
|
157
|
+
]
|
158
|
+
@@glyphs['Z'[0]] = [
|
159
|
+
[[0,1],[2,1]], # Top
|
160
|
+
[[0,4],[0,4]], # M dot
|
161
|
+
[[1,3],[1,3]], # M dot
|
162
|
+
[[2,2],[2,2]], # M dot
|
163
|
+
[[0,5],[2,5]] # Bottom
|
164
|
+
]
|
165
|
+
|
166
|
+
@@glyphs['.'[0]] = [
|
167
|
+
[[0,5],[0,5]]
|
168
|
+
]
|
169
|
+
|
170
|
+
|
171
|
+
# TODO Numbers and punctuation
|
172
|
+
|
173
|
+
##
|
174
|
+
# A reference to all the characters in the font.
|
175
|
+
|
176
|
+
def self.glyphs
|
177
|
+
@@glyphs
|
178
|
+
end
|
179
|
+
|
180
|
+
##
|
181
|
+
# Defines the space between the letters.
|
182
|
+
|
183
|
+
def self.tracking
|
184
|
+
2
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
data/lib/png_font.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# require 'rubygems'
|
2
|
+
require 'png'
|
3
|
+
|
4
|
+
require 'font/p04b_03'
|
5
|
+
|
6
|
+
class PNG
|
7
|
+
module Font
|
8
|
+
VERSION = '0.0.1'
|
9
|
+
|
10
|
+
def self.character_width(ascii_char, pointsize, font)
|
11
|
+
# TODO Take pointsize into account
|
12
|
+
rightmost_x = 0
|
13
|
+
font.glyphs[ascii_char].each do |point_set|
|
14
|
+
rightmost_x = [rightmost_x, point_set[0][0], point_set[1][0]].max
|
15
|
+
end
|
16
|
+
rightmost_x
|
17
|
+
rescue # DEBUG ONLY
|
18
|
+
return 0 # nothing...for development only
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class PNG::Canvas
|
24
|
+
|
25
|
+
def annotate(x, y, string, pointsize=8, font=PNG::Font::P04B_03, color=PNG::Color::Black)
|
26
|
+
x_offset = 0
|
27
|
+
string.each_byte do |byte|
|
28
|
+
character(x + x_offset, y, byte, pointsize, font, color)
|
29
|
+
x_offset += PNG::Font.character_width(byte, pointsize, font) + font.tracking
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
34
|
+
|
35
|
+
##
|
36
|
+
# For internal use only. Use +annotate+ to draw a single character or a string.
|
37
|
+
|
38
|
+
def character(x, y, ascii_char, pointsize, font, color)
|
39
|
+
# TODO Multiply coordinates by pointsize
|
40
|
+
font.glyphs[ascii_char].each do |point_set|
|
41
|
+
line point_set[0][0] + x, point_set[0][1] + y, point_set[1][0] + x, point_set[1][1] + y, color
|
42
|
+
end
|
43
|
+
rescue # DEBUG ONLY
|
44
|
+
# nothing...for development only
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'png_font'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
class PNGFontsTestCase < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
FileUtils.mkdir_p File.dirname(__FILE__) + "/output"
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_dummy
|
14
|
+
assert true
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def write_test_file(canvas, filename)
|
20
|
+
png = PNG.new canvas
|
21
|
+
png.save(File.dirname(__FILE__) + "/output/#{filename}.png")
|
22
|
+
end
|
23
|
+
|
24
|
+
def setup_canvas(width, height)
|
25
|
+
canvas = PNG::Canvas.new width, height
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# Utility for making a canvas and writing it to disk.
|
30
|
+
#
|
31
|
+
# canvas('basic', 200) do |c|
|
32
|
+
# c.line 50, 50, 100, 50, PNG::Color::Blue
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
def canvas(filename, width=200, height=width)
|
36
|
+
c = setup_canvas(width, height)
|
37
|
+
yield c
|
38
|
+
write_test_file c, filename
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/png_fonts_test_case"
|
2
|
+
|
3
|
+
class PNGFontsTest < PNGFontsTestCase
|
4
|
+
|
5
|
+
def test_A
|
6
|
+
canvas('A', 150, 50) do |c|
|
7
|
+
# c.line 0,20,20,0, PNG::Color::Red
|
8
|
+
|
9
|
+
c.annotate(1,1,"ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
10
|
+
c.annotate(1,21,"A TINY FONT USING RUBY PNG.")
|
11
|
+
# c.annotate(1,11,"abcdefghijklmnopqrstuvwxyz")
|
12
|
+
|
13
|
+
c.annotate(1,31,"LOWERCASE AND PUNCTUATION")
|
14
|
+
c.annotate(70,41,"COMING SOON...")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: png_font
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.1
|
7
|
+
date: 2006-10-19 00:00:00 -07:00
|
8
|
+
summary: Simple fonts.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
- test
|
12
|
+
email: boss@topfunky.com
|
13
|
+
homepage: http://nubyonrails.com/pages/png_font
|
14
|
+
rubyforge_project: pngfont
|
15
|
+
description: Simple fonts for use with the pure Ruby PNG library.
|
16
|
+
autorequire:
|
17
|
+
default_executable:
|
18
|
+
bindir: bin
|
19
|
+
has_rdoc: true
|
20
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
25
|
+
version:
|
26
|
+
platform: ruby
|
27
|
+
signing_key:
|
28
|
+
cert_chain:
|
29
|
+
post_install_message:
|
30
|
+
authors:
|
31
|
+
- Geoffrey Grosenbach
|
32
|
+
files:
|
33
|
+
- Manifest.txt
|
34
|
+
- Rakefile
|
35
|
+
- README.txt
|
36
|
+
- lib/png_font.rb
|
37
|
+
- lib/font/p04b_03.rb
|
38
|
+
- test/png_fonts_test_case.rb
|
39
|
+
- test/test_png_fonts.rb
|
40
|
+
- test/output
|
41
|
+
test_files: []
|
42
|
+
|
43
|
+
rdoc_options: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
executables: []
|
48
|
+
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
dependencies:
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: png
|
56
|
+
version_requirement:
|
57
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.0
|
62
|
+
version:
|