diff -urNP ../../work.bak/groff-1.10/README.jgroff-0.99+ ./README.jgroff-0.99+
--- ../../work.bak/groff-1.10/README.jgroff-0.99+	Thu Jan  1 09:00:00 1970
+++ ./README.jgroff-0.99+	Tue May  5 00:23:07 1998
@@ -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 ޤϢꤤޤ
diff -urNP ../../work.bak/groff-1.10/devdvi/DESC.in ./devdvi/DESC.in
--- ../../work.bak/groff-1.10/devdvi/DESC.in	Mon May  4 23:16:43 1998
+++ ./devdvi/DESC.in	Tue May  5 00:23:07 1998
@@ -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
diff -urNP ../../work.bak/groff-1.10/devnippon/DESC.proto ./devnippon/DESC.proto
--- ../../work.bak/groff-1.10/devnippon/DESC.proto	Mon May  4 23:17:06 1998
+++ ./devnippon/DESC.proto	Tue May  5 00:23:10 1998
@@ -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
diff -urNP ../../work.bak/groff-1.10/devps/DESC.in ./devps/DESC.in
--- ../../work.bak/groff-1.10/devps/DESC.in	Mon May  4 23:17:06 1998
+++ ./devps/DESC.in	Tue May  5 00:23:13 1998
@@ -2,7 +2,7 @@
 hor 1
 vert 1
 lowerwchar 300
-wcharkern 400
+wcharkern 3000
 sizescale 1000
 unitwidth 1000
 sizes 1000-10000000 0
diff -urNP ../../work.bak/groff-1.10/troff/charinfo.h ./troff/charinfo.h
--- ../../work.bak/groff-1.10/troff/charinfo.h	Mon May  4 23:17:01 1998
+++ ./troff/charinfo.h	Tue May  5 00:23:08 1998
@@ -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)
diff -urNP ../../work.bak/groff-1.10/troff/env.cc ./troff/env.cc
--- ../../work.bak/groff-1.10/troff/env.cc	Mon May  4 23:17:01 1998
+++ ./troff/env.cc	Tue May  5 00:26:20 1998
@@ -291,27 +291,14 @@
       /*
        * This node is a ASCII character node.
        */
-      if (!pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) {
+      // (1) 
+      // ֡ wordפ֡wordפȤΤǡspace_node 
+      if (!pre_char_is_ascii && enable_wcharkern &&
+	  (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 +306,126 @@
 	space_total -= ns_node->nspaces();
 	delete ns_node;
       }
-
-      if (pre_wchar_kinsoku_mode != -1 &&
-	  pre_wchar_kinsoku_mode != charinfo::POST_KINSOKU &&
-	  !ci->pre_kinsoku()) {
+      // (2)Ĵ
+      if (!pre_char_is_ascii && enable_wcharkern){
 	/*
-	 * 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);
+	    }
+	  }
       }
+      // (3) ʸ ASCII ʸǤ뤳Ȥ򼨤
+      pre_char_is_ascii = 1;
+      // (4) ()[]{}ζ§ʸ -1 ǤϤʤΤȤ
       pre_wchar_kinsoku_mode = ci->get_kinsoku();
-
-      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);
+    } else {
+      /*
+       * This node is a EUC charcater node.
+       */
+      // (1) 
+      // ָ ס( ס) ס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;
+      }
+
+      // (2) ʸζ§¸Ƥ
+      int pre_wchar_kinsoku_mode_back = ci->get_kinsoku();
+      // (3) Ĵ
+      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;
+	  }
+	}
       }
+      // (4) ʸζ§
+      pre_wchar_kinsoku_mode = pre_wchar_kinsoku_mode_back;
+      // (5) ʸ ASCII ʸǤ뤳Ȥ򼨤
       pre_char_is_ascii = 0;
 
       if (!vlower.is_zero()) {
@@ -2014,6 +2101,10 @@
 
 void environment::do_break()
 {
+#ifdef NIPPON
+//  pre_char_is_ascii=1;				// THis is GOOD
+  enable_wcharkern = 0;
+#endif
   if (curdiv == topdiv && topdiv->before_first_page) {
     topdiv->begin_page();
     return;
@@ -2538,6 +2629,11 @@
 
 void environment::handle_tab(int is_leader)
 {
+#ifdef NIPPON
+// horikawa
+//  pre_char_is_ascii=0;				// This is GOOD
+  enable_wcharkern = 0;					// This is also GOOD
+#endif
   hunits d;
   if (current_tab)
     wrap_up_tab();
diff -urNP ../../work.bak/groff-1.10/troff/input.cc ./troff/input.cc
--- ../../work.bak/groff-1.10/troff/input.cc	Mon May  4 23:17:02 1998
+++ ./troff/input.cc	Tue May  5 00:23:08 1998
@@ -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 */
 }
 
diff -urNP ../../work.bak/groff-1.10/troff/node.cc ./troff/node.cc
--- ../../work.bak/groff-1.10/troff/node.cc	Mon May  4 23:17:02 1998
+++ ./troff/node.cc	Tue May  5 00:23:09 1998
@@ -4296,6 +4296,23 @@
 {
     return NODE_NEWLINE_SPACE;
 }
+//To hanlde Japanese tbl, space_node does not return NODE_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)
diff -urNP ../../work.bak/groff-1.10/troff/node.h ./troff/node.h
--- ../../work.bak/groff-1.10/troff/node.h	Mon May  4 23:17:02 1998
+++ ./troff/node.h	Tue May  5 00:23:09 1998
@@ -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,10 @@
   void ascii_print(ascii_output_file *);
   int same(node *);
   const char *type();
+//To handle Japanese tbl, space_node does not return NODE_SPACE.
+//#ifdef NIPPON
+//  node_type get_node_type();
+//#endif
 };
 
 class word_space_node : public space_node {
@@ -184,6 +188,9 @@
   void tprint(troff_output_file *);
   int same(node *);
   const char *type();
+#ifdef NIPPON
+  node_type get_node_type();
+#endif
 };
 
 #ifdef	NIPPON
@@ -209,6 +216,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 +234,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 {
