Re: [gnome-cyr] Re: [gnome-cyr] Re: [gnome-cyr] gnome-print и комплектные afm
- From: "Dmitry G. Mastrukov" =?koi8-r?q?=E4=CD=C9=D4=D2=C9=CA_?==?koi8-r?q?=E7=C5=CE=CE=C1=C4=D8=C5=D7=C9=DE_?==?koi8-r?q?=ED=C1=D3=D4=D2=C0=CB=CF=D7?= <dmitry taurussoft org>
- To: gnome-cyr gnome org
- Subject: Re: [gnome-cyr] Re: [gnome-cyr] Re: [gnome-cyr] gnome-print =?koi8-r?q?=C9?==?koi8-r?q?_=CB=CF=CD=D0=CC=C5=CB=D4=CE=D9=C5?= afm
- Date: 11 Aug 2001 17:18:50 +0400
11 Aug 2001 14:51:00 +0500, Vlad Harchev ____
> On 11 Aug 2001, Dmitry G. Mastrukov Дмитрий Геннадьевич Мастрюков wrote:
>
> > 11 Aug 2001 11:57:17 +0500, Vlad Harchev ____
> > > On 11 Aug 2001, Dmitry G. Mastrukov Дмитрий Геннадьевич Мастрюков wrote:
> > >
> > > Привет всем!
> > >
> > > >
> > > > Вот в субже в комплекте идут *.afm из которых потом в fontmap2 делаются
> > > > алиасы для Гельветики и т.п. (из URW, как правило). Посмотрел я в них -
> > > > нет там любимых afi00. Получается, что для gnome-print нет русской
> > > > Гельветики, даже если алиасится русифицированный URW.
> > >
> > > Что, точно даже при регистрации русский URW шрифт гельветка при использовании
> > > GP не содержит русских глифов?
> > > Я сделал так: * залил русские URW в каталог /usr/share/ghostscript/fonts/ *
> > > хакнул *.afm в /usr/share/fonts/afms/adobe чтобы они содержали метрики русских
> > > глифов (просто копированием .afm из русских URW и модификацией строк FontName,
> > > FullName, FamilyName чтобы они содержали имена как в adobe's .afms). Если
> > > FontName, FullName, FamilyName не править чтобы оно совпадало с именами name=,
> > > fullname=, familyname= записи файла fontmap, то шрифт вообще не будет
> > > загружен.
> > >
> > Ситуация такая. Я не хакал afms/adobe, а поправил fontmap2, переведя afm
> > Helvetica на URW, и не правя никакие *Name.
>
> > > > Да и вообще, у меня каталоге шрифтов симлинки на русские afm и pfb, так
> > > > gnome-font-install ничего из этого не подхватил. Ему что, симлинки не
> > > > нравятся? Или он подхватывает только те, что в .font файлах есть?
> > >
> > > Да, он вроде подхватывает только те, что есть в .font файлах.
> > > Возможно тот скрипт крив и не поддерживает симлинки.
> > >
> > Я заменил симлинки на файлы, перезапустил - шрифты появились. Но вот
> > Гнумерик (Кто ещё gnome-print так использует) не показывает русский. В
> > Гельветике, Nimbus Sans L, Nimbus Roman No 9 (русские URW) - все символы
>
> В смысле? Iso-1 есть, а русских - нет (что значит "все символы ISO")?
>
> > ISO, а в прочих подхваченный русских - просто н и ч е г о вместо
> > русского.
>
> В принт превью или в GV ничего вместо русского? Если только в GV - то это
> проблема настройки GS.
>
Виноват, в превью есть, нет в самой таблице, при вводе, вернее наверху в
строке есть, а на поле - символы ISO, вместо русского. А если поменять
шрифт шрифт на всякие ERBukinist, Academy - нет вообще ничего (а в
превью есть). Так что это не gnome-print, наверное.
> > И чудно как-то. Я угробил urw/fonts из eel'я, так теперь у меня на
>
> А что такое eel?
Нау теперь разделён на два пакета, вернее, на три - librsvg, eel,
nautilus. Eel для нау - всё равно что GAL для Эвы. Ещё, помнится, в
листах давно кто-то жаловался, что для двух основных приложений две
разных библиотеки виджетов.
>
> > десктопе и в файлах русский, а на закладках ?????. И кроме Helvetica
> > Default нельзя ничего выбрать из шрифтов. И каждого начертания (Normal,
> > Bold и т.д) по две строчки.
> > У меня есть /usr/share/fonts/default/Type1 и
> > /usr/share/fonts/ghostscript, /usr/share/ghostscript/fonts в качестве
> > симлинков на неё.
>
> А если файлы положить вместо симлинков? Может тоже кривой код и пропускает
> симлинки.
>
> Ну и так как ты пошел своем путем, то тогда надо разбираться в fontmap.
> Мне было и сейчас лень, посему тогда я пошел описанным мной путем.
>
А я полез в eel и много интересного нашёл. Вот выжимки из
eel/eel-font-manager.c
Вот определения, используемые в коде. Забавна не только установочная
share директория, но и директория с исходными текстами.
<CODE>
#define FONTS_DIR_FILE_NAME "fonts.dir"
#define FONTS_ALIAS_FILE_NAME "fonts.alias"
#define FONTS_SCALE_FILE_NAME "fonts.scale"
#define POSSIBLE_FONT_SERVER_CONFIG_FILES
"/etc/X11/fs/config,/etc/xfs.conf"
#define DEFAULT_FONT_DIRECTORY EEL_DATADIR "/fonts/urw"
#define USER_FONT_DIRECTORY_NAME "fonts"
#define EEL_FONT_UNDEFINED ((EelFontType) 0)
#define POSTSCRIPT_FONT_MIME_TYPE "application/x-font-type1"
#define TRUE_TYPE_FONT_MIME_TYPE "application/x-font-ttf"
#define SOURCE_FONT_DIRECTORY EEL_SOURCE_DIRECTORY "/data/fonts/urw"
#define DEFAULT_FONT "n019003l.pfb"
#define DEFAULT_BOLD_FONT "n019004l.pfb"
</CODE>
Этот кусок уже из config.h. Возможные директории определяются на момент
конфигурации и хардкодируются.
<CODE>
#define EEL_POSSIBLE_FONT_DIRECTORIES "/usr/share/fonts/ghostscript"
/* #undef EEL_BUILD_MESSAGE */
#define EEL_SOURCE_DIRECTORY "/usr/src/gnome-gtk+/eel"
<CODE>
Опять eel-font-manager.c. Мне непонятно, зачем в каталоге с
Type1/TrurType шрифтами нужен fonts.dir обязательно. Ещё посмотрю, но,
по-моему, он eel (а уж freetype2 и подавно) для этих типов шрифтов не
нужен совсем.
Посмотрел - нужен. Eel из него что-то выуживает, равно как и из алиасов.
Надо делать :(
<CODE>
static void
font_manager_collect_font_tables (const char *font_directory,
GList **collected_font_tables)
{
GList *postscript_font_list = NULL;
GList *true_type_font_list = NULL;
FontDescriptionTable *table;
g_return_if_fail (string_is_valid (font_directory));
g_return_if_fail (collected_font_tables != NULL);
if (font_directory_is_ignored (font_directory)) {
return;
}
/* Collect postscript and true type font in this directory */
collect_fonts_from_directory (font_directory, &postscript_font_list,
&true_type_font_list);
/* No scalable fonts found; we're done */
if (g_list_length (postscript_font_list) == 0
&& g_list_length (true_type_font_list) == 0) {
return;
}
/* If no "fonts.dir" exists, then the user has a missing description
file (broken setup) */
if (!directory_contains_file (font_directory, FONTS_DIR_FILE_NAME)) {
eel_g_list_free_deep (postscript_font_list);
eel_g_list_free_deep (true_type_font_list);
g_warning ("Direcotry '%s' contains scalable fonts but no '%s'
description file.",
font_directory,
FONTS_DIR_FILE_NAME);
return;
}
table = font_description_table_new (font_directory,
postscript_font_list, true_type_font_list);
if (table == NULL) {
eel_g_list_free_deep (postscript_font_list);
eel_g_list_free_deep (true_type_font_list);
g_warning ("Error trying to process font directory '%s'.",
font_directory);
return;
}
*collected_font_tables = g_list_append (*collected_font_tables, table);
eel_g_list_free_deep (postscript_font_list);
eel_g_list_free_deep (true_type_font_list);
}
</CODE>
А вот и поиск шрифтов. Сначала берётся share/eel/fonts/urw, потом
<src>/fonts/urw, потом ~/.nautilus/fonts, потом уже определённые при
конфигурации возможные директории.
У меня в ~/.nautilus/fonts/ оставались четыре этих дефолтных шрифта с
русскими глифами. Вот тебе и по два шрифта одного начертания типа
Helvetica Default. Один - в ~/.nautilus/fonts, другой в <src>/fonts/urw
(share/eel/fonts/urw я уже удалил). Что ж - удалил я ~/.nautilus/fonts -
совсем русских глифов не осталось. Удалил из <src> - Нау засегфолтился,
хотя в возможных директориях эти самые n019XXX.pfb есть, но там нет
fonts.dir - т.е. для eel шрифтов нет совсем.
<CODE>
static void
ensure_local_font_table (void)
{
char *user_font_dir;
if (global_font_table != NULL) {
return;
}
/* Populate the default font table if needed. Use the installed fonts
* if available. Otherwise use the ones in the source tree itself, so
that
* checks will work even if Eel has not undergone 'make install.'
*/
if (g_file_exists (DEFAULT_FONT_DIRECTORY "/" DEFAULT_FONT)) {
font_manager_collect_font_tables (DEFAULT_FONT_DIRECTORY,
&global_font_table);
} else {
font_manager_collect_font_tables (SOURCE_FONT_DIRECTORY,
&global_font_table);
}
/* Populate the user font table if needed */
user_font_dir = g_strdup_printf ("%s/.nautilus/%s", g_get_home_dir (),
USER_FONT_DIRECTORY_NAME);
if (g_file_test (user_font_dir, G_FILE_TEST_ISDIR)) {
font_manager_collect_font_tables (user_font_dir, &global_font_table);
}
g_free (user_font_dir);
/* Populate the system font table if needed - using the font server's
configuration */
if (!try_using_font_server (global_font_table)) {
/* If that didnt work, then fallback to the directories known at
configure time. */
#ifdef EEL_POSSIBLE_FONT_DIRECTORIES
EelStringList *possible_dirs;
guint i;
char *nth_dir;
possible_dirs = eel_string_list_new_from_tokens
(EEL_POSSIBLE_FONT_DIRECTORIES,
",",
TRUE);
for (i = 0; i < eel_string_list_get_length (possible_dirs); i++) {
nth_dir = eel_string_list_nth (possible_dirs, i);
font_manager_collect_font_tables (nth_dir, &global_font_table);
g_free (nth_dir);
}
eel_string_list_free (possible_dirs);
#endif
}
g_atexit (free_font_tables);
}
</CODE>
Ну, кто чего думает по сему поводу?
Дмитрий
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]