Магазин портативной техники "Портатив"
:: на главную
Подборка шрифтов > FAQ > Вектор кодировки...

Вопрос:

Hасколько корректен следующий метод задания вектора кодировки для Type1 шрифтов? (Меня интересуют последние 2 строчки)

/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 32 /space put
dup 60 /afii10071 put
...
dup 193 /guillemotright put
dup 196 /afii10044 put
dup dup 161 10 getinterval 0 exch putinterval dup dup
173 23 getinterval 10 exch putinterval dup dup 127
exch 196 get put readonly

Ответ:

Hекорректен -- это нарушает совместимость с ATM.
В документе "Adobe Type 1 Font Format" в главе 10 "Adobe Type Manager Compatibility" сказано:

The tokens following /Encoding may be StandardEncoding def, in which case the Adobe Standard Encoding will be assigned to this font program. For special encodings, assignments must be performed as shown in the example in section 2.3, "Explanation of a Typical Font Program", using the repetitive sequence:

dup index charactername put

where index is an integer corresponding to an entry in the Encoding vector, and charactername refers to a PostScript language name token, such as /Alpha or /A, giving the character name assigned to a particular character code. The Adobe Type Manager parser skips to the first dup token after /Encoding to find the first character encoding assignment. This sequence of assignments must be followed by an instance of the token def or readonly; such a token may not occur within the sequence of assignments.

То есть кодировка должна задаваться либо как

/Encoding StandardEncoding def

либо перечислением имен символов для каждого кода символа в форме

dup код-символа /имя-символа put

например:

/Encoding 256 array
0 1 255 { 1 index exch /.notdef put } for
dup 32 /space put
dup 33 /exclam put
. . .
dup 255 /ydieresis put
readonly def

<< НАЗАД