Re: [gnome-cyr] Scrollkeeper



On Wed, 21 Mar 2001, Dmitry G . Mastrukov wrote:

> На Втр, 20 Мар 2001 22:15:23 Vlad Harchev написал:
> > > И как они спасают положение, вернее, что там сделано, чтобы спасти
> > > положение, в чём юникодность шрифта. Только наличие в одном
> > шрифтовом
> > > файле большого количества глифов ещё ничего не даёт. У меня (это
> > > свойство 4.0 сервера) из этого шрифтового файла можно получить
> > кучу
> > > кодировок. И наличие какой кодировки решает проблему? Я обычно для
> > ttf
> > > ставлю две кодировки - iso8859-1 и koi8-r, сейчас поставил и
> > > iso10646-1, т.е уникод. Сейчас пришла в голову совсем безумная
> > идея
> > > попробовать utf-8. Я уже экпериментировал, алиасил Вердану на
> > Люсиду и
> > > Люсиду Санс (всё равно что установил Люсиду) - ноль эффекта.
> > 
> >  Вроде XFree86 даже и не поддерживает вывод текста в utf8, и при
> > использовании
> > кодироки iso10646-1 (может только последние XFree86 cvs snapshots)..
> >  Но я в коде Nau от Feb25 смотрел - он запрашивает от XLib именно
> > XLFD c *-* в
> > реджистри-энкодинг, с * в качестве foundry (то есть не adobe) - и
> > почему на
> > такой XLFD возвращается iso-1 шрифт - непонятно (как будто локаль 
> > компонентов bonobo неправильно выставляется). Надо будет в
> > /proc/$PID/environ
> > посмотреть какой $LANG у запущенных компонентов - есть еще
> > подозрение что он
> > не тот, который нужен (а сбрасывается в "C" например или вообще не
> > устанавливается, или gtk_set_locale() не вызывается функцией
> > инициализации
> > компонента). Надо будет смотреть в этих направлениях..
> >  
> 
> Просмотрел окужение апплетов Нау, везде ru_RU.KOI8-R.
> А gtk_set_locale(), по идее, должна вызываться из гномовских
> (бонобошных) инициализаций. Кроме того, ведь даже в Нау обычный
> текст-то выводится нормально. Глюки только с закладками, да с

 Да, я тоже посмотрел, у всех компонентов $LANG=ru_RU.KOI8-R, и каждый вызвал
gtk_set_locale() с нужной локалью..

> десктопом при гладкости шрифта. И дело здесь в собственном отображении
> Нау глифов, не даром же он freetype2 требует. Когда я собрал 0.8, то
> порадовался на прекрасное качество шрифта, даже с выключенной
> гладкостью. Потом беру XFree 4.0.3 и обнаруживаю, что при сборке 4.0.2
> забыл включить использование freetype2. В 4.0.3 freetype2
> компилируется сама. И вот я нахожу в терминале точно такой же по
> качеству шрифт, только русский нормально (XTerm переведён на
> использование XFont/XRender). Т.е. Нау бежит впереди паровоза - уже
> нет никакой необходимости тащить весь вывод шрифта, но только для
> XFree 4-ой версии, а пользующих четвёрку пока не абсолютное
> большинство, кажется. Так что рыть надо не в локали, а в
> freetype-related.

 Короче, щас немного поискал - наверно собака порылась в
/librsvg/rsvg-ft.c:rsvg_ft_measure_or_render_string()

Она подразумевает, что строка - в iso8859-1 кодировке. И имеет вот такой
фрагмент:
        for (i = 0; i < length; i++) {
                RsvgFTGlyph *glyph;

                glyph_index = FT_Get_Char_Index (font->face,
                                                 ((unsigned char *)str)[i]);

                /* FIXME bugzilla.eazel.com 2775: Need a better way to deal
                 * with unknown characters.
                 *
                 * The following is just a band aid fix.
                 */
                if (glyph_index == 0) {
                        glyph_index = FT_Get_Char_Index (font->face, '?');
                }

 Вот предпоследняя строка наверно и виновна в появлении '?' для русского. А
FT_Get_Char_Index работает с Unicode - надо ей и передавать unicode значение
символа.. 
 Как достану Nau-1.0  - поковыряю и может починю.
  
> Дмитрий

 Best regards,
  -Vlad


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]