Этот шаг нужен, чтобы избежать некоторых странностей (а то и серьезных ошибок вроде "SegmentationFault" и "AccessViolation" ), а также если планируется использование не-ASCII –кодов в исходных текстах (см. дальше ) . Команда FPC - в курсе, но на данный момент не успела включить данные исправления в стабильный ( 2.0. x ) бранч FPC-проекта.
Короче, если у вас версия "FreePascal 2.0.4-rc1" и позднее - файлы из каталога «patch_fpc_2_0_4» ( пакет исходников MSEgui + MSEide ) переписать поверх соответствующих файлов исходников FPC ,
Перейти в каталог "$fpc_source_dir/fcl" , выполнить “make clean”, затем “make”, затем - переписать пересозданные unit -ы из “$fpc_source_dir/fcl/units/” поверх соответствующих unit -ов в каталоге бинарников FPC (обычно /usr/lib/fpc/$fpc_version/units/i386-linux/fcl/ ). Теперь пересобрать "MSEgui/ide" из исходников, чтобы также отразить сделанные изменения.
Примечания :
Чтобы MSEide и приложения на базе MSEgui вообще стартовали , дисплей должен находиться в так называемом "TrueColor" режиме. Для этого есть следующие варианты:
Visual "TrueColor"
которая переназначает прежнее умолчание для 8bpp ( "PseudoColor" )
Примечания :
/usr/lib/libXft.so –> если хотим антиалиасинг, автозамену и т.п. шрифтов – короче, весь сервис библотеки FreeType
Примечание:
Чтобы вся эта красота реально заработала – нужно установить TTF -шрифты, идеально подходят FreeSans , FreeSerif и FreeMono (пакет “ttf-freefont” )
/usr/lib/libXrender.so -> нужна, если будем использовать картинки, цветовые градиенты и т.п. ( MSEide использует таковые – например, для рисования градиентов в палитре цветов )
/usr/lib/libpq.so -> через нее будем работать с PostgreSQL -сервером
/usr/X11R6/lib/libX11.so и /usr/X11R6/lib/libICE.so –> их наличие обязательно (они 100% есть, если нормально работают Иксы ) !
Если перечисленных библиотек нет, то :
# ln –s /usr/lib/libXrender.so.1 /usr/lib/libXrender.so
и от имени “root” выполните команду “ldconfig”.
Так как MSEgui внутри использует юникод, он может работать в любой национальной среде ( см. системную переменную “LANG” ), при условии, что в системе установлены шрифты с кодировкой ISO 10646-1, в которых представлены символы национального алфавита системы ( см. первую, до точки, часть значения “LANG”, у меня это “ru_RU” ). Опять-таки, проще всего этого добиться, установив те же “ttf-freefonts”.
Для подстраховки по части кодировок лучше импортировать эти шрифты из сервера шрифтов, так как этот сервер умеет на лету генерировать нужные кодировки:
FontPath "unix/:7101"
userarg="$userarg --encoding iso8859-1,koi8-r,windows-1251,iso10646-1,symbol-0"
Примечание:
использование "$userarg" - лишь один из способов ( использованый в Debian Linux ) для передачи параметров команжной строки в запускаемый сервер ( демон ) "xfstt", в другом Linux-дистрибутиве может понадобиться другой способ
параметр "--encoding" задает, шрифты в каких кодировках сгенерировать, причем каждый шрифт занимает память, поэтому будем минималистами - зададим минимально необходимый набор кодировок для отображения стандартных X11-программ ( iso8859-1 ), стандартно русифицированных программ ( koi8-r), MSEgui-программ ( iso10646-1 ) и символов вроде стрелок, курсоров и и т.п. ( symbol-0 ); кодировка "windows-1251" здесь - на случай чтения русских MSWord-файлов в среде OpenOffice/StarOffice/KWord
«xfstt» при запуске ищет TrueType-шрифты в каталоге и подкаталогах “/usr/share/fonts/truetype/*” - находит, строит кэш, генерирует кодировки и подгружает - независимо от базовой конфигурации X11.
Поэтому добавить другой комплект TTF-шрифтов просто – скопируйте, например, шрифты от MicroSoft – в каталог “/usr/share/fonts/truetype/microsoft/”, и выполните в нем команды «mkfontscale `pwd`», «mkfontdir `pwd`» и «fс-cache `pwd`» ( эти команды нужны, чтобы информация о новых шрифтах стала доступна для "X11" и "FreeType" ).
Прямая ссылка на “/usr/share/fonts/truetype/ ”( и подкаталоги ) в (/etc/X11/XF86Config-4: Files ) может быть удалена.
В Линуксе для печати из GUI -приложений используeтся "GhostScript" – просто потому, что он умеет переводить полученные задания в формате PS ( PostScript ) на «язык» конкретного принтера (не обязательно поддерживающего PS ).
Чтобы использовать одни и те же шрифты для отображения и печати – нужно сказать "GhostScript" , где находятся отображаемые шрифты.
Команда печати выглядит примерно так:
сat <file_to_print>.ps | \
gs -I/usr/share/fonts/truetype/ -q -sDEVICE=epson -dBATCH -dNOPAUSE -dSAFER \
-sOutputFile=- - | lpr -Plp
где:
"сat <file_to_print>.ps" – может быть заменено потоком данных для распечатки (в формате PS )
"-I/usr/share/fonts/truetype/" - нужно, если в файле печати есть ссылки на шрифты из этого каталога (и его подкаталогов)
"-sDEVICE=epson" – переводить в формат для распечатки на 9-игольчатом принтере системы команд “Epson”
( список поддерживаемых принтеров можно узнать командой «gs --help», см. «Available devices» )
"lp -Plp" – печатать через LPD/LPRng-спулер, у которого использовать очередь печати “lp”, которая, кстати не должна делать прогон страницы ( PS -файл обычно содержит такую команду)
Местоположение TrueType -шрифтов можно также указать через “~/.bash_profile”, добавив строку:
export GS_FONTPATH=/usr/share/fonts/truetype/: $GS_FONTPATH
Кстати , GhostScript сам просканирует подкаталоги «/usr/share/fonts/truetype/*» в поиске шрифтов .
Но просто информации о каталоге недостаточно, чтобы GhostScript смог использовать TTF -шрифты, ведь он не понимает их имена. Придется использовать алиасы – см. файл
/usr/share/gs[-afpl,-esp]/<ver>/lib/Fontmap.GS
Пример скрипта для автоматизации рутинной задачи генерации алиасов ( причем эти алиасы должны соответствоать аналогичным в "FreeType" - иначе будут расхождения вида на экране и на бумаге ) - см. в архиве xft2gs.tgz, файл "do_xft.sh". В этом архиве также находятся :
Запускать "do_xft.sh" ( и включать новое содержимое "Fontmap.GS.xft" в "Fontmap.GS" ) следует после изменения в секциях "<alias>..< prefer>" файла "/etc/fonts/fonts.conf".
Правило – если алиасы в файле "Fontmap.GS" пересекаются ( переопределяются ), то задействуется самый последний вариант.
Настройки ( через переменные внутри файла ) по умолчанию "do_xft.sh" достаточны даже для того, чтобы "GhostScript" понимал разные варианты именования некоторых шрифтов, например - "Times", "Times New", "Times New Roman", "TimesNew Roman", "TimesNewRoman" - все будут одинаковым образом обработаны, если реально представлены одним и тем же файлом шрифта. Но работает этот
механизм не всегда, и слава богу - лучше всегда знать, какой шрифт реально используется, поэтому
единственно надежный способ задания имени шрифта - его точная нотация, с соблюдением всех пробелов и регистра букв
- настоятельно Вам рекомендую всегда делать именно так ( точные названия шрифтов, понимаемые "GhostScript" - см. левый столбец в файле "Fontmap.GS" ).
Также, с этими настройками не нужно добавлять "export GS_FONTPATH=.." в ваш "~/.bash_profile" (см. выше ), так как будут использованы полные пути к файлам шрифтов.
Запускать "do_xft.sh" следует от имени пользователя, который будет реально печатать ( чтобы учесть его собственные шрифты - в домашнем каталоге ) , а уже добавлять к "Fontmap.GS" придется, став суперпользователем ( root ) . Также, данный скрипт подразумевает использование TrueType-шрифтов.
Опять-таки – почему использовать в PostScript не привычные PS (Type1–шрифты), а именно TrueType ( TTF ) ? Просто потому, что TTF-шрифты содержат в себе начертания символов практически всех европейских языков, нужно лишь сказать «используй такой-то код для начертания такой-то буквы» . Задания печати ( в формате PS ), генерируемые MSEgui компонентом «tpostscriptprinter», содержат в себе таблицы перекодировки – что позволяет распечатать практически любые ( хоть китайские – лишь бы были в шрифте ! ) символы, вне зависимости от системной кодировки.
Общее правило при подготовке печати - всегда указывайте в программе максимально детализированное имя шрифты - "Times New Roman" и т.п., чтобы потом, из-за возможных различий в алиасах шрифтов, не получилось расхождений при печати той же информации на другом рабочем месте.
Легче установить на другом рабочем месте нужный шрифт, чем возиться с алиасами !
Примечания :
Поведение "GhostScript" при получении неправильного или неизвестного имени шрифта, или когда файл шрифта недоступен на файловой системе - неоднозначно. Он может прекратить работу, а может и продолжить, заменив неверный шрифт на умолчание, как правило - шрифт "Helvetica" ( если шрифт по-умолчанию доступен, то, как правило - происходит 2-й вариант )
Формат названия шрифта, генерируемого "MSEgui" в заданиях для печати :
где :
- tprintercanvas.font.name: => {font name with spaces and correct letter casing}
- tprintercanvas.font.style:= [fs_bold, fs_italic] => [-[Bold[Italic]]
и именно для такого формата ( "Times New Roman-BoldItalic", и т.п. ) в файле "Fontmap.GS" должны быть подготовлены корректные алиасы.
Какие шрифты по умолчанию используют MSEgui-программы ? Комплект "Fixed", "Helvetica", "Sans", "Serif", "Courier New" и "Mono", назначенный группе встроенных ( stock ) объектов, доступных каждому MSEgui-приложению .
При заказе шрифтов библиотека "FreeType" обращается к своему партнеру - библиотеке "FontConfig", которая, в свою очередь, анализирует системные настройки шрифтов - файл "/etc/fonts/fonts.conf" .
В этом файле нас интересуют секции :
<!--
Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
<match target="pattern">
<test qual="any" name="family">
<string>mono</string>
</test>
<edit name="family" mode="assign">
<string>monospace</string>
</edit>
</match>
То есть вместо шрифта "Mono" следует искать шрифт "Monospace".
!!! Сразу вслед этой секцией - добавим запись, ожидаемую "MSEide" :
<match target="pattern">
<test qual="any" name="family">
<string>fixed</string>
</test>
<edit name="family" mode="assign">
<string>monospace</string>
</edit>
</match>Это будет алиас для шрифта "fixed".
<!--
Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans serif</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>
То есть вместо шрифта "sans serif" следует искать шрифт "sans-serif".
<!--
Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>
То есть вместо шрифта "sans" следует искать опять-таки шрифт "sans-serif".
<!--
Provide required aliases for standard names
-->
<alias>
<family>serif</family>
<prefer>
<family>Bitstream Vera Serif</family>
<family>Times New Roman</family>
...
<family>Nimbus Roman No9 L</family>
<family>Times</family>
...
<family>FreeSerif</family>
</prefer>
</alias>
То есть при нескольких вариантах выбора шрифта "serif" - начинать с "Bitstream Vera Serif" ( комплект "fonts-bitstream" ), затем - "Times New Roman" ( шрифт от "MicroSoft" ), "Nimbus Roman No9 L" (Type1-шрифт от "Adobe", входит в комплект GhostScript ), "Times" ( bitmap-шрифт их комплекта XWindows) и "FreeSerif " (шрифт из комплекта “ttf-freefont” ) .
<alias>
<family>sans-serif</family>
<prefer>
<family>Bitstream Vera Sans</family>
<family>Verdana</family>
<family>Arial</family>
...
<family>Nimbus Sans L</family>
<family>Helvetica</family>
...
<family>FreeSans</family>
</prefer>
</alias>
То есть при нескольких вариантах выбора шрифта "sans-serif" - начинать с "Bitstream Vera Sans" ( комплект "fonts-bitstream" ), затем - "Verdana" и "Arial" ( шрифты от "MicroSoft" ), "Nimbus Sans L" (Type1-шрифт от "Adobe", входит в комплект GhostScript ), "Helvetica" ( bitmap-шрифт их комплекта XWindows) и "FreeSans" (шрифт из комплекта “ttf-freefont” ) .
<alias>
<family>monospace</family>
<prefer>
<family>Bitstream Vera Sans Mono</family>
<family>Andale Mono</family>
<family>Courier New</family>
...
<family>Nimbus Mono L</family>
<family>Courier</family>
...
<family>FreeMono</family>
</prefer>
</alias>
То есть при нескольких вариантах выбора шрифта "monospace" - начинать с "Bitstream Vera Sans Mono" ( комплект "fonts-bitstream" ), затем - "Andale Mono" и "Courier New" ( шрифты от "MicroSoft" ), "Nimbus Mono L" ( Type1-шрифт от "Adobe", входит в комплект GhostScript ), "Courier" ( bitmap-шрифт их комплекта XWindows) и "FreeMono" (шрифт из комплекта “ttf-freefont” ) .
То есть, если в системе установлены все вышеперечисленные комплекты шрифтов, то шрифты “ttf-freefont” останутся незадействованными. Шрифты "fonts-bitstream" на системе с русской локалью будут отсечены из-за их базового языка ( lang=en ) , следовательно - будут задействованы MicroSoft-шрифты.
Если мы хотим, чтобы в "MSEgui" ( и прочих программах, ориентированных на "FreeType" ) были задействованы шрифты “ttf-freefont”, придется вручную переместить строку "<family>FreeSerif</family>" выше строки "<family>Times New Roman</family>", и так далее для остальных шрифтов.
Кстати, скрипт "do_xft.sh" ( см. выше ) принимает в рассчет данный приоритет шрифтов и для самых приоритетных шрифтов создает самые короткие алиасы .
Примечание :
<!--
URW provides metric and shape compatible fonts for these 3 Adobe families
Mark these as effective replacements by binding the replacement
family names strongly
-->
<match target="pattern">
<test name="family"><string>Times</string></test>
<edit name="family" mode="append" binding="same">
<string>Nimbus Roman No9 L</string>
</edit>
</match>
<match target="pattern">
<test name="family"><string>Helvetica</string></test>
<edit name="family" mode="append" binding="same">
<string>Nimbus Sans L</string>
</edit>
</match>
<match target="pattern">
<test name="family"><string>Courier</string></test>
<edit name="family" mode="append" binding="same">
<string>Nimbus Mono L</string>
</edit>
</match>
и перезапусите X11 ( чтобы изменения "fonts.conf" ) вступили в действие.
Может встать вопрос - какой комплект TrueType-шрифтов следует выбрать - "FreeFonts", "MicroSoft", "BitStream" и т.п. ? А может вообще ограничиться Type1-шрифтами ( *.pfa/pfb). Могу только сослаться на собственный опыт :
Параметр "rgb" в этом файле определяет порядок (слева направо) цветов в цветовых триадах, образующих отдельные пикселы, и может отличаться в разных моделях мониторов. Виден под лупой, имеет наибольший эффект для монитров с триадами, расположенными в одну линию - например, жидокристалиических. Если реальный порядок цветов отличается от "rgb", можно его указать в этом параметре.
И все равно мелкие ( < 8 ) размеры шрифтов могут прорисовываться с разрывами, особено если включена субпиксельная прорисовка
Примечания :
создать линк "/etc/fonts/conf.d/30-no-bitmap.conf", указывающий на "/etc/fonts/conf.d/no-bitmap.conf"