mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
386 lines
8.9 KiB
386 lines
8.9 KiB
% Copyright (c) 1995 Microsoft Corporation
|
|
%
|
|
% Module Name:
|
|
%
|
|
% reencode.ps
|
|
%
|
|
% Abstract:
|
|
%
|
|
% PostScript code to reencode a font
|
|
%
|
|
% Revision History:
|
|
%
|
|
% 08/08/95 -davidx-
|
|
% Created it.
|
|
%
|
|
% mm/dd/yy -author-
|
|
% description
|
|
%
|
|
% WARNING!!!
|
|
% smash.exe has bugs and doesn't work well on this file.
|
|
% Be sure to edit the result file by hand.
|
|
|
|
% FontDict CharName IsChar BOOL
|
|
% IsChar tests to see if a character is in a fontdict.
|
|
% It returns true if it is, otherwise false.
|
|
|
|
/IsChar {exch /CharStrings get exch known} bd
|
|
|
|
% FontDict CharPosition CharName MapCh --
|
|
% MapCh sets the specified character mapping in the font
|
|
% being created (newfontdict)
|
|
|
|
/MapCh {3 -1 roll /Encoding get 3 1 roll put} bd
|
|
|
|
% FontDict MapDegree --
|
|
% MapDegree maps /degree to 0xb0 if it exists in the character set
|
|
% otherwise it tries to map the older /ring.
|
|
|
|
/MapDegree {dup 16#b0 exch /degree IsChar{/degree}{/ring}ifelse MapCh} bd
|
|
|
|
% FontDict MapBB --
|
|
% MapBB maps /brokenbar to 0xa6 if it exists in the character set
|
|
% otherwise it tries to map the older /bar.
|
|
|
|
/MapBB {dup 16#a6 exch /brokenbar IsChar{/brokenbar}{/bar}ifelse MapCh} bd
|
|
|
|
% EncArray _NewFontName BaseFontName reencode
|
|
%
|
|
% EncArray is an array of numbers and names. When "reencode" scans thru
|
|
% the array, if a number is encountered, the current index is set to
|
|
% that number. If a name is encountered, the element in the Encoding
|
|
% array at the current index is replaced by that name.
|
|
|
|
/reencode {
|
|
|
|
% Copy the base font dictionary into a new font dictionary
|
|
% Don't copy /FID key
|
|
|
|
findfont begin currentdict dup length dict begin {
|
|
1 index /FID ne {def} {pop pop} ifelse
|
|
} forall
|
|
|
|
/FontName exch def
|
|
|
|
% At this point, both the new font dictionary and
|
|
% the base font dictionary are on the dictstack.
|
|
% EncArray is on the operand stack.
|
|
|
|
dup length 0 ne {
|
|
|
|
% Copy the encoding array from the base font
|
|
|
|
/Encoding Encoding 256 array copy def
|
|
|
|
% Selectively redefine the elements in the encoding
|
|
% array using the supplied parameter.
|
|
|
|
0 exch {
|
|
dup type /nametype eq {
|
|
|
|
% Name - replace the element at the current index
|
|
|
|
Encoding 2 index 2 index put pop 1 add
|
|
}{
|
|
|
|
% Number - use as the new index
|
|
|
|
exch pop
|
|
|
|
} ifelse
|
|
|
|
} forall
|
|
|
|
} if pop currentdict dup end end
|
|
|
|
% Remap a few special symbols (degree, brokenbar) on older printers.
|
|
|
|
/FontName get exch definefont dup MapDegree MapBB
|
|
} bd
|
|
|
|
% LatinMap provides a standardized mapping which contains all currently
|
|
% known Adobe Latin characters.
|
|
|
|
/LATENC [
|
|
|
|
% Starting index
|
|
|
|
0
|
|
|
|
% The values 0 - d are referenced through composite characters, needed
|
|
% for postscript level 1 implementation. Taken from win31 source code.
|
|
|
|
/grave % 0x00
|
|
/acute % 0x01
|
|
/circumflex % 0x02
|
|
/tilde % 0x03
|
|
/macron % 0x04
|
|
/breve % 0x05
|
|
/dotaccent % 0x06
|
|
/dieresis % 0x07
|
|
/ring % 0x08
|
|
/cedilla % 0x09
|
|
/hungarumlaut % 0x0A
|
|
/ogonek % 0x0B
|
|
/caron % 0x0C
|
|
/dotlessi % 0x0D
|
|
/fi % 0x0E
|
|
/fl % 0x0F
|
|
|
|
/Lslash % 0x10
|
|
/lslash % 0x11
|
|
/Zcaron % 0x12
|
|
/zcaron % 0x13
|
|
/minus % 0x14
|
|
/.notdef % 0x15
|
|
/.notdef % 0x16
|
|
/.notdef % 0x17
|
|
/.notdef % 0x18
|
|
/.notdef % 0x19
|
|
/.notdef % 0x1A
|
|
/.notdef % 0x1B
|
|
/.notdef % 0x1C
|
|
/.notdef % 0x1D
|
|
/.notdef % 0x1E
|
|
/.notdef % 0x1F
|
|
|
|
% Standard win 31 character set begins here
|
|
|
|
/space % ' '
|
|
/exclam % '!'
|
|
/quotedbl % '"'
|
|
/numbersign % '#'
|
|
/dollar % '$'
|
|
/percent % '%'
|
|
/ampersand % '&'
|
|
/quotesingle % '''
|
|
/parenleft % '('
|
|
/parenright % ')'
|
|
/asterisk % '*'
|
|
/plus % '+'
|
|
/comma % ','
|
|
/hyphen % '-'
|
|
/period % '.'
|
|
/slash % '/'
|
|
|
|
/zero % '0'
|
|
/one % '1'
|
|
/two % '2'
|
|
/three % '3'
|
|
/four % '4'
|
|
/five % '5'
|
|
/six % '6'
|
|
/seven % '7'
|
|
/eight % '8'
|
|
/nine % '9'
|
|
/colon % ':'
|
|
/semicolon % ';'
|
|
/less % '<'
|
|
/equal % '='
|
|
/greater % '>'
|
|
/question % '?'
|
|
|
|
/at % '@'
|
|
/A % 'A'
|
|
/B % 'B'
|
|
/C % 'C'
|
|
/D % 'D'
|
|
/E % 'E'
|
|
/F % 'F'
|
|
/G % 'G'
|
|
/H % 'H'
|
|
/I % 'I'
|
|
/J % 'J'
|
|
/K % 'K'
|
|
/L % 'L'
|
|
/M % 'M'
|
|
/N % 'N'
|
|
/O % 'O'
|
|
|
|
/P % 'P'
|
|
/Q % 'Q'
|
|
/R % 'R'
|
|
/S % 'S'
|
|
/T % 'T'
|
|
/U % 'U'
|
|
/V % 'V'
|
|
/W % 'W'
|
|
/X % 'X'
|
|
/Y % 'Y'
|
|
/Z % 'Z'
|
|
/bracketleft % '['
|
|
/backslash % '\'
|
|
/bracketright % ']'
|
|
/asciicircum % '^'
|
|
/underscore % '_'
|
|
|
|
/grave % '`'
|
|
/a % 'a'
|
|
/b % 'b'
|
|
/c % 'c'
|
|
/d % 'd'
|
|
/e % 'e'
|
|
/f % 'f'
|
|
/g % 'g'
|
|
/h % 'h'
|
|
/i % 'i'
|
|
/j % 'j'
|
|
/k % 'k'
|
|
/l % 'l'
|
|
/m % 'm'
|
|
/n % 'n'
|
|
/o % 'o'
|
|
|
|
/p % 'p'
|
|
/q % 'q'
|
|
/r % 'r'
|
|
/s % 's'
|
|
/t % 't'
|
|
/u % 'u'
|
|
/v % 'v'
|
|
/w % 'w'
|
|
/x % 'x'
|
|
/y % 'y'
|
|
/z % 'z'
|
|
/braceleft % '{'
|
|
/bar % '|'
|
|
/braceright % '}'
|
|
/asciitilde % '~'
|
|
/.notdef % 0x7f
|
|
|
|
/.notdef % 0x80
|
|
/.notdef % 0x81
|
|
/quotesinglbase % 0x82
|
|
/florin % 0x83
|
|
/quotedblbase % 0x84
|
|
/ellipsis % 0x85
|
|
/dagger % 0x86
|
|
/daggerdbl % 0x87
|
|
/circumflex % 0x88
|
|
/perthousand % 0x89
|
|
/Scaron % 0x8A
|
|
/guilsinglleft % 0x8B
|
|
/OE % 0x8C
|
|
/.notdef % 0x8D
|
|
/.notdef % 0x8E
|
|
/.notdef % 0x8F
|
|
|
|
/.notdef % 0x90
|
|
/quoteleft % 0x91
|
|
/quoteright % 0x92
|
|
/quotedblleft % 0x93
|
|
/quotedblright % 0x94
|
|
/bullet % 0x95
|
|
/endash % 0x96
|
|
/emdash % 0x97
|
|
/tilde % 0x98
|
|
/trademark % 0x99
|
|
/scaron % 0x9A
|
|
/guilsinglright % 0x9B
|
|
/oe % 0x9C
|
|
/.notdef % 0x9D
|
|
/.notdef % 0x9E
|
|
/Ydieresis % 0x9F
|
|
|
|
/.notdef % 0xa0
|
|
/exclamdown % 0xa1
|
|
/cent % 0xa2
|
|
/sterling % 0xa3
|
|
/currency % 0xa4
|
|
/yen % 0xa5
|
|
/brokenbar % 0xa6
|
|
/section % 0xa7
|
|
/dieresis % 0xa8
|
|
/copyright % 0xa9
|
|
/ordfeminine % 0xaa
|
|
/guillemotleft % 0xab
|
|
/logicalnot % 0xac
|
|
/hyphen % 0xad
|
|
/registered % 0xae
|
|
/macron % 0xaf
|
|
|
|
/degree % 0xb0
|
|
/plusminus % 0xb1
|
|
/twosuperior % 0xb2
|
|
/threesuperior % 0xb3
|
|
/acute % 0xb4
|
|
/mu % 0xb5
|
|
/paragraph % 0xb6
|
|
/periodcentered % 0xb7
|
|
/cedilla % 0xb8
|
|
/onesuperior % 0xb9
|
|
/ordmasculine % 0xba
|
|
/guillemotright % 0xbb
|
|
/onequarter % 0xbc
|
|
/onehalf % 0xbd
|
|
/threequarters % 0xbe
|
|
/questiondown % 0xbf
|
|
|
|
/Agrave % 0xc0
|
|
/Aacute % 0xc1
|
|
/Acircumflex % 0xc2
|
|
/Atilde % 0xc3
|
|
/Adieresis % 0xc4
|
|
/Aring % 0xc5
|
|
/AE % 0xc6
|
|
/Ccedilla % 0xc7
|
|
/Egrave % 0xc8
|
|
/Eacute % 0xc9
|
|
/Ecircumflex % 0xca
|
|
/Edieresis % 0xcb
|
|
/Igrave % 0xcc
|
|
/Iacute % 0xcd
|
|
/Icircumflex % 0xce
|
|
/Idieresis % 0xcf
|
|
|
|
/Eth % 0xd0
|
|
/Ntilde % 0xd1
|
|
/Ograve % 0xd2
|
|
/Oacute % 0xd3
|
|
/Ocircumflex % 0xd4
|
|
/Otilde % 0xd5
|
|
/Odieresis % 0xd6
|
|
/multiply % 0xd7
|
|
/Oslash % 0xd8
|
|
/Ugrave % 0xd9
|
|
/Uacute % 0xda
|
|
/Ucircumflex % 0xdb
|
|
/Udieresis % 0xdc
|
|
/Yacute % 0xdd
|
|
/Thorn % 0xde
|
|
/germandbls % 0xdf
|
|
|
|
/agrave % 0xe0
|
|
/aacute % 0xe1
|
|
/acircumflex % 0xe2
|
|
/atilde % 0xe3
|
|
/adieresis % 0xe4
|
|
/aring % 0xe5
|
|
/ae % 0xe6
|
|
/ccedilla % 0xe7
|
|
/egrave % 0xe8
|
|
/eacute % 0xe9
|
|
/ecircumflex % 0xea
|
|
/edieresis % 0xeb
|
|
/igrave % 0xec
|
|
/iacute % 0xed
|
|
/icircumflex % 0xee
|
|
/idieresis % 0xef
|
|
|
|
/eth % 0xf0
|
|
/ntilde % 0xf1
|
|
/ograve % 0xf2
|
|
/oacute % 0xf3
|
|
/ocircumflex % 0xf4
|
|
/otilde % 0xf5
|
|
/odieresis % 0xf6
|
|
/divide % 0xf7
|
|
/oslash % 0xf8
|
|
/ugrave % 0xf9
|
|
/uacute % 0xfa
|
|
/ucircumflex % 0xfb
|
|
/udieresis % 0xfc
|
|
/yacute % 0xfd
|
|
/thorn % 0xfe
|
|
/ydieresis % 0xff
|
|
] def
|