|
|
1.1 ! root 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: ! 277: userdict /@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} ! 331: ifelse def ! 332:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.