xref: /plan9/sys/src/cmd/postscript/psencoding/UTF.enc (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier%
2*219b2ee8SDavid du Colombier% Encoding vector, operator and procedure redefinitions for Plan 9 UTF
3*219b2ee8SDavid du Colombier% encoding. Prologues are expected to take steps to ensure operator
4*219b2ee8SDavid du Colombier% redefinitions given here are actually used. Current implementation
5*219b2ee8SDavid du Colombier% assumes UTF byte streams that represent ASCII or Latin1 text.
6*219b2ee8SDavid du Colombier%
7*219b2ee8SDavid du Colombier
8*219b2ee8SDavid du Colombier/UTFLatin1Encoding [
9*219b2ee8SDavid du Colombier	/.notdef
10*219b2ee8SDavid du Colombier	/.notdef
11*219b2ee8SDavid du Colombier	/.notdef
12*219b2ee8SDavid du Colombier	/.notdef
13*219b2ee8SDavid du Colombier	/.notdef
14*219b2ee8SDavid du Colombier	/.notdef
15*219b2ee8SDavid du Colombier	/.notdef
16*219b2ee8SDavid du Colombier	/.notdef
17*219b2ee8SDavid du Colombier	/.notdef
18*219b2ee8SDavid du Colombier	/.notdef
19*219b2ee8SDavid du Colombier	/.notdef
20*219b2ee8SDavid du Colombier	/.notdef
21*219b2ee8SDavid du Colombier	/.notdef
22*219b2ee8SDavid du Colombier	/.notdef
23*219b2ee8SDavid du Colombier	/.notdef
24*219b2ee8SDavid du Colombier	/.notdef
25*219b2ee8SDavid du Colombier	/.notdef
26*219b2ee8SDavid du Colombier	/.notdef
27*219b2ee8SDavid du Colombier	/.notdef
28*219b2ee8SDavid du Colombier	/.notdef
29*219b2ee8SDavid du Colombier	/.notdef
30*219b2ee8SDavid du Colombier	/.notdef
31*219b2ee8SDavid du Colombier	/.notdef
32*219b2ee8SDavid du Colombier	/.notdef
33*219b2ee8SDavid du Colombier	/.notdef
34*219b2ee8SDavid du Colombier	/.notdef
35*219b2ee8SDavid du Colombier	/.notdef
36*219b2ee8SDavid du Colombier	/.notdef
37*219b2ee8SDavid du Colombier	/.notdef
38*219b2ee8SDavid du Colombier	/.notdef
39*219b2ee8SDavid du Colombier	/.notdef
40*219b2ee8SDavid du Colombier	/.notdef
41*219b2ee8SDavid du Colombier	/space
42*219b2ee8SDavid du Colombier	/exclam
43*219b2ee8SDavid du Colombier	/quotedbl
44*219b2ee8SDavid du Colombier	/numbersign
45*219b2ee8SDavid du Colombier	/dollar
46*219b2ee8SDavid du Colombier	/percent
47*219b2ee8SDavid du Colombier	/ampersand
48*219b2ee8SDavid du Colombier	/quoteright
49*219b2ee8SDavid du Colombier	/parenleft
50*219b2ee8SDavid du Colombier	/parenright
51*219b2ee8SDavid du Colombier	/asterisk
52*219b2ee8SDavid du Colombier	/plus
53*219b2ee8SDavid du Colombier	/comma
54*219b2ee8SDavid du Colombier	/minus
55*219b2ee8SDavid du Colombier	/period
56*219b2ee8SDavid du Colombier	/slash
57*219b2ee8SDavid du Colombier	/zero
58*219b2ee8SDavid du Colombier	/one
59*219b2ee8SDavid du Colombier	/two
60*219b2ee8SDavid du Colombier	/three
61*219b2ee8SDavid du Colombier	/four
62*219b2ee8SDavid du Colombier	/five
63*219b2ee8SDavid du Colombier	/six
64*219b2ee8SDavid du Colombier	/seven
65*219b2ee8SDavid du Colombier	/eight
66*219b2ee8SDavid du Colombier	/nine
67*219b2ee8SDavid du Colombier	/colon
68*219b2ee8SDavid du Colombier	/semicolon
69*219b2ee8SDavid du Colombier	/less
70*219b2ee8SDavid du Colombier	/equal
71*219b2ee8SDavid du Colombier	/greater
72*219b2ee8SDavid du Colombier	/question
73*219b2ee8SDavid du Colombier	/at
74*219b2ee8SDavid du Colombier	/A
75*219b2ee8SDavid du Colombier	/B
76*219b2ee8SDavid du Colombier	/C
77*219b2ee8SDavid du Colombier	/D
78*219b2ee8SDavid du Colombier	/E
79*219b2ee8SDavid du Colombier	/F
80*219b2ee8SDavid du Colombier	/G
81*219b2ee8SDavid du Colombier	/H
82*219b2ee8SDavid du Colombier	/I
83*219b2ee8SDavid du Colombier	/J
84*219b2ee8SDavid du Colombier	/K
85*219b2ee8SDavid du Colombier	/L
86*219b2ee8SDavid du Colombier	/M
87*219b2ee8SDavid du Colombier	/N
88*219b2ee8SDavid du Colombier	/O
89*219b2ee8SDavid du Colombier	/P
90*219b2ee8SDavid du Colombier	/Q
91*219b2ee8SDavid du Colombier	/R
92*219b2ee8SDavid du Colombier	/S
93*219b2ee8SDavid du Colombier	/T
94*219b2ee8SDavid du Colombier	/U
95*219b2ee8SDavid du Colombier	/V
96*219b2ee8SDavid du Colombier	/W
97*219b2ee8SDavid du Colombier	/X
98*219b2ee8SDavid du Colombier	/Y
99*219b2ee8SDavid du Colombier	/Z
100*219b2ee8SDavid du Colombier	/bracketleft
101*219b2ee8SDavid du Colombier	/backslash
102*219b2ee8SDavid du Colombier	/bracketright
103*219b2ee8SDavid du Colombier	/asciicircum
104*219b2ee8SDavid du Colombier	/underscore
105*219b2ee8SDavid du Colombier	/quoteleft
106*219b2ee8SDavid du Colombier	/a
107*219b2ee8SDavid du Colombier	/b
108*219b2ee8SDavid du Colombier	/c
109*219b2ee8SDavid du Colombier	/d
110*219b2ee8SDavid du Colombier	/e
111*219b2ee8SDavid du Colombier	/f
112*219b2ee8SDavid du Colombier	/g
113*219b2ee8SDavid du Colombier	/h
114*219b2ee8SDavid du Colombier	/i
115*219b2ee8SDavid du Colombier	/j
116*219b2ee8SDavid du Colombier	/k
117*219b2ee8SDavid du Colombier	/l
118*219b2ee8SDavid du Colombier	/m
119*219b2ee8SDavid du Colombier	/n
120*219b2ee8SDavid du Colombier	/o
121*219b2ee8SDavid du Colombier	/p
122*219b2ee8SDavid du Colombier	/q
123*219b2ee8SDavid du Colombier	/r
124*219b2ee8SDavid du Colombier	/s
125*219b2ee8SDavid du Colombier	/t
126*219b2ee8SDavid du Colombier	/u
127*219b2ee8SDavid du Colombier	/v
128*219b2ee8SDavid du Colombier	/w
129*219b2ee8SDavid du Colombier	/x
130*219b2ee8SDavid du Colombier	/y
131*219b2ee8SDavid du Colombier	/z
132*219b2ee8SDavid du Colombier	/braceleft
133*219b2ee8SDavid du Colombier	/bar
134*219b2ee8SDavid du Colombier	/braceright
135*219b2ee8SDavid du Colombier	/asciitilde
136*219b2ee8SDavid du Colombier	/.notdef
137*219b2ee8SDavid du Colombier	/.notdef
138*219b2ee8SDavid du Colombier	/.notdef
139*219b2ee8SDavid du Colombier	/.notdef
140*219b2ee8SDavid du Colombier	/.notdef
141*219b2ee8SDavid du Colombier	/.notdef
142*219b2ee8SDavid du Colombier	/.notdef
143*219b2ee8SDavid du Colombier	/.notdef
144*219b2ee8SDavid du Colombier	/.notdef
145*219b2ee8SDavid du Colombier	/.notdef
146*219b2ee8SDavid du Colombier	/.notdef
147*219b2ee8SDavid du Colombier	/.notdef
148*219b2ee8SDavid du Colombier	/.notdef
149*219b2ee8SDavid du Colombier	/.notdef
150*219b2ee8SDavid du Colombier	/.notdef
151*219b2ee8SDavid du Colombier	/.notdef
152*219b2ee8SDavid du Colombier	/.notdef
153*219b2ee8SDavid du Colombier	/dotlessi
154*219b2ee8SDavid du Colombier	/grave
155*219b2ee8SDavid du Colombier	/acute
156*219b2ee8SDavid du Colombier	/circumflex
157*219b2ee8SDavid du Colombier	/tilde
158*219b2ee8SDavid du Colombier	/macron
159*219b2ee8SDavid du Colombier	/breve
160*219b2ee8SDavid du Colombier	/dotaccent
161*219b2ee8SDavid du Colombier	/dieresis
162*219b2ee8SDavid du Colombier	/.notdef
163*219b2ee8SDavid du Colombier	/ring
164*219b2ee8SDavid du Colombier	/cedilla
165*219b2ee8SDavid du Colombier	/.notdef
166*219b2ee8SDavid du Colombier	/hungarumlaut
167*219b2ee8SDavid du Colombier	/ogonek
168*219b2ee8SDavid du Colombier	/caron
169*219b2ee8SDavid du Colombier	/.notdef		% was space
170*219b2ee8SDavid du Colombier	/exclamdown
171*219b2ee8SDavid du Colombier	/cent
172*219b2ee8SDavid du Colombier	/sterling
173*219b2ee8SDavid du Colombier	/currency
174*219b2ee8SDavid du Colombier	/yen
175*219b2ee8SDavid du Colombier	/brokenbar
176*219b2ee8SDavid du Colombier	/section
177*219b2ee8SDavid du Colombier	/dieresis
178*219b2ee8SDavid du Colombier	/copyright
179*219b2ee8SDavid du Colombier	/ordfeminine
180*219b2ee8SDavid du Colombier	/guillemotleft
181*219b2ee8SDavid du Colombier	/logicalnot
182*219b2ee8SDavid du Colombier	/hyphen
183*219b2ee8SDavid du Colombier	/registered
184*219b2ee8SDavid du Colombier	/macron
185*219b2ee8SDavid du Colombier	/degree
186*219b2ee8SDavid du Colombier	/plusminus
187*219b2ee8SDavid du Colombier	/twosuperior
188*219b2ee8SDavid du Colombier	/threesuperior
189*219b2ee8SDavid du Colombier	/acute
190*219b2ee8SDavid du Colombier	/mu
191*219b2ee8SDavid du Colombier	/paragraph
192*219b2ee8SDavid du Colombier	/periodcentered
193*219b2ee8SDavid du Colombier	/cedilla
194*219b2ee8SDavid du Colombier	/onesuperior
195*219b2ee8SDavid du Colombier	/ordmasculine
196*219b2ee8SDavid du Colombier	/guillemotright
197*219b2ee8SDavid du Colombier	/onequarter
198*219b2ee8SDavid du Colombier	/onehalf
199*219b2ee8SDavid du Colombier	/threequarters
200*219b2ee8SDavid du Colombier	/questiondown
201*219b2ee8SDavid du Colombier	/Agrave
202*219b2ee8SDavid du Colombier	/Aacute
203*219b2ee8SDavid du Colombier	/Acircumflex
204*219b2ee8SDavid du Colombier	/Atilde
205*219b2ee8SDavid du Colombier	/Adieresis
206*219b2ee8SDavid du Colombier	/Aring
207*219b2ee8SDavid du Colombier	/AE
208*219b2ee8SDavid du Colombier	/Ccedilla
209*219b2ee8SDavid du Colombier	/Egrave
210*219b2ee8SDavid du Colombier	/Eacute
211*219b2ee8SDavid du Colombier	/Ecircumflex
212*219b2ee8SDavid du Colombier	/Edieresis
213*219b2ee8SDavid du Colombier	/Igrave
214*219b2ee8SDavid du Colombier	/Iacute
215*219b2ee8SDavid du Colombier	/Icircumflex
216*219b2ee8SDavid du Colombier	/Idieresis
217*219b2ee8SDavid du Colombier	/Eth
218*219b2ee8SDavid du Colombier	/Ntilde
219*219b2ee8SDavid du Colombier	/Ograve
220*219b2ee8SDavid du Colombier	/Oacute
221*219b2ee8SDavid du Colombier	/Ocircumflex
222*219b2ee8SDavid du Colombier	/Otilde
223*219b2ee8SDavid du Colombier	/Odieresis
224*219b2ee8SDavid du Colombier	/multiply
225*219b2ee8SDavid du Colombier	/Oslash
226*219b2ee8SDavid du Colombier	/Ugrave
227*219b2ee8SDavid du Colombier	/Uacute
228*219b2ee8SDavid du Colombier	/Ucircumflex
229*219b2ee8SDavid du Colombier	/Udieresis
230*219b2ee8SDavid du Colombier	/Yacute
231*219b2ee8SDavid du Colombier	/Thorn
232*219b2ee8SDavid du Colombier	/germandbls
233*219b2ee8SDavid du Colombier	/agrave
234*219b2ee8SDavid du Colombier	/aacute
235*219b2ee8SDavid du Colombier	/acircumflex
236*219b2ee8SDavid du Colombier	/atilde
237*219b2ee8SDavid du Colombier	/adieresis
238*219b2ee8SDavid du Colombier	/aring
239*219b2ee8SDavid du Colombier	/ae
240*219b2ee8SDavid du Colombier	/ccedilla
241*219b2ee8SDavid du Colombier	/egrave
242*219b2ee8SDavid du Colombier	/eacute
243*219b2ee8SDavid du Colombier	/ecircumflex
244*219b2ee8SDavid du Colombier	/edieresis
245*219b2ee8SDavid du Colombier	/igrave
246*219b2ee8SDavid du Colombier	/iacute
247*219b2ee8SDavid du Colombier	/icircumflex
248*219b2ee8SDavid du Colombier	/idieresis
249*219b2ee8SDavid du Colombier	/eth
250*219b2ee8SDavid du Colombier	/ntilde
251*219b2ee8SDavid du Colombier	/ograve
252*219b2ee8SDavid du Colombier	/oacute
253*219b2ee8SDavid du Colombier	/ocircumflex
254*219b2ee8SDavid du Colombier	/otilde
255*219b2ee8SDavid du Colombier	/odieresis
256*219b2ee8SDavid du Colombier	/divide
257*219b2ee8SDavid du Colombier	/oslash
258*219b2ee8SDavid du Colombier	/ugrave
259*219b2ee8SDavid du Colombier	/uacute
260*219b2ee8SDavid du Colombier	/ucircumflex
261*219b2ee8SDavid du Colombier	/udieresis
262*219b2ee8SDavid du Colombier	/yacute
263*219b2ee8SDavid du Colombier	/thorn
264*219b2ee8SDavid du Colombier	/ydieresis
265*219b2ee8SDavid du Colombier] def
266*219b2ee8SDavid du Colombier
267*219b2ee8SDavid du Colombier/NewFontDirectory FontDirectory maxlength dict def
268*219b2ee8SDavid du Colombier
269*219b2ee8SDavid du Colombier%
270*219b2ee8SDavid du Colombier% Apparently no guarantee findfont is defined in systemdict so the obvious
271*219b2ee8SDavid du Colombier%
272*219b2ee8SDavid du Colombier%	systemdict /findfont get exec
273*219b2ee8SDavid du Colombier%
274*219b2ee8SDavid du Colombier% can generate an error. So far the only exception is a VT600 (version 48.0).
275*219b2ee8SDavid du Colombier%
276*219b2ee8SDavid du Colombier
277*219b2ee8SDavid du Colombieruserdict /@RealFindfont known not {
278*219b2ee8SDavid du Colombier	userdict begin
279*219b2ee8SDavid du Colombier		/@RealFindfont systemdict begin /findfont load end def
280*219b2ee8SDavid du Colombier	end
281*219b2ee8SDavid du Colombier} if
282*219b2ee8SDavid du Colombier
283*219b2ee8SDavid du Colombier/findfont {
284*219b2ee8SDavid du Colombier	dup NewFontDirectory exch known not {
285*219b2ee8SDavid du Colombier		dup
286*219b2ee8SDavid du Colombier		%dup systemdict /findfont get exec	% not always in systemdict
287*219b2ee8SDavid du Colombier		dup userdict /@RealFindfont get exec
288*219b2ee8SDavid du Colombier		dup /Encoding get StandardEncoding eq {
289*219b2ee8SDavid du Colombier			dup length 1 add dict begin
290*219b2ee8SDavid du Colombier				{1 index /FID ne {def}{pop pop} ifelse} forall
291*219b2ee8SDavid du Colombier				/Encoding UTFLatin1Encoding def
292*219b2ee8SDavid du Colombier				/Metrics 1 dict def
293*219b2ee8SDavid du Colombier				Metrics /.notdef 0 put
294*219b2ee8SDavid du Colombier				currentdict
295*219b2ee8SDavid du Colombier			end
296*219b2ee8SDavid du Colombier			/DummyFontName exch definefont
297*219b2ee8SDavid du Colombier		} if
298*219b2ee8SDavid du Colombier		NewFontDirectory 3 1 roll put
299*219b2ee8SDavid du Colombier	} if
300*219b2ee8SDavid du Colombier	NewFontDirectory exch get
301*219b2ee8SDavid du Colombier} bind def
302*219b2ee8SDavid du Colombier
303*219b2ee8SDavid du Colombier%
304*219b2ee8SDavid du Colombier% Assume A0, except for A0A0 which is replaced by 20A0, can be ignored.
305*219b2ee8SDavid du Colombier% Works with ASCII or Latin1 because A0 has been re-encoded as a zero
306*219b2ee8SDavid du Colombier% width non-printing character.
307*219b2ee8SDavid du Colombier%
308*219b2ee8SDavid du Colombier
309*219b2ee8SDavid du Colombier/UTFstring {
310*219b2ee8SDavid du Colombier	dup {
311*219b2ee8SDavid du Colombier		(\240\240) search {
312*219b2ee8SDavid du Colombier			pop
313*219b2ee8SDavid du Colombier			0 16#20 put
314*219b2ee8SDavid du Colombier		}{pop exit} ifelse
315*219b2ee8SDavid du Colombier	} loop
316*219b2ee8SDavid du Colombier} bind def
317*219b2ee8SDavid du Colombier
318*219b2ee8SDavid du Colombier/ashow {mark 4 1 roll UTFstring //ashow cvx exec cleartomark} bind def
319*219b2ee8SDavid du Colombier/awidthshow {mark 7 1 roll UTFstring //awidthshow cvx exec cleartomark} bind def
320*219b2ee8SDavid du Colombier/show {mark exch UTFstring //show cvx exec cleartomark} bind def
321*219b2ee8SDavid du Colombier/stringwidth {UTFstring //stringwidth cvx exec} bind def
322*219b2ee8SDavid du Colombier/widthshow {mark 5 1 roll UTFstring //widthshow cvx exec cleartomark} bind def
323*219b2ee8SDavid du Colombier
324*219b2ee8SDavid du Colombier%
325*219b2ee8SDavid du Colombier% kshow is harder - stack can't change because of the procedure.
326*219b2ee8SDavid du Colombier%
327*219b2ee8SDavid du Colombier
328*219b2ee8SDavid du Colombier/kshow dup load type /operatortype eq
329*219b2ee8SDavid du Colombier	{{UTFstring kshow} bind}
330*219b2ee8SDavid du Colombier	{{UTFstring //kshow cvx exec} bind}
331*219b2ee8SDavid du Colombierifelse def
332*219b2ee8SDavid du Colombier
333