123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- %
- % 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
- /.notdef % was 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
- %
- % Assume A0, except for A0A0 which is replaced by 20A0, can be ignored.
- % Works with ASCII or Latin1 because A0 has been re-encoded as a zero
- % width non-printing character.
- %
- /UTFstring {
- dup {
- (\240\240) search {
- pop
- 0 16#20 put
- }{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
|