2 13f7391e 2004-05-15 devnull % Encoding vector, operator and procedure redefinitions for Plan 9 UTF
3 13f7391e 2004-05-15 devnull % encoding. Prologues are expected to take steps to ensure operator
4 13f7391e 2004-05-15 devnull % redefinitions given here are actually used. Current implementation
5 13f7391e 2004-05-15 devnull % assumes UTF byte streams that represent ASCII or Latin1 text.
8 13f7391e 2004-05-15 devnull /UTFLatin1Encoding [
43 13f7391e 2004-05-15 devnull /quotedbl
44 13f7391e 2004-05-15 devnull /numbersign
47 13f7391e 2004-05-15 devnull /ampersand
48 13f7391e 2004-05-15 devnull /quoteright
49 13f7391e 2004-05-15 devnull /parenleft
50 13f7391e 2004-05-15 devnull /parenright
51 13f7391e 2004-05-15 devnull /asterisk
68 13f7391e 2004-05-15 devnull /semicolon
72 13f7391e 2004-05-15 devnull /question
100 13f7391e 2004-05-15 devnull /bracketleft
101 13f7391e 2004-05-15 devnull /backslash
102 13f7391e 2004-05-15 devnull /bracketright
103 13f7391e 2004-05-15 devnull /asciicircum
104 13f7391e 2004-05-15 devnull /underscore
105 13f7391e 2004-05-15 devnull /quoteleft
132 13f7391e 2004-05-15 devnull /braceleft
134 13f7391e 2004-05-15 devnull /braceright
135 13f7391e 2004-05-15 devnull /asciitilde
136 13f7391e 2004-05-15 devnull /.notdef
137 13f7391e 2004-05-15 devnull /.notdef
138 13f7391e 2004-05-15 devnull /.notdef
139 13f7391e 2004-05-15 devnull /.notdef
140 13f7391e 2004-05-15 devnull /.notdef
141 13f7391e 2004-05-15 devnull /.notdef
142 13f7391e 2004-05-15 devnull /.notdef
143 13f7391e 2004-05-15 devnull /.notdef
144 13f7391e 2004-05-15 devnull /.notdef
145 13f7391e 2004-05-15 devnull /.notdef
146 13f7391e 2004-05-15 devnull /.notdef
147 13f7391e 2004-05-15 devnull /.notdef
148 13f7391e 2004-05-15 devnull /.notdef
149 13f7391e 2004-05-15 devnull /.notdef
150 13f7391e 2004-05-15 devnull /.notdef
151 13f7391e 2004-05-15 devnull /.notdef
152 13f7391e 2004-05-15 devnull /.notdef
153 13f7391e 2004-05-15 devnull /dotlessi
156 13f7391e 2004-05-15 devnull /circumflex
160 13f7391e 2004-05-15 devnull /dotaccent
161 13f7391e 2004-05-15 devnull /dieresis
162 13f7391e 2004-05-15 devnull /.notdef
164 13f7391e 2004-05-15 devnull /cedilla
165 13f7391e 2004-05-15 devnull /.notdef
166 13f7391e 2004-05-15 devnull /hungarumlaut
170 13f7391e 2004-05-15 devnull /exclamdown
172 13f7391e 2004-05-15 devnull /sterling
173 13f7391e 2004-05-15 devnull /currency
175 13f7391e 2004-05-15 devnull /brokenbar
176 13f7391e 2004-05-15 devnull /section
177 13f7391e 2004-05-15 devnull /dieresis
178 13f7391e 2004-05-15 devnull /copyright
179 13f7391e 2004-05-15 devnull /ordfeminine
180 13f7391e 2004-05-15 devnull /guillemotleft
181 13f7391e 2004-05-15 devnull /logicalnot
183 13f7391e 2004-05-15 devnull /registered
186 13f7391e 2004-05-15 devnull /plusminus
187 13f7391e 2004-05-15 devnull /twosuperior
188 13f7391e 2004-05-15 devnull /threesuperior
191 13f7391e 2004-05-15 devnull /paragraph
192 13f7391e 2004-05-15 devnull /periodcentered
193 13f7391e 2004-05-15 devnull /cedilla
194 13f7391e 2004-05-15 devnull /onesuperior
195 13f7391e 2004-05-15 devnull /ordmasculine
196 13f7391e 2004-05-15 devnull /guillemotright
197 13f7391e 2004-05-15 devnull /onequarter
198 13f7391e 2004-05-15 devnull /onehalf
199 13f7391e 2004-05-15 devnull /threequarters
200 13f7391e 2004-05-15 devnull /questiondown
203 13f7391e 2004-05-15 devnull /Acircumflex
205 13f7391e 2004-05-15 devnull /Adieresis
208 13f7391e 2004-05-15 devnull /Ccedilla
211 13f7391e 2004-05-15 devnull /Ecircumflex
212 13f7391e 2004-05-15 devnull /Edieresis
215 13f7391e 2004-05-15 devnull /Icircumflex
216 13f7391e 2004-05-15 devnull /Idieresis
221 13f7391e 2004-05-15 devnull /Ocircumflex
223 13f7391e 2004-05-15 devnull /Odieresis
224 13f7391e 2004-05-15 devnull /multiply
228 13f7391e 2004-05-15 devnull /Ucircumflex
229 13f7391e 2004-05-15 devnull /Udieresis
232 13f7391e 2004-05-15 devnull /germandbls
235 13f7391e 2004-05-15 devnull /acircumflex
237 13f7391e 2004-05-15 devnull /adieresis
240 13f7391e 2004-05-15 devnull /ccedilla
243 13f7391e 2004-05-15 devnull /ecircumflex
244 13f7391e 2004-05-15 devnull /edieresis
247 13f7391e 2004-05-15 devnull /icircumflex
248 13f7391e 2004-05-15 devnull /idieresis
253 13f7391e 2004-05-15 devnull /ocircumflex
255 13f7391e 2004-05-15 devnull /odieresis
260 13f7391e 2004-05-15 devnull /ucircumflex
261 13f7391e 2004-05-15 devnull /udieresis
264 13f7391e 2004-05-15 devnull /ydieresis
267 13f7391e 2004-05-15 devnull /NewFontDirectory FontDirectory maxlength dict def
270 13f7391e 2004-05-15 devnull % Apparently no guarantee findfont is defined in systemdict so the obvious
272 13f7391e 2004-05-15 devnull % systemdict /findfont get exec
274 13f7391e 2004-05-15 devnull % can generate an error. So far the only exception is a VT600 (version 48.0).
277 13f7391e 2004-05-15 devnull userdict /@RealFindfont known not {
278 13f7391e 2004-05-15 devnull userdict begin
279 13f7391e 2004-05-15 devnull /@RealFindfont systemdict begin /findfont load end def
283 13f7391e 2004-05-15 devnull /findfont {
284 13f7391e 2004-05-15 devnull dup NewFontDirectory exch known not {
286 13f7391e 2004-05-15 devnull %dup systemdict /findfont get exec % not always in systemdict
287 13f7391e 2004-05-15 devnull dup userdict /@RealFindfont get exec
288 13f7391e 2004-05-15 devnull dup /Encoding get StandardEncoding eq {
289 13f7391e 2004-05-15 devnull dup length 1 add dict begin
290 13f7391e 2004-05-15 devnull {1 index /FID ne {def}{pop pop} ifelse} forall
291 13f7391e 2004-05-15 devnull /Encoding UTFLatin1Encoding def
292 13f7391e 2004-05-15 devnull /Metrics 1 dict def
293 13f7391e 2004-05-15 devnull Metrics /.notdef 0 put
294 13f7391e 2004-05-15 devnull currentdict
296 13f7391e 2004-05-15 devnull /DummyFontName exch definefont
298 13f7391e 2004-05-15 devnull NewFontDirectory 3 1 roll put
300 13f7391e 2004-05-15 devnull NewFontDirectory exch get
301 13f7391e 2004-05-15 devnull } bind def
304 13f7391e 2004-05-15 devnull % UTF string decoding for ASCII and Latin1 only:
306 13f7391e 2004-05-15 devnull % C2 XX => 00 XX
307 13f7391e 2004-05-15 devnull % C3 XX => XX+40 00
309 13f7391e 2004-05-15 devnull % Two passes through each string with search is undoubtedly faster than
310 13f7391e 2004-05-15 devnull % PostScript that examines each byte.
313 13f7391e 2004-05-15 devnull /UTFstring {
315 13f7391e 2004-05-15 devnull (\302) search {
318 13f7391e 2004-05-15 devnull }{pop exit} ifelse
321 13f7391e 2004-05-15 devnull (\303) search {
323 13f7391e 2004-05-15 devnull 1 index 0 get 16#40 add 0 exch put
324 13f7391e 2004-05-15 devnull dup length 0 gt {dup 0 0 put} if
325 13f7391e 2004-05-15 devnull }{pop exit} ifelse
327 13f7391e 2004-05-15 devnull } bind def
329 13f7391e 2004-05-15 devnull /ashow {mark 4 1 roll UTFstring //ashow cvx exec cleartomark} bind def
330 13f7391e 2004-05-15 devnull /awidthshow {mark 7 1 roll UTFstring //awidthshow cvx exec cleartomark} bind def
331 13f7391e 2004-05-15 devnull /show {mark exch UTFstring //show cvx exec cleartomark} bind def
332 13f7391e 2004-05-15 devnull /stringwidth {UTFstring //stringwidth cvx exec} bind def
333 13f7391e 2004-05-15 devnull /widthshow {mark 5 1 roll UTFstring //widthshow cvx exec cleartomark} bind def
336 13f7391e 2004-05-15 devnull % kshow is harder - stack can't change because of the procedure.
339 13f7391e 2004-05-15 devnull /kshow dup load type /operatortype eq
340 13f7391e 2004-05-15 devnull {{UTFstring kshow} bind}
341 13f7391e 2004-05-15 devnull {{UTFstring //kshow cvx exec} bind}
342 13f7391e 2004-05-15 devnull ifelse def