Bug 22361 - russian label is spaced wrong in -T svg
Summary: russian label is spaced wrong in -T svg
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: graphviz (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Michael Shigorin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-11-22 18:53 MSK by ildar
Modified: 2010-09-11 19:22 MSD (History)
4 users (show)

See Also:


Attachments
test.dot (181 bytes, text/plain)
2009-11-22 18:54 MSK, ildar
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description ildar 2009-11-22 18:53:48 MSK
-T pdf отрабатывает нормально. Но -T svg делает бокс недостаточно широким для надписи
Comment 1 ildar 2009-11-22 18:54:48 MSK
Created attachment 4074 [details]
test.dot

test case
Comment 2 Michael Shigorin 2009-11-28 00:30:41 MSK
Не затруднит сообщить в апстрим? (http://graphviz.org/Bugs.php)

С ними общаюсь, но не знаю, когда доберусь -- сейчас всё-таки спать надо.
Comment 3 Sergey Kurakin 2010-09-09 21:51:13 MSD
(In reply to comment #0)
> -T pdf отрабатывает нормально. Но -T svg делает бокс недостаточно широким для
> надписи

У меня не воспроизводится, текст помещается с запасом.

Полагаю, что проблема в шрифте, который у Вас выбирается в качестве
"Times Roman,serif" при просмотре svg.
Comment 4 ildar 2010-09-10 09:54:26 MSD
Сергей, Вам зачёт. Действительно, если добавить fontname= , то проблема исчезает. Причём для любого шрифта.
Comment 5 Sergey Kurakin 2010-09-10 12:55:03 MSD
(In reply to comment #4)
Очевидно, при жестком задании шрифта graphviz пользуется метриками этого конкретного шрифта. Без указания шрифта он рассчитывает ширину бокса относительно метрик абстрактного "Times Roman,serif". А уже при просмотре у Вас под это определение подставляется нечто более широкое.

Более гибкого поведения от graphviz трудно было бы ожидать. Закроем?
Comment 6 ildar 2010-09-10 13:28:35 MSD
Нет, Сергей, не согласен.

1. Times Roman - это не абстрактный файл.
$ fc-list --verbose 'Times Roman' | grep file
	file: "/usr/share/fonts/htmldoc/Times-BoldItalic.pfa"(s)
	file: "/usr/share/fonts/htmldoc/Times-Bold.pfa"(s)
	file: "/usr/share/fonts/htmldoc/Times-Roman.pfa"(s)
	file: "/usr/share/fonts/htmldoc/Times-Italic.pfa"(s)

2. У них метрики берутся неправильно. Причём, как я уже писал, брать правильные они могут! (если указать шрифт явно).

3. Момент истины!
На самом деле, бокс строится по метрикам Times Roman, а текст просмотрщики показывают шрифтом serif.
Я не знаю, в каком порядке правильно пробовать шрифты, но 
1. Inkview и gqview показывают шрифт serif
2. GraphicsMagick display показывает каким-то шрифтом, похожим на Times Roman

Это что, бага просмоторщиков?
Comment 7 Michael Shigorin 2010-09-10 13:58:55 MSD
Хм, а если оставить один serif?
Comment 8 ildar 2010-09-10 14:07:18 MSD
Миша, я покрутил так и сяк, и пришёл к такому выводу (см. пред. пост).

(В ответ на комментарий №7)
> Хм, а если оставить один serif?
Тут всё просто:
1. Если ставишь fontname= , в SVG попадает только один этот шрифт.
2. Если не указываешь fontname, то в SVG попадает 
font-family="Times Roman,serif", и тогда начинаются глюки.
Comment 9 Sergey Kurakin 2010-09-10 14:38:54 MSD
(In reply to comment #6)
> 1. Times Roman - это не абстрактный файл.

По мне -- так абстрактный. Их существует много реализаций разной степени кривизны. И особенно за пределами Latin-1.

> 2. У них метрики берутся неправильно. Причём, как я уже писал, брать правильные
> они могут! (если указать шрифт явно).

Вот это я и называю разумной гибкостью.
Если конкретный шрифт не указан, то graphviz _обязан_ строить идентичные svg на разных системах, независимо от того какой набор шрифтов установлен. Вспомните недавнюю дискуссию в devel@ вокруг dia, который на разных архитектурах давал разный результат.
Если же шрифт указан конкретно, то здесь уже можно взять метрики непосредственно из шрифта, полагая, что пользователь знает, что делает.
По моему разумению, чтобы обеспечить идентичность, для абстрактных шрифтов graphviz должен бы носить метрики с собой. Или ориентироваться на какой-либо конкретный шрифт, заведомо установленный в системе и заведомо не кривой. Это надо бы проверить.

> 3. Момент истины!
> На самом деле, бокс строится по метрикам Times Roman, а текст просмотрщики
> показывают шрифтом serif.

А точно не наоборот? Порядок шрифтов в font-family -- слева направо, и просмотрщики должны бы предпочесть Times Roman при его наличии.
Comment 10 ildar 2010-09-10 15:02:55 MSD
(В ответ на комментарий №9)
> (In reply to comment #6)
> > 3. Момент истины!
> > На самом деле, бокс строится по метрикам Times Roman, а текст просмотрщики
> > показывают шрифтом serif.
> 
> А точно не наоборот? Порядок шрифтов в font-family -- слева направо, и
> просмотрщики должны бы предпочесть Times Roman при его наличии.

я подозреваю, что в алфавитном порядке.
Впрочем, правдивость моих слов нетрудно выяснить простым экспериментом: вставив в test.dot строку: fontname="Times Roman".

Мой вывод такой: надо повесить багу на inkscape (или просто перевесить эту багу, с изменением Subject), и посмотреть, что они скажут. Из всех просмотрщиков inkview самый правильный.

P.S. в своих выводах по пункту 2 я убеждён. Вряд ли graphviz таскает с собой какие-то метрики. Впрочем, это несложно проверить в RTFS.
Comment 11 Sergey Kurakin 2010-09-11 16:49:27 MSD
(In reply to comment #10)
> Впрочем, это несложно проверить в RTFS.

Решил начать с RTFM и обнаружил замечательный документ, дающий ответы на все наши вопросы:
/usr/share/doc/graphviz-2.24.0/fontfaq.txt из пакета graphviz-doc.

Ваш вопрос рассмотрен под заголовком "What about SVG fonts?". Там даже inkscape упомянут в связи с тем, что не умеет CSS в полной мере и допускает путаницу со шрифтами. Возможно, -Gfontnames=svg решит Ваш вопрос даже в отношении inkscape. 

Кстати, Ваш "Момент истины" из #6 полностью подтверждается этим документом.

Так что здесь всё-таки NOTABUG.

Думаю, что вешать что-нибудь на inkscape бессмысленно. Если уж разработчики graphviz знают о проблеме, то разработчики inkscape должны знать и подавно.

P.S. А вот мой вопрос, похоже, решается отрицательно. По умолчанию graphviz любит Times-Roman и берет метрики из шрифта, который fontconfig считает за таковой. То есть идентичного SVG на разных системах не получится. Ну да и ладно...
Comment 12 ildar 2010-09-11 19:22:00 MSD
Согласен полностью