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