1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31\startMPcalculation{simplefun}
32
33 picture PunkShapes[][];
34
35 numeric PunkId ; PunkId := 0 ;
36 numeric PunkBase ; PunkBase := 0 ;
37 string PunkName ; PunkName := "punk" ;
38 numeric PunkUsed ; PunkUsed := 0 ;
39 numeric PunkSlant ; PunkSlant := 0 ;
40 numeric PunkWeight ; PunkWeight := 1 ;
41 numeric PunkSqueeze ; PunkSqueeze := 1 ;
42 numeric PunkExtend ; PunkExtend := 1 ;
43 numeric PunkVariants ; PunkVariants := 0 ;
44
45 numeric PunkRatio ; PunkRatio := 23 ;
46 numeric PunkScale ; PunkScale := 20 ;
47 numeric PunkN ; PunkN := 0 ;
48
49 def beginpunkchar(expr c, n, hor, ver) =
50 begingroup ;
51 save uc, w, h, d, hdev, vdev ;
52 hdev := hor dev ;
53 vdev := ver dev ;
54 uc := if string c : utfnum(c) else : c fi ;
55 h := if PunkScale > 0 : PunkN else : n fi PunkSqueeze ;
56 w := n PunkExtend ;
57 d := 0 ;
58 clearxy ;
59 clearit ;
60 enddef ;
61
62 def endpunkchar =
63 if PunkSlant <> 0 :
64 currentpicture := currentpicture slanted PunkSlant ;
65 fi ;
66 save llx, lly, uly ;
67 llx := xpart llcorner currentpicture ;
68 lly := ypart llcorner currentpicture ;
69 uly := ypart ulcorner currentpicture ;
70
71 currentpicture := currentpicture shifted ( llx 1, 0);
72 w := bbwidth(currentpicture) 2 ;
73 h := uly ;
74 d := if lly < 0 : lly else : 0 fi ;
75
76 PunkUsed := if PunkBase > 0 : PunkBase else : uc fi;
77 PunkShapes[PunkId][PunkUsed] := currentpicture ;
78 lmt_registerglyph [
79 category = PunkName,
80 unicode = PunkUsed,
81 tounicode = uc,
82 width = w,
83 height = h,
84 depth = d,
85 code = "draw PunkShapes[" & decimal PunkId & "][" & decimal PunkUsed & "]",
86 ] ;
87 if PunkBase > 0 :
88 PunkBase := PunkBase 1 ;
89 fi ;
90 endgroup ;
91 enddef ;
92
93 def initialize_punk_upper =
94 PunkN := PunkScale ;
95 dev := 1 ;
96 enddef ;
97
98 def initialize_punk_lower =
99 PunkN := PunkScale PunkRatio ;
100 dev := .5 ;
101 enddef ;
102
103 def revert_punk_lower =
104 PunkN := PunkScale ;
105 dev := 1 ;
106 enddef ;
107
108 def beginpunkfont =
109
110 begingroup ;
111
112 save dev;
113
114 save u ; u := 1 ;
115
116 PunkBase := 0 ;
117
118 pen linepen ; linepen := pencircle scaled (PunkWeight u) ;
119 pen dotpen ; dotpen := linepen scaled 2 slanted PunkSlant ;
120
121 pickup linepen ;
122
123 save pp ; vardef pp expr z =
124 z (hdev normaldeviate, vdev normaldeviate)
125 enddef ;
126
127 save pd ; def pd expr z =
128 drawdot z withpen dotpen ;
129 enddef ;
130
131 PunkId := PunkId 1 ;
132
133 lmt_registerglyphs [
134 name = PunkName,
135 units = 25,
136 width = 25,
137 height = 25,
138 depth = 0,
139 usecolor = true,
140 ] ;
141
142 def endchar = endpunkchar enddef ;
143
144 enddef ;
145
146 def endpunkfont =
147 endgroup;
148 enddef ;
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176 def punkpreroll =
177 begingroup ;
178 save PunkName, PunkFileName, PunkSlant, PunkWeight, PunkSqueeze, PunkExtend, PunkVariants ;
179 string PunkName, PunkFileName ;
180 PunkName := getparameterdefault "mpsfont" "name" "punk" ;
181 PunkFileName := getparameterdefault "mpsfont" "filename" "punkfont-characters.mp" ;
182 PunkSlant := scantokens(getparameterdefault "mpsfont" "slant" "0") ;
183 PunkWeight := scantokens(getparameterdefault "mpsfont" "weight" "1") ;
184 PunkSqueeze := scantokens(getparameterdefault "mpsfont" "squeeze" "1") ;
185 PunkExtend := scantokens(getparameterdefault "mpsfont" "extend" "1") ;
186 PunkVariants := scantokens(getparameterdefault "mpsfont" "variants" "0");
187 beginpunkfont ;
188 loadfile(PunkFileName) ;
189 if PunkVariants > 0 :
190 PunkBase := 57344 ;
191 for i=1 upto PunkVariants :
192 loadfile(PunkFileName) ;
193 endfor ;
194 fi ;
195 endpunkfont ;
196 endgroup ;
197 enddef ;
198
199\stopMPcalculation
200
201
202
203\permanent\protected\def\enablerandomvariants{\setcharactercasing[randomvariant]}
204\permanent\protected\def\randomvariants {\groupedcommand\enablerandomvariants\donothing}
205\permanent\protected\def\startrandomvariants {\begingroup\enablerandomvariants}
206\permanent\protected\def\stoprandomvariants {\endgroup}
207
208\definefontfeature [punk] [metapost={category=punk,preroll=punkpreroll}]
209\definefontfeature [punkrandom] [metapost={category=punk,preroll=punkpreroll,variants=10}]
210\definefontfeature [punkbold] [metapost={category=punk,preroll=punkpreroll,weight=2}]
211\definefontfeature [punkslanted] [metapost={category=punk,preroll=punkpreroll,slant=.15}]
212\definefontfeature [punkboldslanted] [metapost={category=punk,preroll=punkpreroll,slant=.15,weight=2}]
213\definefontfeature [punkveryslanted] [metapost={category=punk,preroll=punkpreroll,slant=.15}]
214\definefontfeature [punksqueezed] [metapost={category=punk,preroll=punkpreroll,squeeze=.5}]
215\definefontfeature [punkextended] [metapost={category=punk,preroll=punkpreroll,extend=1.3}]
216
217\continueifinputfile{metaimppunk.mkxl}
218
219
220
221
222
223
224
225
226
227
228
229
230
231\setupbodyfont[dejavu]
232
233\definefont[PunkA][Serif*punk]
234\definefont[PunkB][Serif*punkbold]
235\definefont[PunkC][Serif*punkslanted]
236\definefont[PunkD][Serif*punkboldslanted]
237\definefont[PunkE][Serif*punkveryslanted]
238\definefont[PunkF][Serif*punkrandom]
239\definefont[PunkG][Serif*punksqueezed]
240\definefont[PunkH][Serif*punkextended]
241
242\starttext
243
244\startTEXpage[offset=10pt,width=30cm]
245
246 {\darkcyan \PunkA \samplefile{tufte} \par}
247 {\darkmagenta \PunkB \samplefile{tufte} \par}
248 {\darkred \PunkC \samplefile{tufte} \par}
249 {\darkgreen \PunkD \samplefile{tufte} \par}
250 {\darkblue \PunkE \samplefile{tufte} \par}
251 {\darkyellow \PunkF \enablerandomvariants \samplefile{tufte} \par}
252 {\darkgray \PunkG \samplefile{tufte} \par}
253 {\darkorange \PunkH \samplefile{tufte} \par}
254\stopTEXpage
255
256\startTEXpage[offset=10pt,width=20cm]
257 \PunkF \enablerandomvariants
258 \dostepwiserecurse{1}{2000}{1}{\glyphscale#1\relax f }
259\stopTEXpage
260
261
262
263\setupbodyfont[punk]
264
265\startTEXpage[offset=10pt,width=20cm]
266 {\darkcyan \tf \samplefile{zapf} \par}
267 {\darkmagenta \bf \samplefile{zapf} \par}
268 {\darkred \sl \samplefile{zapf} \par}
269 {\darkgreen \bs \samplefile{zapf} \par}
270\stopTEXpage
271
272\stoptext
273 |