[JM:00671] Re: man2html: unable to open or read file man1/bash.1

Back to archive index

Akihiro MOTOKI amoto****@gmail*****
2012年 5月 15日 (火) 21:25:57 JST


元木です。

ありがとうございます。私の方でも動作確認できましたので、
JM のサイトにも反映しました。
今回の問題についてはこれで良さそうですね。

今回ご報告があった、「man2html: unable to open or read file man1/bash.1」と
[JM:00542] で報告があった問題も発生しない状態になりました。

> # なお、workaround と言っている理由は、「空行(相当)判定が ad hoc」、
> # 「空行を読み飛ばす悪影響はないか?」「.TP 以外は怖いので見てない」
> # というあたりですw

".PD" が本来どういう意味を持っているのか、私も確認できていません。
これを考慮して本来どうすべきなのかを判断する必要がありそうですね。

最近 man2html は事実上 Debian パッケージでしかメンテされていないようです。
そちらにバグレポートしてみて、メンテナーの意見を聞いてみようと思います。

".TP" 以外はチェックしていない点については、".TP" の処理が複数行に渡っているので、
今回のように対処するというのは、きちんとした対処だと思います。

以上です。

2012年5月14日 19:15 Masakazu Takahashi <emasa****@gmail*****>:
>  こんにちは。
>
> 2012/5/14 Akihiro MOTOKI <amoto****@gmail*****>:
>> 今回の問題を解決するには、[JM:00542] のスレッドで報告された問題に対して
>> 根本的な対処をする必要がありますが、どなたか見て頂けるのであればお願いします。
>> man2html.c は訳が分からないスパゲッティコードですが・・・・
>> 現在 JM で使っている man2html のソースは JM Git の admin/man-1.6g/man2html/ 以下に
>> 登録してあり、それをコンパイルしたものを /home/groups/l/li/linuxjm/bin/ 以下に置いています。
>
>  ちょろっと見てみました。
>
>  まず、man2html の中でも、.PD は無視(空行扱い)されるようになっています。
> が、.TP の処理が以下のようになっていました。
>
> (1) <DL>開始。"<DT>"も出力
> (2) 1行読んで処理し出力
> (3) "<DD>"を出力
>
>  ここで、(2) の“1 行”に、.PD 行やコメント行、空行も合致します。
> そのため、問題となっていたような出力となります。
>
>  そこで、(2) の前に
>
> (1.5) 空行相当の行を読み飛ばす。
>
> という処理を追加してみたところ、それっぽい結果になりました。
>
>  以下、ご参考までに、workaround なパッチです。
>
> # なお、workaround と言っている理由は、「空行(相当)判定が ad hoc」、
> # 「空行を読み飛ばす悪影響はないか?」「.TP 以外は怖いので見てない」
> # というあたりですw
>
>
>
> --- man2html.c.orig     2012-05-14 17:47:49.564457056 +0900
> +++ man2html.c  2012-05-14 18:56:55.777933209 +0900
> @@ -1703,6 +1703,23 @@ skip_till_newline(char *c)
>     return c;
>  }
>
> +static char *
> +skip_blank_lines(char *c)
> +{
> +    char *c2;
> +
> +    /* XXX: it's workaround */
> +    while ((c[0] == '\n') ||
> +          ((c[0] == '.') &&
> +           ((V(c[1],c[2]) == V('\\','"')) ||
> +            (V(c[1],c[2]) == V('P','D')) ))) {
> +       c2 = skip_till_newline(c);
> +       if (c2 == c) break;
> +       c = c2;
> +    }
> +    return c;
> +}
> +
>  int ifelseval=0;
>
>  static char *
> @@ -2200,6 +2217,7 @@ scan_request(char *c) {
>        case V('T','P'):
>            dl_begin();
>            c=skip_till_newline(c);
> +           c=skip_blank_lines(c);
>            /* somewhere a definition ends with '.TP' */
>            if (!*c) still_dd=1; else {
>                c=scan_troff(c,1,NULL);
>
>
> --
> Masakazu Takahashi (emasaka)
>
> _______________________________________________
> linuxjm-discuss mailing list
> linux****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/linuxjm-discuss



-- 
Akihiro MOTOKI <amoto****@gmail*****>




linuxjm-discuss メーリングリストの案内
Back to archive index