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