xref: /plan9/sys/lib/postscript/prologues/UTF.enc (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier%
23e12c5d1SDavid du Colombier% Encoding vector, operator and procedure redefinitions for Plan 9 UTF
33e12c5d1SDavid du Colombier% encoding. Prologues are expected to take steps to ensure operator
43e12c5d1SDavid du Colombier% redefinitions given here are actually used. Current implementation
53e12c5d1SDavid du Colombier% assumes UTF byte streams that represent ASCII or Latin1 text.
63e12c5d1SDavid du Colombier%
73e12c5d1SDavid du Colombier
83e12c5d1SDavid du Colombier/UTFLatin1Encoding [
93e12c5d1SDavid du Colombier	/.notdef
103e12c5d1SDavid du Colombier	/.notdef
113e12c5d1SDavid du Colombier	/.notdef
123e12c5d1SDavid du Colombier	/.notdef
133e12c5d1SDavid du Colombier	/.notdef
143e12c5d1SDavid du Colombier	/.notdef
153e12c5d1SDavid du Colombier	/.notdef
163e12c5d1SDavid du Colombier	/.notdef
173e12c5d1SDavid du Colombier	/.notdef
183e12c5d1SDavid du Colombier	/.notdef
193e12c5d1SDavid du Colombier	/.notdef
203e12c5d1SDavid du Colombier	/.notdef
213e12c5d1SDavid du Colombier	/.notdef
223e12c5d1SDavid du Colombier	/.notdef
233e12c5d1SDavid du Colombier	/.notdef
243e12c5d1SDavid du Colombier	/.notdef
253e12c5d1SDavid du Colombier	/.notdef
263e12c5d1SDavid du Colombier	/.notdef
273e12c5d1SDavid du Colombier	/.notdef
283e12c5d1SDavid du Colombier	/.notdef
293e12c5d1SDavid du Colombier	/.notdef
303e12c5d1SDavid du Colombier	/.notdef
313e12c5d1SDavid du Colombier	/.notdef
323e12c5d1SDavid du Colombier	/.notdef
333e12c5d1SDavid du Colombier	/.notdef
343e12c5d1SDavid du Colombier	/.notdef
353e12c5d1SDavid du Colombier	/.notdef
363e12c5d1SDavid du Colombier	/.notdef
373e12c5d1SDavid du Colombier	/.notdef
383e12c5d1SDavid du Colombier	/.notdef
393e12c5d1SDavid du Colombier	/.notdef
403e12c5d1SDavid du Colombier	/.notdef
413e12c5d1SDavid du Colombier	/space
423e12c5d1SDavid du Colombier	/exclam
433e12c5d1SDavid du Colombier	/quotedbl
443e12c5d1SDavid du Colombier	/numbersign
453e12c5d1SDavid du Colombier	/dollar
463e12c5d1SDavid du Colombier	/percent
473e12c5d1SDavid du Colombier	/ampersand
483e12c5d1SDavid du Colombier	/quoteright
493e12c5d1SDavid du Colombier	/parenleft
503e12c5d1SDavid du Colombier	/parenright
513e12c5d1SDavid du Colombier	/asterisk
523e12c5d1SDavid du Colombier	/plus
533e12c5d1SDavid du Colombier	/comma
543e12c5d1SDavid du Colombier	/minus
553e12c5d1SDavid du Colombier	/period
563e12c5d1SDavid du Colombier	/slash
573e12c5d1SDavid du Colombier	/zero
583e12c5d1SDavid du Colombier	/one
593e12c5d1SDavid du Colombier	/two
603e12c5d1SDavid du Colombier	/three
613e12c5d1SDavid du Colombier	/four
623e12c5d1SDavid du Colombier	/five
633e12c5d1SDavid du Colombier	/six
643e12c5d1SDavid du Colombier	/seven
653e12c5d1SDavid du Colombier	/eight
663e12c5d1SDavid du Colombier	/nine
673e12c5d1SDavid du Colombier	/colon
683e12c5d1SDavid du Colombier	/semicolon
693e12c5d1SDavid du Colombier	/less
703e12c5d1SDavid du Colombier	/equal
713e12c5d1SDavid du Colombier	/greater
723e12c5d1SDavid du Colombier	/question
733e12c5d1SDavid du Colombier	/at
743e12c5d1SDavid du Colombier	/A
753e12c5d1SDavid du Colombier	/B
763e12c5d1SDavid du Colombier	/C
773e12c5d1SDavid du Colombier	/D
783e12c5d1SDavid du Colombier	/E
793e12c5d1SDavid du Colombier	/F
803e12c5d1SDavid du Colombier	/G
813e12c5d1SDavid du Colombier	/H
823e12c5d1SDavid du Colombier	/I
833e12c5d1SDavid du Colombier	/J
843e12c5d1SDavid du Colombier	/K
853e12c5d1SDavid du Colombier	/L
863e12c5d1SDavid du Colombier	/M
873e12c5d1SDavid du Colombier	/N
883e12c5d1SDavid du Colombier	/O
893e12c5d1SDavid du Colombier	/P
903e12c5d1SDavid du Colombier	/Q
913e12c5d1SDavid du Colombier	/R
923e12c5d1SDavid du Colombier	/S
933e12c5d1SDavid du Colombier	/T
943e12c5d1SDavid du Colombier	/U
953e12c5d1SDavid du Colombier	/V
963e12c5d1SDavid du Colombier	/W
973e12c5d1SDavid du Colombier	/X
983e12c5d1SDavid du Colombier	/Y
993e12c5d1SDavid du Colombier	/Z
1003e12c5d1SDavid du Colombier	/bracketleft
1013e12c5d1SDavid du Colombier	/backslash
1023e12c5d1SDavid du Colombier	/bracketright
1033e12c5d1SDavid du Colombier	/asciicircum
1043e12c5d1SDavid du Colombier	/underscore
1053e12c5d1SDavid du Colombier	/quoteleft
1063e12c5d1SDavid du Colombier	/a
1073e12c5d1SDavid du Colombier	/b
1083e12c5d1SDavid du Colombier	/c
1093e12c5d1SDavid du Colombier	/d
1103e12c5d1SDavid du Colombier	/e
1113e12c5d1SDavid du Colombier	/f
1123e12c5d1SDavid du Colombier	/g
1133e12c5d1SDavid du Colombier	/h
1143e12c5d1SDavid du Colombier	/i
1153e12c5d1SDavid du Colombier	/j
1163e12c5d1SDavid du Colombier	/k
1173e12c5d1SDavid du Colombier	/l
1183e12c5d1SDavid du Colombier	/m
1193e12c5d1SDavid du Colombier	/n
1203e12c5d1SDavid du Colombier	/o
1213e12c5d1SDavid du Colombier	/p
1223e12c5d1SDavid du Colombier	/q
1233e12c5d1SDavid du Colombier	/r
1243e12c5d1SDavid du Colombier	/s
1253e12c5d1SDavid du Colombier	/t
1263e12c5d1SDavid du Colombier	/u
1273e12c5d1SDavid du Colombier	/v
1283e12c5d1SDavid du Colombier	/w
1293e12c5d1SDavid du Colombier	/x
1303e12c5d1SDavid du Colombier	/y
1313e12c5d1SDavid du Colombier	/z
1323e12c5d1SDavid du Colombier	/braceleft
1333e12c5d1SDavid du Colombier	/bar
1343e12c5d1SDavid du Colombier	/braceright
1353e12c5d1SDavid du Colombier	/asciitilde
1363e12c5d1SDavid du Colombier	/.notdef
1373e12c5d1SDavid du Colombier	/.notdef
1383e12c5d1SDavid du Colombier	/.notdef
1393e12c5d1SDavid du Colombier	/.notdef
1403e12c5d1SDavid du Colombier	/.notdef
1413e12c5d1SDavid du Colombier	/.notdef
1423e12c5d1SDavid du Colombier	/.notdef
1433e12c5d1SDavid du Colombier	/.notdef
1443e12c5d1SDavid du Colombier	/.notdef
1453e12c5d1SDavid du Colombier	/.notdef
1463e12c5d1SDavid du Colombier	/.notdef
1473e12c5d1SDavid du Colombier	/.notdef
1483e12c5d1SDavid du Colombier	/.notdef
1493e12c5d1SDavid du Colombier	/.notdef
1503e12c5d1SDavid du Colombier	/.notdef
1513e12c5d1SDavid du Colombier	/.notdef
1523e12c5d1SDavid du Colombier	/.notdef
1533e12c5d1SDavid du Colombier	/dotlessi
1543e12c5d1SDavid du Colombier	/grave
1553e12c5d1SDavid du Colombier	/acute
1563e12c5d1SDavid du Colombier	/circumflex
1573e12c5d1SDavid du Colombier	/tilde
1583e12c5d1SDavid du Colombier	/macron
1593e12c5d1SDavid du Colombier	/breve
1603e12c5d1SDavid du Colombier	/dotaccent
1613e12c5d1SDavid du Colombier	/dieresis
1623e12c5d1SDavid du Colombier	/.notdef
1633e12c5d1SDavid du Colombier	/ring
1643e12c5d1SDavid du Colombier	/cedilla
1653e12c5d1SDavid du Colombier	/.notdef
1663e12c5d1SDavid du Colombier	/hungarumlaut
1673e12c5d1SDavid du Colombier	/ogonek
1683e12c5d1SDavid du Colombier	/caron
169*219b2ee8SDavid du Colombier	/.notdef		% was space
1703e12c5d1SDavid du Colombier	/exclamdown
1713e12c5d1SDavid du Colombier	/cent
1723e12c5d1SDavid du Colombier	/sterling
1733e12c5d1SDavid du Colombier	/currency
1743e12c5d1SDavid du Colombier	/yen
1753e12c5d1SDavid du Colombier	/brokenbar
1763e12c5d1SDavid du Colombier	/section
1773e12c5d1SDavid du Colombier	/dieresis
1783e12c5d1SDavid du Colombier	/copyright
1793e12c5d1SDavid du Colombier	/ordfeminine
1803e12c5d1SDavid du Colombier	/guillemotleft
1813e12c5d1SDavid du Colombier	/logicalnot
1823e12c5d1SDavid du Colombier	/hyphen
1833e12c5d1SDavid du Colombier	/registered
1843e12c5d1SDavid du Colombier	/macron
1853e12c5d1SDavid du Colombier	/degree
1863e12c5d1SDavid du Colombier	/plusminus
1873e12c5d1SDavid du Colombier	/twosuperior
1883e12c5d1SDavid du Colombier	/threesuperior
1893e12c5d1SDavid du Colombier	/acute
1903e12c5d1SDavid du Colombier	/mu
1913e12c5d1SDavid du Colombier	/paragraph
1923e12c5d1SDavid du Colombier	/periodcentered
1933e12c5d1SDavid du Colombier	/cedilla
1943e12c5d1SDavid du Colombier	/onesuperior
1953e12c5d1SDavid du Colombier	/ordmasculine
1963e12c5d1SDavid du Colombier	/guillemotright
1973e12c5d1SDavid du Colombier	/onequarter
1983e12c5d1SDavid du Colombier	/onehalf
1993e12c5d1SDavid du Colombier	/threequarters
2003e12c5d1SDavid du Colombier	/questiondown
2013e12c5d1SDavid du Colombier	/Agrave
2023e12c5d1SDavid du Colombier	/Aacute
2033e12c5d1SDavid du Colombier	/Acircumflex
2043e12c5d1SDavid du Colombier	/Atilde
2053e12c5d1SDavid du Colombier	/Adieresis
2063e12c5d1SDavid du Colombier	/Aring
2073e12c5d1SDavid du Colombier	/AE
2083e12c5d1SDavid du Colombier	/Ccedilla
2093e12c5d1SDavid du Colombier	/Egrave
2103e12c5d1SDavid du Colombier	/Eacute
2113e12c5d1SDavid du Colombier	/Ecircumflex
2123e12c5d1SDavid du Colombier	/Edieresis
2133e12c5d1SDavid du Colombier	/Igrave
2143e12c5d1SDavid du Colombier	/Iacute
2153e12c5d1SDavid du Colombier	/Icircumflex
2163e12c5d1SDavid du Colombier	/Idieresis
2173e12c5d1SDavid du Colombier	/Eth
2183e12c5d1SDavid du Colombier	/Ntilde
2193e12c5d1SDavid du Colombier	/Ograve
2203e12c5d1SDavid du Colombier	/Oacute
2213e12c5d1SDavid du Colombier	/Ocircumflex
2223e12c5d1SDavid du Colombier	/Otilde
2233e12c5d1SDavid du Colombier	/Odieresis
2243e12c5d1SDavid du Colombier	/multiply
2253e12c5d1SDavid du Colombier	/Oslash
2263e12c5d1SDavid du Colombier	/Ugrave
2273e12c5d1SDavid du Colombier	/Uacute
2283e12c5d1SDavid du Colombier	/Ucircumflex
2293e12c5d1SDavid du Colombier	/Udieresis
2303e12c5d1SDavid du Colombier	/Yacute
2313e12c5d1SDavid du Colombier	/Thorn
2323e12c5d1SDavid du Colombier	/germandbls
2333e12c5d1SDavid du Colombier	/agrave
2343e12c5d1SDavid du Colombier	/aacute
2353e12c5d1SDavid du Colombier	/acircumflex
2363e12c5d1SDavid du Colombier	/atilde
2373e12c5d1SDavid du Colombier	/adieresis
2383e12c5d1SDavid du Colombier	/aring
2393e12c5d1SDavid du Colombier	/ae
2403e12c5d1SDavid du Colombier	/ccedilla
2413e12c5d1SDavid du Colombier	/egrave
2423e12c5d1SDavid du Colombier	/eacute
2433e12c5d1SDavid du Colombier	/ecircumflex
2443e12c5d1SDavid du Colombier	/edieresis
2453e12c5d1SDavid du Colombier	/igrave
2463e12c5d1SDavid du Colombier	/iacute
2473e12c5d1SDavid du Colombier	/icircumflex
2483e12c5d1SDavid du Colombier	/idieresis
2493e12c5d1SDavid du Colombier	/eth
2503e12c5d1SDavid du Colombier	/ntilde
2513e12c5d1SDavid du Colombier	/ograve
2523e12c5d1SDavid du Colombier	/oacute
2533e12c5d1SDavid du Colombier	/ocircumflex
2543e12c5d1SDavid du Colombier	/otilde
2553e12c5d1SDavid du Colombier	/odieresis
2563e12c5d1SDavid du Colombier	/divide
2573e12c5d1SDavid du Colombier	/oslash
2583e12c5d1SDavid du Colombier	/ugrave
2593e12c5d1SDavid du Colombier	/uacute
2603e12c5d1SDavid du Colombier	/ucircumflex
2613e12c5d1SDavid du Colombier	/udieresis
2623e12c5d1SDavid du Colombier	/yacute
2633e12c5d1SDavid du Colombier	/thorn
2643e12c5d1SDavid du Colombier	/ydieresis
2653e12c5d1SDavid du Colombier] def
2663e12c5d1SDavid du Colombier
2673e12c5d1SDavid du Colombier/NewFontDirectory FontDirectory maxlength dict def
2683e12c5d1SDavid du Colombier
2693e12c5d1SDavid du Colombier%
2703e12c5d1SDavid du Colombier% Apparently no guarantee findfont is defined in systemdict so the obvious
2713e12c5d1SDavid du Colombier%
2723e12c5d1SDavid du Colombier%	systemdict /findfont get exec
2733e12c5d1SDavid du Colombier%
2743e12c5d1SDavid du Colombier% can generate an error. So far the only exception is a VT600 (version 48.0).
2753e12c5d1SDavid du Colombier%
2763e12c5d1SDavid du Colombier
2773e12c5d1SDavid du Colombieruserdict /@RealFindfont known not {
2783e12c5d1SDavid du Colombier	userdict begin
2793e12c5d1SDavid du Colombier		/@RealFindfont systemdict begin /findfont load end def
2803e12c5d1SDavid du Colombier	end
2813e12c5d1SDavid du Colombier} if
2823e12c5d1SDavid du Colombier
2833e12c5d1SDavid du Colombier/findfont {
2843e12c5d1SDavid du Colombier	dup NewFontDirectory exch known not {
2853e12c5d1SDavid du Colombier		dup
2863e12c5d1SDavid du Colombier		%dup systemdict /findfont get exec	% not always in systemdict
2873e12c5d1SDavid du Colombier		dup userdict /@RealFindfont get exec
2883e12c5d1SDavid du Colombier		dup /Encoding get StandardEncoding eq {
2893e12c5d1SDavid du Colombier			dup length 1 add dict begin
2903e12c5d1SDavid du Colombier				{1 index /FID ne {def}{pop pop} ifelse} forall
2913e12c5d1SDavid du Colombier				/Encoding UTFLatin1Encoding def
2923e12c5d1SDavid du Colombier				/Metrics 1 dict def
2933e12c5d1SDavid du Colombier				Metrics /.notdef 0 put
2943e12c5d1SDavid du Colombier				currentdict
2953e12c5d1SDavid du Colombier			end
2963e12c5d1SDavid du Colombier			/DummyFontName exch definefont
2973e12c5d1SDavid du Colombier		} if
2983e12c5d1SDavid du Colombier		NewFontDirectory 3 1 roll put
2993e12c5d1SDavid du Colombier	} if
3003e12c5d1SDavid du Colombier	NewFontDirectory exch get
3013e12c5d1SDavid du Colombier} bind def
3023e12c5d1SDavid du Colombier
3033e12c5d1SDavid 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.
3073e12c5d1SDavid du Colombier%
3083e12c5d1SDavid du Colombier
3093e12c5d1SDavid du Colombier/UTFstring {
3103e12c5d1SDavid du Colombier	dup {
311*219b2ee8SDavid du Colombier		(\240\240) search {
3123e12c5d1SDavid du Colombier			pop
313*219b2ee8SDavid du Colombier			0 16#20 put
3143e12c5d1SDavid du Colombier		}{pop exit} ifelse
3153e12c5d1SDavid du Colombier	} loop
3163e12c5d1SDavid du Colombier} bind def
3173e12c5d1SDavid du Colombier
3183e12c5d1SDavid du Colombier/ashow {mark 4 1 roll UTFstring //ashow cvx exec cleartomark} bind def
3193e12c5d1SDavid du Colombier/awidthshow {mark 7 1 roll UTFstring //awidthshow cvx exec cleartomark} bind def
3203e12c5d1SDavid du Colombier/show {mark exch UTFstring //show cvx exec cleartomark} bind def
3213e12c5d1SDavid du Colombier/stringwidth {UTFstring //stringwidth cvx exec} bind def
3223e12c5d1SDavid du Colombier/widthshow {mark 5 1 roll UTFstring //widthshow cvx exec cleartomark} bind def
3233e12c5d1SDavid du Colombier
3243e12c5d1SDavid du Colombier%
3253e12c5d1SDavid du Colombier% kshow is harder - stack can't change because of the procedure.
3263e12c5d1SDavid du Colombier%
3273e12c5d1SDavid du Colombier
3283e12c5d1SDavid du Colombier/kshow dup load type /operatortype eq
3293e12c5d1SDavid du Colombier	{{UTFstring kshow} bind}
3303e12c5d1SDavid du Colombier	{{UTFstring //kshow cvx exec} bind}
3313e12c5d1SDavid du Colombierifelse def
3323e12c5d1SDavid du Colombier
333