ref: aab7b5ae8b18b4f097efcc59ea4a59093d0d6962
dir: /sys/lib/postscript/prologues/Default.enc/
% % Encoding vector, operator and procedure redefinitions for Plan 9 UTF % encoding. Prologues are expected to take steps to ensure operator % redefinitions given here are actually used. Current implementation % assumes UTF byte streams that represent ASCII or Latin1 text. % /UTFLatin1Encoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def /NewFontDirectory FontDirectory maxlength dict def % % Apparently no guarantee findfont is defined in systemdict so the obvious % % systemdict /findfont get exec % % can generate an error. So far the only exception is a VT600 (version 48.0). % userdict /@RealFindfont known not { userdict begin /@RealFindfont systemdict begin /findfont load end def end } if /findfont { dup NewFontDirectory exch known not { dup %dup systemdict /findfont get exec % not always in systemdict dup userdict /@RealFindfont get exec dup /Encoding get StandardEncoding eq { dup length 1 add dict begin {1 index /FID ne {def}{pop pop} ifelse} forall /Encoding UTFLatin1Encoding def /Metrics 1 dict def Metrics /.notdef 0 put currentdict end /DummyFontName exch definefont } if NewFontDirectory 3 1 roll put } if NewFontDirectory exch get } bind def % % UTF string decoding for ASCII and Latin1 only: % % C2 XX => 00 XX % C3 XX => XX+40 00 % % Two passes through each string with search is undoubtedly faster than % PostScript that examines each byte. % /UTFstring { dup { (\302) search { pop 0 0 put }{pop exit} ifelse } loop dup { (\303) search { pop 1 index 0 get 16#40 add 0 exch put dup length 0 gt {dup 0 0 put} if }{pop exit} ifelse } loop } bind def /ashow {mark 4 1 roll UTFstring //ashow cvx exec cleartomark} bind def /awidthshow {mark 7 1 roll UTFstring //awidthshow cvx exec cleartomark} bind def /show {mark exch UTFstring //show cvx exec cleartomark} bind def /stringwidth {UTFstring //stringwidth cvx exec} bind def /widthshow {mark 5 1 roll UTFstring //widthshow cvx exec cleartomark} bind def % % kshow is harder - stack can't change because of the procedure. % /kshow dup load type /operatortype eq {{UTFstring kshow} bind} {{UTFstring //kshow cvx exec} bind} ifelse def