Bug 16879 - Вызывает gtbl до groff
: Вызывает gtbl до groff
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/man)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2008-08-25 10:23 by
Modified: 2009-04-24 10:16 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-08-25 10:23:58
groff-base-1.19.3-alt1.20080814

У меня не получилось заставить nroff нормально отображать маны в однобайтовых
кодировках при юникодной локали.

Вот test case:

[c0der@xxx ~]$ (echo ".\\\" -*- coding: utf-8 -*-"; zcat
/usr/share/man/ru/man1/test.1.gz | iconv -f koi8-r -t utf8) >test-utf.1
[c0der@xxx ~]$ head  test-utf.1
.\" -*- coding: utf-8 -*-
.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.35.
.TH TEST "1" "Май 2006" "test 5.97" "Команды пользователя"
.SH ИМЯ
test \- проверяет типы файлов и сравнивает значения
.SH ОБЗОР
.B test
\fIВЫРАЖЕНИЕ\fR
.br
.B test
[c0der@xxx ~]$ gzip test-utf.1
[c0der@xxx ~]$ sudo mv -vf test-utf.1.gz /usr/share/man/ru/man1
`test-utf.1.gz' -> `/usr/share/man/ru/man1/test-utf.1.gz'
removed `test-utf.1.gz'

Далее man test-utf и я не вижу русского, вижу лишь кракозябры.

man-1.6f-alt2, nroff запускается с опциями -Dkoi8-r -Tutf8 -mandoc

Также не работает указание и других кодировок (вроде koi8-r/cp1251, кстати
CP1251 и KOI8-U, похоже вообще не распознаются? Я вижу, что они
закомментированы в файле groff/src/preproc/preconv/preconv.cpp, также
распознаётся только строка UTF-8, но не UTF8, возможно, лучше распознавать и то
и другое).
------- Comment #1 From 2008-08-25 14:43:30 -------
$ locale 
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

$ bzcat /usr/share/man/ru/man1/gpg.1.bz2 > /tmp/gpg.1

$ head -3 /tmp/gpg.1 
.\" -*- mode: troff; coding: koi8-r -*-
.TH "gpg" "1" 
.SH "NAME"

$ groff -Dkoi8-r -Tutf8 -mandoc /tmp/gpg.1 |head -6
gpg(1)                                                                  gpg(1)



NAME
       gpg — инструмент для шифрования и цифровой подписи

$ groff -k -Tutf8 -mandoc /tmp/gpg.1 |head -6
gpg(1)                                                                  gpg(1)



NAME
       gpg — инструмент для шифрования и цифровой подписи

$ iconv -fkoi8-r -tutf8 < gpg.1  > gpg-utf.1

$ head -3 /tmp/gpg-utf.1 
.\" -*- mode: troff; coding: utf-8 -*-
.TH "gpg" "1" 
.SH "NAME"

$ groff -Dkoi8-r -Tutf8 -mandoc gpg-utf.1 |head -6
gpg(1)                                                                  gpg(1)



NAME
       gpg — инструмент для шифрования и цифровой подписи
---

У меня всё видно. Можно точный testcase приаттачить к баге ?
------- Comment #2 From 2008-08-25 14:56:22 -------
Действительно портит всё не nroff, а gtbl:

$ cat man1/gpg-utf.1 | nroff -Dkoi8-r -Tutf8 -mandoc

Так видно.

$ cat man1/gpg-utf.1 | gtbl | nroff -Dkoi8-r -Tutf8 -mandoc

Так уже всё в кракозябрах возвращается. А man именно вот так запускает.
------- Comment #3 From 2008-08-25 15:08:54 -------
(In reply to comment #2)
> Действительно портит всё не nroff, а gtbl:
> 
> $ cat man1/gpg-utf.1 | nroff -Dkoi8-r -Tutf8 -mandoc
> 
> Так видно.
> 
> $ cat man1/gpg-utf.1 | gtbl | nroff -Dkoi8-r -Tutf8 -mandoc
> 
> Так уже всё в кракозябрах возвращается. А man именно вот так запускает.

А зачем он groff так запускает?

$ groff -h |grep tbl
-t    preprocess with tbl

Этот ключ nroff транслирует groff:

$ cat /tmp/gpg-utf.1 |tbl | groff -Dkoi8-r -Tutf8 -mandoc |head -6
gpg(1)                                                                  gpg(1)



NAME
       gpg    —    п╦п╫я│я┌я─я┐п╪п╣п╫я┌    п╢п╩я▐    я┬п╦я└я─п╬п╡п╟п╫п╦я▐   п╦

Действительно крокозяблы, но:

$ cat /tmp/gpg-utf.1 | groff -t -Dkoi8-r -Tutf8 -mandoc |head -6
gpg(1)                                                                  gpg(1)



NAME
       gpg — инструмент для шифрования и цифровой подписи

Всё нормально. Оно понятно почему ... groff -k -t запускает tbl после preconv.

Это бага в man.
------- Comment #4 From 2008-08-25 15:26:38 -------
Да, точно. Спасибо, за помощь.
------- Comment #5 From 2008-08-27 14:22:08 -------
Но и это ещё не всё. man добавляет в заголовок файла некоторые команды для
отображения, например:

.ll 12.3i
.nr LL 12.3i
.pl 1100i

В итоге магическая строка с кодировкой сдвигается на 3 строчки и preconv не
может распознать кодировку.
------- Comment #6 From 2008-08-27 14:46:22 -------
(In reply to comment #5)
> В итоге магическая строка с кодировкой сдвигается на 3 строчки и preconv не
> может распознать кодировку.

Просто теперь нужно добавлить несколько сложнее, чем просто дописывать в поток
перед распакованной man-страницей.
------- Comment #7 From 2008-08-28 11:50:57 -------
(In reply to comment #6)
> Просто теперь нужно добавлить несколько сложнее, чем просто дописывать в
> поток перед распакованной man-страницей.

Да уж. Собственно, разобрался вроде. Теперь awk-ом это всё делается.

Вечерком ещё дома проверю на однобайтовой кодировке и выложу новую сборку на
people/
------- Comment #8 From 2008-08-29 21:30:55 -------
(In reply to comment #7)
> Вечерком ещё дома проверю на однобайтовой кодировке и выложу новую сборку
> на people/

ftp://ftp.altlinux.org/pub/people/php-coder/man/man-1.6f-alt3.i586.rpm
------- Comment #9 From 2008-08-30 15:25:48 -------
Reassign to new maintainer.
------- Comment #10 From 2009-04-24 10:16:21 -------
Fixed in 1.6f-alt10