indie-raster 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/fonts/fonts_prf1/dsm-22-italic.prf1 +0 -0
- data/fonts/fonts_prf1/dsm-22.prf1 +0 -0
- data/fonts/fonts_prf1/dsm-24-bold-inverted.prf1 +0 -0
- data/fonts/fonts_prf1/dsm-24.prf1 +0 -0
- data/fonts/fonts_prf1/dsm-56-bold-inverted.prf1 +0 -0
- data/fonts/fonts_vector/dsm/chars-spaced.txt +21 -0
- data/fonts/glyphs/dsm-22-bold-inverted.png +0 -0
- data/fonts/glyphs/dsm-22-italic.png +0 -0
- data/fonts/glyphs/dsm-22.png +0 -0
- data/fonts/glyphs/dsm-24-bold-inverted.png +0 -0
- data/fonts/glyphs/dsm-24.png +0 -0
- data/fonts/glyphs/dsm-56-bold-inverted.png +0 -0
- data/fonts/make-fonts.sh +10 -6
- data/fonts/scripts/splitter.c +5 -4
- data/fonts/scripts/splitter.sh +1 -1
- data/indie-raster.gemspec +1 -1
- data/src-ruby/indie-raster.rb +105 -27
- data/test/expected.pbm +0 -0
- data/test/expected.ppm +1 -1
- data/test/test.rb +1 -1
- metadata +8 -17
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,21 @@
|
|
1
|
+
! " # $ % & ( ) *
|
2
|
+
+ , - . / 0 1 2 3 4
|
3
|
+
5 6 7 8 9 : ; < = >
|
4
|
+
? @ A B C D E F G H
|
5
|
+
I J K L M N O P Q R
|
6
|
+
S T U V W X Y Z [ \
|
7
|
+
] ^ _ ` a b c d e f
|
8
|
+
g h i j k l m n o p
|
9
|
+
q r s t u v w x y z
|
10
|
+
{ | } ~ ¡ ¢ £ ¤ ¥ ¦
|
11
|
+
§ ¨ © ª « ¬ ® ¯ ° ±
|
12
|
+
² ³ ´ µ ¶ · ¸ ¹ º »
|
13
|
+
¼ ½ ¾ ¿ À Á Â Ã Ä Å
|
14
|
+
Æ Ç È É Ê Ë Ì Í Î Ï
|
15
|
+
Ð Ñ Ò Ó Ô Õ Ö × Ø Ù
|
16
|
+
Ú Û Ü Ý Þ ß à á â ã
|
17
|
+
ä å æ ç è é ê ë ì í
|
18
|
+
î ï ð ñ ò ó ô õ ö ÷
|
19
|
+
ø ù ú û ü ý þ ÿ – —
|
20
|
+
‘ ’ ‚ “ ” „ • ‹ ›
|
21
|
+
|
Binary file
|
Binary file
|
data/fonts/glyphs/dsm-22.png
CHANGED
Binary file
|
Binary file
|
data/fonts/glyphs/dsm-24.png
CHANGED
Binary file
|
Binary file
|
data/fonts/make-fonts.sh
CHANGED
@@ -2,19 +2,23 @@
|
|
2
2
|
|
3
3
|
cd scripts;
|
4
4
|
|
5
|
-
|
6
5
|
# dsm-56-bold-inverted
|
7
|
-
bash splitter.sh ../glyphs/dsm-56-bold-inverted.png 34 56 4 20 21 199 10
|
6
|
+
bash splitter.sh ../glyphs/dsm-56-bold-inverted.png 34 56 4 20 34 21 199 10
|
8
7
|
coffee pack-font.coffee --chars=../fonts_vector/dsm/chars-all.json > ../fonts_prf1/dsm-56-bold-inverted.prf1
|
9
8
|
|
9
|
+
# dsm-24-bold-inverted
|
10
|
+
bash splitter.sh ../glyphs/dsm-24-bold-inverted.png 14 24 4 11 14 10 199 10
|
11
|
+
coffee pack-font.coffee --chars=../fonts_vector/dsm/chars-all.json > ../fonts_prf1/dsm-24-bold-inverted.prf1
|
12
|
+
|
13
|
+
|
10
14
|
# dsm-22
|
11
|
-
bash splitter.sh ../glyphs/dsm-22.png 13 22 4 11 10 199 10
|
15
|
+
bash splitter.sh ../glyphs/dsm-22.png 13 22 4 11 13 10 199 10
|
12
16
|
coffee pack-font.coffee --chars=../fonts_vector/dsm/chars-all.json > ../fonts_prf1/dsm-22.prf1
|
13
17
|
|
14
|
-
# dsm-22-italic
|
15
|
-
bash splitter.sh ../glyphs/dsm-22-italic.png 13 22 6 11 10 199 10
|
18
|
+
# dsm-22-italic (TODO: proper {w, hs} when kerning gets added)
|
19
|
+
bash splitter.sh ../glyphs/dsm-22-italic.png 13 22 6 11 13 10 199 10
|
16
20
|
coffee pack-font.coffee --chars=../fonts_vector/dsm/chars-all.json > ../fonts_prf1/dsm-22-italic.prf1
|
17
21
|
|
18
22
|
# dsm-24
|
19
|
-
bash splitter.sh ../glyphs/dsm-24.png 14 24 4 11 10 199 10
|
23
|
+
bash splitter.sh ../glyphs/dsm-24.png 14 24 4 11 14 10 199 10
|
20
24
|
coffee pack-font.coffee --chars=../fonts_vector/dsm/chars-all.json > ../fonts_prf1/dsm-24.prf1
|
data/fonts/scripts/splitter.c
CHANGED
@@ -14,9 +14,10 @@ int main(int argc, char *argv[]) {
|
|
14
14
|
long h = atol(argv[3]);
|
15
15
|
long x0 = atol(argv[4]);
|
16
16
|
long y0 = atol(argv[5]);
|
17
|
-
long
|
18
|
-
long
|
19
|
-
long
|
17
|
+
long hs = atol(argv[6]);
|
18
|
+
long vs = atol(argv[7]);
|
19
|
+
long n = atol(argv[8]);
|
20
|
+
long wrap = atol(argv[9]);
|
20
21
|
|
21
22
|
// glyphs.pbm
|
22
23
|
char cmd[1000];
|
@@ -41,7 +42,7 @@ int main(int argc, char *argv[]) {
|
|
41
42
|
for (i = 0; i < n; i++) {
|
42
43
|
x = (i % wrap);
|
43
44
|
y = (i / wrap);
|
44
|
-
pixelX = x0 + w * x;
|
45
|
+
pixelX = x0 + (w + hs) * x;
|
45
46
|
pixelY = y0 + (h + vs) * y;
|
46
47
|
|
47
48
|
|
data/fonts/scripts/splitter.sh
CHANGED
data/indie-raster.gemspec
CHANGED
data/src-ruby/indie-raster.rb
CHANGED
@@ -32,32 +32,42 @@ INDIE_RASTER_PATH = File.expand_path(File.dirname(__FILE__) + "/../build-c/indie
|
|
32
32
|
|
33
33
|
class IndieRasterSession
|
34
34
|
|
35
|
-
def initialize
|
36
|
-
@
|
35
|
+
def initialize(opt = {})
|
36
|
+
@commandsAppended = []
|
37
|
+
@commandsPrepended = []
|
37
38
|
@fonts = {}
|
39
|
+
@imageDims = {}
|
40
|
+
|
41
|
+
@_curX = 0
|
42
|
+
@_curY = 0
|
43
|
+
|
44
|
+
@maxX = 0
|
45
|
+
@maxY = 0
|
46
|
+
|
38
47
|
end
|
39
48
|
|
40
|
-
def
|
41
|
-
@
|
49
|
+
def appendCommand(data)
|
50
|
+
@commandsAppended.push data
|
42
51
|
end
|
43
52
|
|
44
|
-
def
|
45
|
-
|
46
|
-
@c.push "loadImage #{opt[:id]} #{data.length}\n"
|
47
|
-
@c.push data
|
53
|
+
def prependCommand(c)
|
54
|
+
@commandsPrepended.push c
|
48
55
|
end
|
49
56
|
|
50
|
-
def
|
51
|
-
|
52
|
-
@fonts[opt[:id]] = data
|
53
|
-
@c.push "loadFont #{opt[:id]} #{data.length}\n"
|
54
|
-
@c.push data
|
57
|
+
def commandsData()
|
58
|
+
@commandsPrepended.reverse.join('') + @commandsAppended.join('')
|
55
59
|
end
|
56
60
|
|
57
|
-
def
|
58
|
-
@
|
61
|
+
def curX()
|
62
|
+
@_curX
|
59
63
|
end
|
60
64
|
|
65
|
+
def curY()
|
66
|
+
@_curY
|
67
|
+
end
|
68
|
+
|
69
|
+
#### Helpers
|
70
|
+
|
61
71
|
def widthOfText(opt)
|
62
72
|
glyphWidth = ith_byte 8, @fonts[opt[:font]] #ASSUMPTION: glyph width < 256px
|
63
73
|
return glyphWidth * opt[:text].length
|
@@ -67,6 +77,68 @@ class IndieRasterSession
|
|
67
77
|
return ith_byte 12, @fonts[opt[:font]] #ASSUMPTION: height < 256
|
68
78
|
end
|
69
79
|
|
80
|
+
def down(dy)
|
81
|
+
@_curY += dy
|
82
|
+
end
|
83
|
+
|
84
|
+
#TODO: rename
|
85
|
+
def cursorForOpt(opt)
|
86
|
+
x = opt[:x]
|
87
|
+
x = @_curX if x.nil?
|
88
|
+
y = opt[:y]
|
89
|
+
y = @_curY if y.nil?
|
90
|
+
|
91
|
+
x += (opt[:dx] or 0)
|
92
|
+
y += (opt[:dy] or 0)
|
93
|
+
|
94
|
+
return [x, y]
|
95
|
+
end
|
96
|
+
|
97
|
+
def rectDrawn(opt, x, y, w, h)
|
98
|
+
if (opt[:on] or 1) == 1
|
99
|
+
x2 = x + w
|
100
|
+
y2 = y + h
|
101
|
+
@maxX = x2 if x2 > @maxX
|
102
|
+
@maxY = y2 if y2 > @maxY
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def prependCanvasCreation(opt)
|
107
|
+
w = opt[:w].nil? ? @maxX : opt[:w]
|
108
|
+
h = opt[:h].nil? ? @maxY : opt[:h]
|
109
|
+
prependCommand "createBlank 1 #{w} #{h}\n"
|
110
|
+
end
|
111
|
+
|
112
|
+
#### Commands
|
113
|
+
|
114
|
+
def createBlank(opt)
|
115
|
+
appendCommand("createBlank #{opt[:id] or 1} #{opt[:w]} #{opt[:h]}\n")
|
116
|
+
end
|
117
|
+
|
118
|
+
def loadImage(opt)
|
119
|
+
id = opt[:id]
|
120
|
+
data = dataFromOpt opt
|
121
|
+
@imageDims[id] = parse_pnm(data)
|
122
|
+
appendCommand("loadImage #{id} #{data.length}\n")
|
123
|
+
appendCommand(data)
|
124
|
+
end
|
125
|
+
|
126
|
+
def loadFont(opt)
|
127
|
+
data = dataFromOpt opt
|
128
|
+
@fonts[opt[:id]] = data
|
129
|
+
appendCommand("loadFont #{opt[:id]} #{data.length}\n")
|
130
|
+
appendCommand(data)
|
131
|
+
end
|
132
|
+
|
133
|
+
def drawImage(opt)
|
134
|
+
x, y = cursorForOpt opt
|
135
|
+
on, id = (opt[:on] or 1), opt[:id]
|
136
|
+
dim = @imageDims[id]
|
137
|
+
w, h = dim[:w], dim[:h]
|
138
|
+
rectDrawn opt, x, y, w, h
|
139
|
+
appendCommand("drawImage #{on} #{x} #{y} #{id}\n")
|
140
|
+
end
|
141
|
+
|
70
142
|
def drawText(opt)
|
71
143
|
data = ascii_to_utf32 opt[:text]
|
72
144
|
|
@@ -91,7 +163,6 @@ class IndieRasterSession
|
|
91
163
|
w = _w
|
92
164
|
end
|
93
165
|
end
|
94
|
-
|
95
166
|
if bestFont
|
96
167
|
h = heightOfFont :font => bestFont
|
97
168
|
opt[:x] = rx + ((rw - w) / 2).round
|
@@ -103,18 +174,25 @@ class IndieRasterSession
|
|
103
174
|
end
|
104
175
|
|
105
176
|
if opt[:toLeftOf]
|
106
|
-
opt[:x] = opt[:toLeftOf] -
|
177
|
+
opt[:x] = opt[:toLeftOf] - widthOfText(opt)
|
107
178
|
end
|
108
|
-
@c.push "drawText #{opt[:on] or 1} #{opt[:x]} #{opt[:y]} #{opt[:font]} #{data.length / 4}\n"
|
109
|
-
@c.push data
|
110
|
-
end
|
111
179
|
|
112
|
-
|
113
|
-
|
180
|
+
x, y = cursorForOpt opt
|
181
|
+
w = widthOfText :text => opt[:text], :font => opt[:font]
|
182
|
+
h = heightOfFont opt
|
183
|
+
rectDrawn opt, x, y, w, h
|
184
|
+
|
185
|
+
appendCommand("drawText #{opt[:on] or 1} #{x} #{y} #{opt[:font]} #{data.length / 4}\n" + data)
|
114
186
|
end
|
115
187
|
|
116
|
-
def
|
117
|
-
|
188
|
+
def drawUPC(opt)
|
189
|
+
on = opt[:on] or 1
|
190
|
+
x, y = cursorForOpt opt
|
191
|
+
w = opt[:w]
|
192
|
+
h = opt[:h] + opt[:guard_bar_extra_h]
|
193
|
+
rectDrawn opt, x, y, w, h
|
194
|
+
|
195
|
+
appendCommand("drawUPC #{on} #{x} #{y} #{opt[:digits]} #{opt[:w]} #{opt[:h]} #{opt[:guard_bar_extra_h] or 0} #{opt[:middle_font] or 0} #{opt[:side_font] or 0}\n")
|
118
196
|
end
|
119
197
|
|
120
198
|
def exportP4(opt = {})
|
@@ -127,7 +205,7 @@ class IndieRasterSession
|
|
127
205
|
|
128
206
|
def export(command, opt)
|
129
207
|
|
130
|
-
input =
|
208
|
+
input = commandsData + "#{command} #{opt[:id] or 1}\n"
|
131
209
|
|
132
210
|
tmppath = opt[:commands_temp_path]
|
133
211
|
if tmppath
|
@@ -150,11 +228,11 @@ class IndieRasterSession
|
|
150
228
|
return out
|
151
229
|
end
|
152
230
|
|
153
|
-
|
231
|
+
#### TODO: refactor
|
154
232
|
def parse_pnm(data)
|
155
233
|
# assumes standard whitespace
|
156
234
|
|
157
|
-
if (data[
|
235
|
+
if (data[1] == "1" or data[1] == 0x31) or (data[1] == "4" or data[1] == 0x34)
|
158
236
|
num_breaks_expected = 2
|
159
237
|
regex = /P[14]\n([0-9]+) ([0-9]+)\n/
|
160
238
|
else
|
data/test/expected.pbm
CHANGED
Binary file
|