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***** 立花 晃@鎌ヶ谷市