Re: [gnome-cyr] Re: [gnome-cyr] Re: [gnome-cyr] gnome-print и комплектные afm



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]