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

Back to archive index

tati****@kc5***** tati****@kc5*****
2011年 10月 30日 (日) 13:14:47 JST


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

JM の HTMLページは直ってましたね。

> > | 036-JM3.patch … man2html.c への grolbp.1 への対応
> > 
> > 更に試すとまだ抜けがありました。
> > #どうも泥縄だなぁ、、、
> > 
> > とりあえず直したものを再度添付します。
> 
> このパッチは、',' か '\n' があった際に無条件で次の行の書式を作成するのではなく、
> 次の文字が有効なフォーマット文字が見つかった場合に、作成するということですね。

はい。

> > diff -ruN man-1.6g-2/man2html/man2html.c.orig man-1.6g-2/man2html/man2html.c
> > --- man-1.6g-2/man2html/man2html.c.orig	2011-10-28 15:12:20.000000000 +0900
> > +++ man-1.6g-2/man2html/man2html.c	2011-10-29 03:30:59.000000000 +0900
> > @@ -868,6 +868,7 @@
> >  }
> >  
> >  char *scan_expression(char *c, int *result);
> > +char itemsep='\t';
> 
> これは、itemsep は scan_table() 内で table format specification に応じて
> 変更されることがあるので、グローバル変数にすることで scan_format() 内でも
> 利用できるということですね。

groff  で試してみると、孤立した '.' の前に無視すべきものは itemsep もあったので
そうしました。

> >  static char *scan_format(char *c, TABLEROW **result, int *maxcol)
> >  {
> > @@ -941,13 +942,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==' ' || *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++;
> 
> 細かなことですが、
> 文字をスキップさせるための while ループの条件は、
> switch (*c) 文の条件の「default にマッチする場合」も必要ですね。
> 意味を持たない文字だけが書かれて format specification が終わっていた場合には、
> 例えば、"\nx." みたいになっている場合には、
> while の次のループで default にマッチして、文字が飛ばされて、
> そのまま while loop が終わってしまい、元のバグと同じ状況が発生すると思います。
> 
> # 条件は、正確には、今の条件+defualt にマッチする条件+e/E の場合、ですが、
> # 書きにくい・・・・上に、次回修正する際にバグなしに直すのが大変そうです。
> # あまり特殊な条件まで考慮しても大変なので、この辺りで止めるのが懸命な気がします。

そもそも、.TS の記述で '.' が孤立してるのって grolbp.1 だけなんですよね。
#groff-1.21 でも頑固に孤立したまま
この辺で切り上げます。

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




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