Date: Thu, 13 Mar 1997 00:39:12 +0900 (JST) From: Kazuhiko Kiriyama(System administrator) <kiri@kiri.toba-cmt.ac.jp> To: FreeBSD-gnats-submit@freebsd.org Subject: ports/2962: Update the port(jp-groff-0.99):japanese/groff. Message-ID: <199703121539.AAA22413@kiri.toba-cmt.ac.jp> Resent-Message-ID: <199703121540.HAA20309@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2962 >Category: ports >Synopsis: Update the port(jp-groff-0.99):japanese/groff. >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-ports >State: open >Class: support >Submitter-Id: current-users >Arrival-Date: Wed Mar 12 07:40:02 PST 1997 >Last-Modified: >Originator: Kazuhiko Kiriyama >Organization: Toba National College of Maritime Technology. Department of Electronic Mechanical Engineering >Release: FreeBSD 2.2-970205-GAMMA i386 >Environment: >Description: I've updated the port(jp-groff-0.99):japanese/groff. Current modifications are (1) Let PS output normally. (2) Include japanese corrections by Kazuo Horikawa. I put the diff from ports-current(japanese/groff) in "Fix:". Newly add file is patches/patch-ab >How-To-Repeat: >Fix: diff -aurN ../../current/ports/japanese/groff/Makefile ./Makefile --- ../../current/ports/japanese/groff/Makefile Mon Jan 27 22:56:59 1997 +++ ./Makefile Sun Feb 16 17:33:47 1997 @@ -21,12 +21,21 @@ USE_GMAKE= yes GNU_CONFIGURE= yes -DNDP= ${WRKSRC}/devnippon/DESC.proto +DESCS= ${WRKSRC}/devnippon/DESC.proto ${WRKSRC}/devps/DESC.in #for not writing "/usr/local" explicitly in the patch post-patch: - /bin/mv -f ${DNDP} ${DNDP}.tmp - /usr/bin/sed -e '$$d' ${DNDP}.tmp > ${DNDP} - /bin/echo "postpro ${PREFIX}/bin/grotty" >> ${DNDP} + @for f in ${DESCS}; do \ + /bin/mv -f $${f} $${f}.tmp; \ + ${SED} -e '$$d' $${f}.tmp > $${f}; \ + case $${f} in \ + */devnippon/*) \ + ${ECHO} "postpro ${PREFIX}/bin/grotty" >> $${f}; \ + ;; \ + */devps/*) \ + ${ECHO} "postpro ${PREFIX}/bin/grops" >> $${f}; \ + ;; \ + esac; \ + done .include <bsd.port.mk> diff -aurN ../../current/ports/japanese/groff/patches/patch-ab ./patches/patch-ab --- ../../current/ports/japanese/groff/patches/patch-ab Thu Jan 1 09:00:00 1970 +++ ./patches/patch-ab Wed Mar 12 23:50:55 1997 @@ -0,0 +1,486 @@ +--- README.jgroff-0.99+ Thu Jan 1 09:00:00 1970 ++++ README.jgroff-0.99+ Sun Feb 23 00:21:41 1997 +@@ -0,0 +1,63 @@ ++ 日本語対応版 groff-1.10 (jgroff-0.99) unofficial patch ++ ++ 堀川和雄 (Horikawa Kazuo) ++ k-horik@yk.rim.or.jp ++ ++1. このパッチの効用 ++ GNU の roff フォーマッタ groff (version 1.10) の日本語版、jgroff-0.99 の ++非公式パッチです。 ++ このパッチにより、整形結果が以下のように変更されます。 ++ この結果、ソース中のスペース文字に依存せず一定の出力が得られます。 ++ ++ o EUC 文字 (jisx0208.1983) 間のスペースは削除されます。 ++ o EUC 文字と ASCII 文字との間に単一スペースを挿入します。既に(複数の) ++ スペースが有る場合には、単一のスペースにします。 ++ ただし以下の場合にはスペースを挿入しません。既に(複数の)スペースが ++ 有る場合には、スペースを削除します。 ++ - 「(語」「`語」等、先行する ASCII 文字が行末禁則文字の場合。 ++ - 「語)」「語'」「語.」等、後続する ASCII 文字が行頭禁則文字の場合。 ++ - 「、word」「)word」等、先行する EUC 文字が行頭禁則文字であり、 ++ EUC 文字フォント中の右半分が空白の文字の場合。 ++ このような文字は、。,.)〕]}」』】です。 ++ - 「(word」「「word」等、先行する EUC 文字が行末禁則文字の場合。 ++ - 「word、」「word)」等、後続する EUC 文字が行頭禁則文字であり、 ++ EUC 文字フォント中の右半分が空白の文字の場合。 ++ o 行頭、および行末禁則を以下のように変更しました。 ++ (行末禁則文字「([{`<」を追加) ++ 行頭禁則文字: 、 。,.・:;?!)〕]}」』】 ++ ぁぃぅぇぉっゃゅょァィゥェォッャュョ ++ . ? ! " ' ) ] * , : ; > } ++ 行末禁則文字: ( 〔[{「『【 ++ ( [ { ` < ++ o EUC 文字と ASCII 文字との間のスペース間隔をすべて DESC 中の ++ wcharkern で指定するものとしました。devnippon, devdvi, devps では ++ wcharkern が定義してあります。 ++ ++ ++2. インストール方法 ++ 1) groff-1.10.tar.gz を展開する。 ++ 2) jgroff-0.99.diff.gz を適用する。 ++ 3) jgroff-0.99+.diff.gz (このパッチ) を適用する。 ++ 4) 以降 README.jp にあるとおりにインストールして下さい。 ++ ++ ++3. 未対応部分 ++ o 「/etc/profile と .profile ファイル」が「/etc/profile と.profile ファイル」 ++ ^くっつく ++ となってしまう。 ++ o word が マクロ展開の結果だとうまくいかないケースが有る。 ++ たとえば ++ - 「、改行.Nm csh」が「、 csh」となる ++ ^空きすぎ ++ や ++ - 「、改行.Ar source_file」が「、 sourcefile」 ++ ^空きすぎ ++ となる。 ++ o devX100, devX75 等の DESC の wcharkern が未設定 ++ ++ ++4. お願い ++ 本パッチを使用して表示結果が改善された/改悪された等のコメント、ソー ++スコードをこのように変更するとより良い表示結果となる等のアドバイスを募 ++集しています。 ++ k-horik@yk.rim.or.jp まで連絡願います。 +--- devdvi/DESC.in Sat Feb 22 22:38:37 1997 ++++ devdvi/DESC.in Sun Feb 23 00:04:04 1997 +@@ -3,6 +3,7 @@ + res 57816 + hor 1 + vert 1 ++wcharkern 1500 + sizes 500 600 700 800 900 1000 1100 1200 1400 1440 1600 1728 1800 + 2000 2074 2200 2400 2488 2800 3600 0 + fonts 15 R I B BI 0 0 0 0 0 MI S EX CW M G +--- devnippon/DESC.proto Sat Feb 22 22:38:38 1997 ++++ devnippon/DESC.proto Sun Feb 23 00:04:04 1997 +@@ -3,6 +3,7 @@ + vert 40 + unitwidth 10 + sizes 10 0 ++wcharkern 24 + fonts 6 R I B BI M G + ondemand M G + tcommand +--- devps/DESC.in Sat Feb 22 22:38:39 1997 ++++ devps/DESC.in Sun Feb 23 00:04:04 1997 +@@ -2,7 +2,7 @@ + hor 1 + vert 1 + lowerwchar 300 +-wcharkern 400 ++wcharkern 3000 + sizescale 1000 + unitwidth 1000 + sizes 1000-10000000 0 +--- troff/charinfo.h Sat Feb 22 22:38:56 1997 ++++ troff/charinfo.h Sun Feb 23 00:04:04 1997 +@@ -52,7 +52,10 @@ + #ifdef NIPPON + , + PRE_KINSOKU = 0x100, +- POST_KINSOKU = 0x200 ++ POST_KINSOKU = 0x200, ++ HALF = 0x1000, ++ PRE_KINSOKU_HALF = 0x1100, ++ POST_KINSOKU_HALF = 0x1200 + #endif + }; + enum { +@@ -96,6 +99,7 @@ + int pre_kinsoku(); + int post_kinsoku(); + int get_kinsoku(); ++ int zenkaku_half(); + #endif + }; + +@@ -152,12 +156,24 @@ + inline int charinfo::get_kinsoku() + { + if (flags & PRE_KINSOKU) +- return PRE_KINSOKU; ++ if(flags & HALF) ++ return PRE_KINSOKU_HALF; ++ else ++ return PRE_KINSOKU; + else if (flags & POST_KINSOKU) +- return POST_KINSOKU; ++ if(flags & HALF) ++ return POST_KINSOKU_HALF; ++ else ++ return POST_KINSOKU; + else + return 0; + } ++ ++inline int charinfo::zenkaku_half() ++{ ++ return flags & HALF; ++} ++ + #endif + + inline charinfo *charinfo::get_translation(int transparent_throughput) +--- troff/env.cc Sat Feb 22 22:38:56 1997 ++++ troff/env.cc Sun Feb 23 00:04:04 1997 +@@ -291,27 +291,13 @@ + /* + * This node is a ASCII character node. + */ +- if (!pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) { ++ // 「、 word」を「、word」としたいので、space_node を削る処理 ++ if (!pre_char_is_ascii && ++ (line->get_node_type() == NODE_NEWLINE_SPACE || ++ line->get_node_type() == NODE_SPACE || ++ line->get_node_type() == NODE_KWORD_SPACE)) { + /* +- * Insert a little space node between EUC and ASCII. +- */ +- word_space_node *ws; +- +- if (ci->ends_sentence() || ci->transparent() || ci->pre_kinsoku()) +- ws = new unbreakable_space_node(hwkern.to_units()); +- else +- ws = new word_space_node(hwkern.to_units()); +- curenv->add_node(ws); +- } +- pre_char_is_ascii = 1; +- pre_wchar_kinsoku_mode = -1; +- } else { +- /* +- * This node is a EUC charcater node. +- */ +- if (!pre_char_is_ascii && line->get_node_type() == NODE_NEWLINE_SPACE) { +- /* +- * remove a newline-node. ++ * remove a newline_node/space_node/kword_space_node. + */ + node *ns_node = line; + line = line->next; +@@ -319,26 +305,129 @@ + space_total -= ns_node->nspaces(); + delete ns_node; + } +- +- if (pre_wchar_kinsoku_mode != -1 && +- pre_wchar_kinsoku_mode != charinfo::POST_KINSOKU && +- !ci->pre_kinsoku()) { ++ if (!pre_char_is_ascii && enable_wcharkern ++ // 以下の条件は、 ++ // 「語 word」が「語 word」とならないようにするガード。 ++ // 直前の if ブロックで space_node を削ったので、 ++ // これは要らないはずなのでコメントアウトする。 ++ // && ++ // line->get_node_type() != NODE_SPACE && ++ // line->get_node_type() != NODE_NEWLINE_SPACE && ++ // line->get_node_type() != NODE_KWORD_SPACE) ++ ){ + /* +- * add a zero-width-space-node before EUC charcater node. ++ * Insert a little space node between EUC and ASCII. + */ +- add_node(new kword_space_node()); +- met_with_kword_space = 1; ++ // 「語word」を「語 word」とする処理はじめ ++ if (ci->ends_sentence() || ci->transparent() || ci->pre_kinsoku()) ++ // 「語.」「語;」は空白入れない ++ // transparent はさわらない ++ // 「語)」も空白入れない ++ ; ++ else ++ if(pre_wchar_kinsoku_mode == charinfo::PRE_KINSOKU_HALF){ ++ // 「)word」には幅0空白を入れる ++ // 「、word」には幅0空白を入れる ++ add_node(new kword_space_node()); ++ met_with_kword_space = 1; ++ } else if(pre_wchar_kinsoku_mode == charinfo::POST_KINSOKU_HALF){ ++ // 「(word」には空白入れない ++ ; ++ } else { ++ // 「語word」には空白を入れる ++ if(line->get_node_type() == NODE_GLYPH){ ++ word_space_node *ws; ++ ws = new word_space_node(hwkern.to_units()); ++ curenv->add_node(ws); ++ } ++ } + } ++ pre_char_is_ascii = 1; ++ // ()[]{}の禁則文字も -1 じゃないようにしてみます ++ //pre_wchar_kinsoku_mode = -1; + pre_wchar_kinsoku_mode = ci->get_kinsoku(); ++ } else { ++ /* ++ * This node is a EUC charcater node. ++ */ ++ // 「語 語」「( 語」「) 語」「word )」「word )」は一度空白を削除 ++ if (((!pre_char_is_ascii) || ++ //「語 語」 ++ (pre_wchar_kinsoku_mode == charinfo::POST_KINSOKU) || ++ // 「( 語」 ++ (pre_wchar_kinsoku_mode == charinfo::PRE_KINSOKU) || ++ // 「) 語」 ++ (ci->pre_kinsoku() && ci->zenkaku_half()) || ++ // 「word )」 ++ (ci->post_kinsoku() && ci->zenkaku_half()) ++ // 「word (」 ++ ) && ++ (line->get_node_type() == NODE_NEWLINE_SPACE || ++ line->get_node_type() == NODE_SPACE || ++ line->get_node_type() == NODE_KWORD_SPACE)) { ++ /* ++ * remove a newline-node. ++ */ ++ node *ns_node = line; ++ line = line->next; ++ width_total -= ns_node->width(); ++ space_total -= ns_node->nspaces(); ++ delete ns_node; ++ } + +- if (pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) { +- /* +- * Insert a little space node between ASCII and EUC. +- */ +- unbreakable_space_node *ws = +- new unbreakable_space_node(hwkern.to_units()); +- curenv->add_node(ws); ++ int pre_wchar_kinsoku_mode_back = ci->get_kinsoku(); ++ if (enable_wcharkern && ++ // 以下は ++ // 「word 語」が「word 語」とならないようにするガード。 ++ // 「word 語」は、直前の if ブロックで space_node を削られていない。 ++ line->get_node_type() != NODE_SPACE && ++ line->get_node_type() != NODE_NEWLINE_SPACE && ++ line->get_node_type() != NODE_KWORD_SPACE){ ++ if(pre_char_is_ascii){ ++ /* ++ * Insert a little space node between ASCII and EUC. ++ */ ++ if(ci->post_kinsoku() && ci->zenkaku_half()){ ++ // 「word(」の間には幅0空白を入れる ++ add_node(new kword_space_node()); ++ met_with_kword_space = 1; ++ } else if(ci->pre_kinsoku() && ci->zenkaku_half()){ ++ // 「word、」の間には空白を入れない ++ // 「word)」の間には空白を入れない ++ ; ++ } else if(pre_wchar_kinsoku_mode == charinfo::POST_KINSOKU){ ++ // 「(語」「[語」「{語」「`語」の間には空白を入れない ++ ; ++ } else if(pre_wchar_kinsoku_mode == charinfo::PRE_KINSOKU){ ++ // 「)語」「]語」「}語」「'語」の間には空白を入れる ++// if(line->get_node_type() == NODE_GLYPH){ ++ { ++ word_space_node *ws; ++ ws = new word_space_node(hwkern.to_units()); ++ curenv->add_node(ws); ++ } ++ } else { ++ // 以下は「word語」を「word 語」にする処理 ++ if(line->get_node_type() == NODE_GLYPH){ ++ word_space_node *ws; ++ ws = new word_space_node(hwkern.to_units()); ++ curenv->add_node(ws); ++ } ++ } ++ } else { ++ /* ++ * Insert a zero width space node between EUC and EUC ++ */ ++ if(ci->pre_kinsoku()){ ++ // 「語、」「語ぉ」の間には空白入れない ++ ; ++ } else { ++ add_node(new kword_space_node()); ++ met_with_kword_space = 1; ++ } ++ } + } ++ pre_wchar_kinsoku_mode = pre_wchar_kinsoku_mode_back; + pre_char_is_ascii = 0; + + if (!vlower.is_zero()) { +--- troff/input.cc Sat Feb 22 22:38:57 1997 ++++ troff/input.cc Sun Feb 23 00:04:05 1997 +@@ -4680,6 +4680,12 @@ + charset_table[';']->set_flags(charinfo::PRE_KINSOKU); + charset_table['>']->set_flags(charinfo::PRE_KINSOKU); + charset_table['}']->set_flags(charinfo::PRE_KINSOKU); ++ charset_table['\'']->set_flags(charinfo::PRE_KINSOKU); ++ charset_table['(']->set_flags(charinfo::POST_KINSOKU); ++ charset_table['[']->set_flags(charinfo::POST_KINSOKU); ++ charset_table['{']->set_flags(charinfo::POST_KINSOKU); ++ charset_table['`']->set_flags(charinfo::POST_KINSOKU); ++ charset_table['<']->set_flags(charinfo::POST_KINSOKU); + for (int ku = 0; ku < WCTABLE_SIZE; ku++) { + for (int ten = 0; ten < WCTABLE_SIZE; ten++) { + wchar euccode = calc_euccode(ku, ten); +@@ -4690,11 +4696,11 @@ + } + } + wcharset_table_entry(make_euc_code(0xa1, 0xa2)) /* 、*/ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xa3)) /* 。*/ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xa4)) /* , */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xa5)) /* . */ + ->set_flags(charinfo::PRE_KINSOKU); + wcharset_table_entry(make_euc_code(0xa1, 0xa6)) /* ・ */ +@@ -4708,19 +4714,19 @@ + wcharset_table_entry(make_euc_code(0xa1, 0xaa)) /* ! */ + ->set_flags(charinfo::PRE_KINSOKU); + wcharset_table_entry(make_euc_code(0xa1, 0xcb)) /* ) */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xcd)) /* 〕 */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xcf)) /* ] */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xd1)) /* } */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xd7)) /* 」 */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xd9)) /* 』 */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xdb)) /* 】 */ +- ->set_flags(charinfo::PRE_KINSOKU); ++ ->set_flags(charinfo::PRE_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa4, 0xa1)) /* ぁ */ + ->set_flags(charinfo::PRE_KINSOKU); + wcharset_table_entry(make_euc_code(0xa4, 0xa3)) /* ぃ */ +@@ -4759,19 +4765,19 @@ + ->set_flags(charinfo::PRE_KINSOKU); + + wcharset_table_entry(make_euc_code(0xa1, 0xca)) /* ( */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xcc)) /* 〔 */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xce)) /* [ */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xd0)) /* { */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xd6)) /* 「 */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xd8)) /* 『 */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + wcharset_table_entry(make_euc_code(0xa1, 0xda)) /* 【 */ +- ->set_flags(charinfo::POST_KINSOKU); ++ ->set_flags(charinfo::POST_KINSOKU_HALF); + #endif /* NIPPON */ + } + +--- troff/node.cc Sat Feb 22 22:38:58 1997 ++++ troff/node.cc Sun Feb 23 00:04:05 1997 +@@ -4296,6 +4296,22 @@ + { + return NODE_NEWLINE_SPACE; + } ++node_type space_node::get_node_type() ++{ ++ return NODE_SPACE; ++} ++node_type word_space_node::get_node_type() ++{ ++ return NODE_SPACE; ++} ++node_type unbreakable_space_node::get_node_type() ++{ ++ return NODE_SPACE; ++} ++node_type diverted_space_node::get_node_type() ++{ ++ return NODE_SPACE; ++} + #endif + + int unbreakable_space_node::same(node *nd) +--- troff/node.h Sat Feb 22 22:38:58 1997 ++++ troff/node.h Sun Feb 23 00:04:05 1997 +@@ -31,7 +31,7 @@ + + enum hyphenation_type { HYPHEN_MIDDLE, HYPHEN_BOUNDARY, HYPHEN_INHIBIT }; + #ifdef NIPPON +-enum node_type {NODE_GLYPH, NODE_KWORD_SPACE, NODE_NEWLINE_SPACE, NODE_ANOTHER}; ++enum node_type {NODE_GLYPH, NODE_KWORD_SPACE, NODE_NEWLINE_SPACE, NODE_ANOTHER, NODE_SPACE}; + #endif + + class ascii_output_file; +@@ -173,6 +173,9 @@ + void ascii_print(ascii_output_file *); + int same(node *); + const char *type(); ++#ifdef NIPPON ++ node_type get_node_type(); ++#endif + }; + + class word_space_node : public space_node { +@@ -184,6 +187,9 @@ + void tprint(troff_output_file *); + int same(node *); + const char *type(); ++#ifdef NIPPON ++ node_type get_node_type(); ++#endif + }; + + #ifdef NIPPON +@@ -209,6 +215,9 @@ + node *copy(); + int same(node *); + const char *type(); ++#ifdef NIPPON ++ node_type get_node_type(); ++#endif + breakpoint *get_breakpoints(hunits width, int nspaces, breakpoint *rest = 0, + int is_inner = 0); + int nbreaks(); +@@ -224,6 +233,9 @@ + int reread(int *); + int same(node *); + const char *type(); ++#ifdef NIPPON ++ node_type get_node_type(); ++#endif + }; + + class diverted_copy_file_node : public node { >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703121539.AAA22413>