344 lines
4.4 KiB
Plaintext
344 lines
4.4 KiB
Plaintext
|
%
|
||
|
% 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
|
||
|
|