Bug 16795 - неправильное перекодирование man-страниц
Summary: неправильное перекодирование man-страниц
Status: REOPENED
Alias: None
Product: Sisyphus
Classification: Development
Component: yelp (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Yuri N. Sedunov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-08-21 09:51 MSD by ildar
Modified: 2009-08-08 20:27 MSD (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description ildar 2008-08-21 09:51:50 MSD
в yelp открываю man-страницу zcat
вижу следующее:
GZIP(1)
îáú÷áîéå

gzip, gunzip, zcat - ÓÖÁÔØ ÉÌÉ ÒÁÓÐÁËÏ×ÁÔØ ÆÁÊÌÙ
Comment 1 Alexey Shabalin 2008-08-22 13:18:17 MSD
yelp ожидает увидеть UTF-8.
а наши руские man-pages в koi8-r
наш man не поддерживает параметра для преобразования на лету (как в debian например). Я сам на это давно наткнулся, но багу что-то не повесил.
Comment 2 Mikhail Gusarov 2008-08-22 13:19:42 MSD
Тут чинят: bug 16680
Comment 3 Alexey Rusakov 2008-08-22 13:33:04 MSD
Так и запишем - зависит от бага 16680 :)
Comment 4 Slava Semushin 2008-08-22 13:40:17 MSD
Я не понимаю, как баг про неверное отображение кавычки может блокировать баг с неправильным перекодированием страниц в yelp?

После исправления bug #16680 yelp сам не починится. IMHO вам нужно патчить yelp, чтобы он перекодировал в UTF8, либо тогда все маны нужно конвертировать в юникод.
Comment 5 Alexey Rusakov 2008-08-22 13:41:58 MSD
Yelp использует man для показа страниц внутри себя. Дальше объяснять?
Comment 6 Slava Semushin 2008-08-22 13:45:45 MSD
(In reply to comment #5)
> Yelp использует man для показа страниц внутри себя. Дальше объяснять?

Да, желательно.

Насколько я понимаю всё эту кухню, man возвращает текст в кодироке пользователя. Если я прав, то у Ильдара, должно быть, однобитная локаль.

2ildar@: у вас локаль какая?

Comment 7 Mikhail Gusarov 2008-08-22 13:48:22 MSD
yelp'у нужно будет лишь объяснить, что нужно выставить требуемую кодировку. Однострочный патч. Ты уже в этом баге про yelp написал больше, чем объём этого патча.
Comment 8 Alexey Rusakov 2008-08-22 13:53:04 MSD
yelp никуда не возвращает текст, он его просто показывает, поэтому вопрос о кодировке стоит не здесь. Просто man сейчас возвращает русские man'ы в KOI8-R, а yelp считает, что ему дают уже готовый уникод. Можно исправить yelp, чтобы он узнал, что это KOI8-R, но лучше исправить man в сторону поддержки кодировок и затем исправить yelp так, чтобы он объяснял man'у, что ему нужен уникод.
Теперь понятнее?
Я только что на ru_RU.UTF-8 у себя воспроизвёл этот баг.
Comment 9 ildar 2008-08-22 13:55:17 MSD
однобитная - это Вы хватили. Остановимся на однобайтной.
нет, у меня UTF-8
Я не стал уточнять детали, т.к. посчитал, что ошибка легко проверяется.
Comment 10 Yuri N. Sedunov 2008-08-22 13:59:57 MSD
(In reply to comment #8)
> yelp никуда не возвращает текст, он его просто показывает, поэтому вопрос о
> кодировке стоит не здесь. Просто man сейчас возвращает русские man'ы в KOI8-R, а yelp
> считает, что ему дают уже готовый уникод. Можно исправить yelp, чтобы он узнал,
> что это KOI8-R, но лучше исправить man в сторону поддержки кодировок и затем
> исправить yelp так, чтобы он объяснял man'у, что ему нужен уникод.
> Теперь понятнее?
> Я только что на ru_RU.UTF-8 у себя воспроизвёл этот баг.
> 

Кажется, не всё так просто -- попробуйте перекодировать к-н русскую ман-страницу в utf-8. Этот "готовый уникод" yelp покажет не лучше, чем koi8-r.
Comment 11 Slava Semushin 2008-08-22 14:00:13 MSD
(In reply to comment #8)
> Просто man сейчас возвращает русские man'ы в KOI8-R

Нет, man должен возвращать текст в локали пользователя, бишь если у вас ru_RU.UTF8, то и текст в ней должен приходить.

Например:

[c0der@xxx ~]$ man test >test.man
[c0der@xxx ~]$ file test.man
test.man: UTF-8 Unicode text, with overstriking

У вас не так?
Comment 12 Yuri N. Sedunov 2008-08-22 19:18:48 MSD
Кто б сказал, кто тут самый виноватый
=============================================================================
$ head -3 /home/aris/temp/gzip.1
.\" Перевод выполнен: 28.12.2000, Роман Медяков <merv@utb.ru>
.\" Последнее обновление: 11.07.2003 Александр Блохин <sass@altlinux.ru>
.TH "GZIP" "1" "" "" "Файловые утилиты GNU"
===============================================================================
$ less /home/aris/temp/gzip.1
GZIP(1)                 ФайловÑе ÑÑилиÑÑ GNU                 GZIP(1)



ÐÐÐÐÐÐÐÐ
       gzip, gunzip, zcat - ÑжаÑÑ Ð¸Ð»Ð¸ ÑаÑпаковаÑÑ ÑайлÑ

СÐÐТÐÐСÐС
       gzip [ -acdfhlLnNrtvV19 ] [ -S ÑÑÑÑÐ¸ÐºÑ ] [ Ñайл ... ]
       gunzip [ -acfhlLnNrtvV ] [ -S ÑÑÑÑÐ¸ÐºÑ ] [ Ñайл ... ]
       zcat [ -fhLV ] [ Ñайл ... ]
.....

==========================================================================
$ man /home/aris/temp/gzip.1
GZIP(1)                                  Файлов<D1>е <D1><D1>или<D1><D1> GNU                                  GZIP(1)

<D0>^H<D0><D0>^H<D0><D0>^H<D0><D0>^H<D0><D0>^H<D0><D0>^H<D0><D0>^H<D0><D0>^H<D0>
       gzip, gunzip, zcat - <D1>жа<D1><D1> или <D1>а<D1>пакова<D1><D1> <D1>айл<D1>

<D0>^H<A1><D0>^H<D0><D0>^H<D0><D0>^HТ^H<A2><D0>^H<D0><D0>^H<D0><D0>^H<A1><D0>^H<D0><D0>^H<A1>
       gzip [ -acdfhlLnNrtvV19 ] [ -S <D1>^H<D1><D1>^H<D1><D1>^H<D1><D1>^H<D1><D0>^H<B8><D0>^Hк^H<BA><D1>^H<D1> ] [ <D1><D0>
<B0><D0><B9><D0><BB> ... ]
       gunzip [ -acfhlLnNrtvV ] [ -S <D1>^H<D1><D1>^H<D1><D1>^H<D1><D1>^H<D1><D0>^H<B8><D0>^Hк^H<BA><D1>^H<D1> ] [ <D1>>^H
Comment 13 Alexey Rusakov 2008-08-23 05:02:51 MSD
(In reply to comment #11)
> (In reply to comment #8)
> > Просто man сейчас возвращает русские man'ы в KOI8-R
> 
> Нет, man должен возвращать текст в локали пользователя, бишь если у вас ru_RU.UTF8,
> то и текст в ней должен приходить.
> 
> Например:
> 
> [c0der@xxx ~]$ man test >test.man
> [c0der@xxx ~]$ file test.man
> test.man: UTF-8 Unicode text, with overstriking
> 
> У вас не так?
Однако так... Пойду-ка я в исходники yelp погляжу.
Comment 14 Alexey Rusakov 2008-08-23 05:13:39 MSD
Господи, да там же открытым текстом всё написано.
    /* FIXME: get the language */
    language = "C";

    /* default encoding if the language doesn't match below */
    encoding = g_getenv("MAN_ENCODING");
    if (encoding == NULL)
	encoding = "ISO-8859-1";

В общем, yelp вход от man воспринимает даже не как UTF-8, а как ISO-8859-1. В принципе, к этому уже можно писать патчи. Возможно, кстати, стоит взглянуть на natspec.
Comment 15 Slava Semushin 2008-08-23 09:25:27 MSD
Т.о. bug #16680 не мешает исправлению этого бага.
Comment 16 Yuri N. Sedunov 2008-08-31 23:19:17 MSD
(In reply to comment #14)
> Господи, да там же открытым текстом всё написано.
>     /* FIXME: get the language */
>     language = "C";
> 
>     /* default encoding if the language doesn't match below */
>     encoding = g_getenv("MAN_ENCODING");
>     if (encoding == NULL)
>         encoding = "ISO-8859-1";
> 
> В общем, yelp вход от man воспринимает даже не как UTF-8, а как ISO-8859-1. В принципе, к
> этому уже можно писать патчи. Возможно, кстати, стоит взглянуть на natspec.

Yelp не использует man, а парсит файлы самостоятельно, и взять их кодировку ему неоткуда. 

Comment 17 Yuri N. Sedunov 2008-09-01 14:16:06 MSD
fixed in 2.23.1-alt3
Comment 18 ildar 2008-09-03 08:42:39 MSD
Мну... я понимаю, работа проделана большая.. Но:
bash(1):

  ОПЦИИ
  Помимо однобуквенных опций командного интерпретатора, представленных
  в описании встроенной команды set, bash 
  интерпретирует при вызове следующие опции:
  -c ������

а в терминале вижу:
  -c строка
Comment 19 Yuri N. Sedunov 2008-09-03 09:33:31 MSD
(In reply to comment #18)
> Мну... я понимаю, работа проделана большая.. Но:
> bash(1):

Пока работы было на три строчки.

>   ОПЦИИ
>   Помимо однобуквенных опций командного интерпретатора, представленных
>   в описании встроенной команды set, bash 
>   интерпретирует при вызове следующие опции:
>   -c ������
> 
> а в терминале вижу:
>   -c строка
> 
Это вы уже придираетесь.
Comment 20 ildar 2008-09-03 09:38:35 MSD
может и придираюсь :-) но я не нарочно ;)
Давайте не будем пока закрывать в таком состоянии, а?
Comment 21 Yuri N. Sedunov 2008-09-03 09:45:44 MSD
(In reply to comment #20)
> может и придираюсь :-) но я не нарочно ;)
> Давайте не будем пока закрывать в таком состоянии, а?
> 
Разумеется.
Comment 22 Yuri N. Sedunov 2008-09-20 20:03:12 MSD
исправлено в yelp-2.23.91-alt1
Comment 23 ildar 2008-09-23 09:31:42 MSD
Согласен
Comment 24 ildar 2008-10-13 20:59:49 MSD
предлагаю переоткрыть:

страница convert(1) (пакет ImageMagic): 
SEE-ALSO
       ImageMagick(1)

в yelp видно только 
       (1)

Вообще страница выглядит иначе (виноват новый man?): раньше, кажется, опции оканчивались разрывом абзаца, а сейчас это какая-то мешанина.
Comment 25 ildar 2009-02-05 21:12:23 MSK
почти четыре месяца - ни одного возражения. Переоткрываю. Причина - комент №24
Comment 26 ildar 2009-05-25 09:55:16 MSD
man qemu-img в разделе "fmt" вообще не показывает то, что в двойных кавычках:
"raw", "qcow2", "qcow" и т.д.

Кто прокомментирует - где проблема? man2html с задачей справляется лучше.
Comment 27 Alexey Rusakov 2009-08-08 15:33:39 MSD
Передаю мейнтейнеру, который по этому багу уже сделал больше меня.
Comment 28 Yuri N. Sedunov 2009-08-08 15:44:21 MSD
(In reply to comment #27)
> Передаю мейнтейнеру, который по этому багу уже сделал больше меня.

Я не уверен, что смогу найти багу в yelp'овском парсере.
Comment 29 ildar 2009-08-08 20:27:12 MSD
Посоветуетесь с апстримом?