Slugline в MetaDimension, часть 1: русификация

В RIP MetaDimension есть неплохая, в общем-то, фича: слаг, небольшое текстовое поле, содержащее служебные данные. Слаг выводится на каждой форме и может показывать, например, дату, номер задания, номер печатного листа. Кроме того, в него можно добавить произвольную текстовую информацию.

Разумеется, если Мета подключена к Prinect, slugline доступен и в кокпите. Вот скриншот секции Imposition секвенса ImpositionProof:

К сожалению, шрифт, которым выводится слаг, не поддерживает кириллицу. Поэтому при попытке ввести какую-нибудь полезную информацию в текстовое поле вы получите на пруфе или форме классическую бнопню: «ãóáåðíèé äàñò ìîùíûé». Можно попробовать заменить шрифт, но привычного гейдельберговского ArialMultilanguage в списке нет:

Замена шрифта в XML секвенса ни к чему хорошему тоже не приводит. Если вписать туда какой-нибудь системный шрифт типа Verdana — Мета выдаёт ошибку интерпретатора PostScript (то есть RIP хочет шрифт Type1, а системные шрифты в формате OpenType). Если вписать любой шрифт из шрифтохранилища Меты — слаг будет написан выбранным шрифтом, но кириллицы всё равно не будет. Замена шрифтов в шрифтохранилище тоже не даёт ничего.

Что же делать?

Нетрудно заметить, что Prinect выполняет отрисовку слага на этапе MarksReplacement. После непродолжительных поисков обнаруживается этот файлик: MetaDimension\SystemData\Resources\Marks\FixMarks\HDAG_SlugTail.ps. А в нём лежит древний код из 2008 года, генерирующий наш с вами slugline. В коде немцами жёстко задаётся кодировка ISO Latin-1 (как стыдливо написано в комментарии — «для умляутов»):

% Using ISOLatin1 font for german umlaute
dup length dict begin
    { 1 index /FID ne { def }{ pop pop } ifelse } forall
    /Encoding [ISOLatin1Encoding aload pop] dup 16#80 /Euro put def
    currentdict
end
/isolatin1font exch definefont

Только себе, только о себе… 🙂

Имеет ли смысл менять кодировку в коде? В шрифтах Меты кириллических глифов нет вовсе. Вот, например, Helvetica:

Следовательно, исправлять в коде Latin1 на 1251 смысла нет, нужен другой шрифт.

Чтобы не менять ещё и кодировку в файле HDAG_SlugTail.ps, в шрифте кириллические глифы должны находиться на месте расширенных латинских. Они нам всё равно не нужны. Ведь то, что вместо «Deutschland über alles» мы увидим «Deutschland Дber alles», нас совершенно не волнует, nicht war?..

В интернетах удалось найти шрифт из старых времён, в котором эта работа уже выполнена, на ftp.kapella.gpi.ru. Правда, кодировка найденного шрифта — KOI8-R, что обусловлено его тогдашним применением (русификация древних линуксовых программ, видящих только первые 256 символов шрифта).

При помощи шрифтового редактора кириллические глифы меняются местами так, чтобы вместо KOI8-R получился CP1251. Теперь, чтобы Мета увидела этот шрифт, нужно его записать в формате PFA и положить в начало файла HDAG_SlugTail.ps. Кроме того, самой программе нужно указать, чтобы она воспользовалась именно этим шрифтом. Для этого грубо поменяем значение переменной fname, в которой хранится выбранное в секвенсе имя шрифта: добавим строчку «/fname (TimesNRCyrMT) def» перед строчкой «/font fname cvn findfont».

Вот и всё, Мета теперь пишет слаг кириллицей, даже не подозревая об этом. 🙂

Чтобы вам не пришлось самим проделывать вышеописанные работы, я выложил модифицированный файл для скачивания. Всё, что нужно — распаковать его и поместить в папку MetaDimension\SystemData\Resources\Marks\FixMarks, заменив старый файл. Останавливать для это ни Мету, ни Принект не нужно, замену можно производить «на горячую».

Добавить комментарий