[JM:00462] Re: SIGNAL(7) の内容に関しまして

Back to archive index

R4000 2.2 tati****@kc5*****
2011年 10月 20日 (木) 18:53:01 JST


こんばんは、立花@鎌ヶ谷市です。

In <m262jkkue0.wl%motok****@da*****>,
 at Date: Thu, 20 Oct 2011 16:13:43 +0900,
  on Subject: [JM:00461] Re: SIGNAL(7) の内容に関しまして ,
   Akihiro MOTOKI <motok****@da*****> writes:

| > がうまく HTML に変換されてませんでした。
| > テーブル定義の最後の '.' が孤立しているのに対処できないようです。
| > 場あたりな修正ですが、以下の diff を当てるととりあえず直りました。
| > #まだありそうな予感、、、
| 
| groff 1.21 の gtbl(7) によると、
|   You may run format specifications for multiple lines together
|   on the same line by separating them with commas.
| となっており、',' と'\n' は同じ意味です。
| したがって、',' と'\n' を分離する対処は正しくないように思います。

あれま、失礼しました。

| 問題の原因は、おそらく内容が空の TABLEROW が作成されてしまい、
| 空の TABLEROW は TABLEITEM を一つしか含まないため、
| 3行目以降が先頭の要素しか出力されていないのだと思います。
| 
| 空の TABLEROW が発生しないようにするのが正しい方向だと思います。

先に送ったメールの修正内容も、場当たりですがそのつもりでした。
ふと考えて試してみると、'.' が孤立するパターンによってまだうまくいかない
場合がありましたので、参考までに末尾に diff を記述しておきます。

| また、私の修正のため、groff 関係のページの HTML が生成されていないことに
| 気付きました。個別に実行してみると Segmentation Fault で止まっていました。
| 今晩にでも原因を調査してみます。
| # 一筋縄ではいかないなぁ....
| 
| amotoki @ sf-usr-shell:/home/groups/l/li/linuxjm$ find htdocs/html -size 0
| htdocs/html/GNU_groff/man7/groff.7.html
| htdocs/html/GNU_groff/man7/roff.7.html
| htdocs/html/GNU_groff/man5/groff_tmac.5.html

手元は
% gcc -v
/usr/lib/gcc/i586-pc-linux/3.4.6/specs から spec を読み込み中
コンフィグオプション: ../gcc-3.4.6/configure --prefix=/usr --infodir=/share/info --mandir=/share/man --build=i586-pc-linux --host=i586-pc-linux --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --enable-libgcj-multifile --enable-languages=c,c++,java,f77,objc
スレッドモデル: posix
gcc バージョン 3.4.6
%

ですが、このコンパイル環境だと元木さんの修正だけで make しても、
Segmentation Fault にならずに変換はできました。

が、、、
groff.7
roff.7
groff_tmap.5
はマニュアルページ中でマクロ定義しているようで、定義したマクロを
使った部分がうまく HTML に変換できていませんでした。

やっかいですね。

| > 〜
| > .TS
| > tab(|) allbox center;
| > c c c c c
| > ab c c c c
| > .
| > 書体 | Regular | Bold | Italic | Bold-Italic
| > Dutch | TR | TB | TI | TBI
| > Swiss | HR | HB | HI | HBI
| > Swiss Narrow | HNR | HNB | HNI | HNBI
| > Courier | CR | CB | CI |
| > Elite | ER | EB | EI |
| > .TE
| > 〜

こんな風にテーブル定義の最後の '.' が孤立しているものは、
man-pages-ja-20110415.tar.gz
で確認したところ、他にはありませんでした。

〜
--- man2html.c.orig	2011-10-20 11:56:44.000000000 +0900
+++ man2html.c	2011-10-20 17:57:34.000000000 +0900
@@ -717,6 +717,7 @@
 }
 
 char *scan_expression(char *c, int *result);
+char itemsep='\t';
 
 static char *scan_format(char *c, TABLEROW **result, int *maxcol)
 {
@@ -790,13 +791,18 @@
 	    curfield->space=i;
 	    break;
 	case ',': case '\n':
-	    currow->next=(TABLEROW*)xmalloc(sizeof(TABLEROW));
-	    currow->next->prev=currow;
-	    currow=currow->next;
-	    currow->next=NULL;
-	    curfield=currow->first=(TABLEITEM*)xmalloc(sizeof(TABLEITEM));
-	    *curfield=emptyfield;
 	    c++;
+	    while (*c==',' || *c=='\n' || *c=='\t' || *c==itemsep) {
+		c++;
+	    }
+	    if ( *c != '.' ) {
+		currow->next=(TABLEROW*)xmalloc(sizeof(TABLEROW));
+		currow->next->prev=currow;
+		currow=currow->next;
+		currow->next=NULL;
+		curfield=currow->first=(TABLEITEM*)xmalloc(sizeof(TABLEITEM));
+		*curfield=emptyfield;
+	    }
 	    break;
 	default:
 	    c++;
@@ -872,7 +878,6 @@
     int center=0, expand=0, box=0, border=0, linesize=1;
     int i,j,maxcol=0, finished=0;
     int oldfont, oldsize,oldfillout;
-    char itemsep='\t';
     TABLEROW *layout=NULL, *currow;
     TABLEITEM *curfield;
     while (*c++!='\n');		/* skip TS */

〜

--
tati****@kc5*****				立花 晃@鎌ヶ谷市




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