1 Submitted By: Archaic (archaic -aT- linuxfromscratch -DoT- org)
3 Initial Package Version: 1.18.1.1
4 Origin: http://ftp.debian.org/debian/pool/main/g/groff/groff_1.18.1.1-11.diff.gz
5 Upstream Status: This is a debian-specific patch
6 Description: Adds the ascii8 and nippon devices to groff for man-db.
8 --- groff-1.18.1.1.orig/README.jp
9 +++ groff-1.18.1.1/README.jp
12 + ÆüËܸìÂбþÈÇ groff-1.12 (jgroff-0.101)
15 + ËÌÀî ¿®µü (Kitagawa Toshiyuki)
16 + tm-kita@kh.rim.or.jp
18 + Ìø¸¶ ÎÉμ (Yanagihara Yoshiaki)
21 + GNU¤Îroff¥Õ¥©¡¼¥Þ¥Ã¥¿groff(version 1.12)¤ÎÆüËܸìÂбþ¤ò¹Ô¤Ê¤¤¤Þ¤·¤¿¡£
22 + ¾å°Ì¸ß´¹¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢ÆüËܸì¤ò´Þ¤Þ¤Ê¤¤roff¥Ç¡¼¥¿¤Ï¥ª¥ê¥¸¥Ê¥ë¤É
23 +¤ª¤ê¤ÎÆ°ºî¤Ë¤Ê¤ê¤Þ¤¹¡£ÆüËܸ첽¤Ë´Ø¤¹¤ë½¤ÀµÉôʬ¤Ë¤Ä¤¤¤Æ¤ÎÃøºî¸¢¤ÏGNU
24 +General Public License Version 2 ¤Ë½¾¤¤¤Þ¤¹(¾ÜºÙ¤ÏCOPYING¤ò¸æÍ÷¤¯¤À¤µ¤¤)¡£
26 + ÆüËܸìgroff(jgroff)¤Î¸½¥Ð¡¼¥¸¥ç¥ó¤Ï0.101(ºÇ½ª¦ÂÈÇ)¤Ç¤¹¡£¤³¤Î¥Ð¡¼¥¸¥ç¥ó
27 +¤Ç¤Ï°Ê²¼¤Î¥â¥¸¥å¡¼¥ë¤¬ÆüËܸ첽¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
29 + groff ... groff¥É¥é¥¤¥Ð
30 + gtroff ... groffËÜÂÎ
31 + grotty ... üËöÍѥݥ¹¥È¥×¥í¥»¥Ã¥µ
32 + grops ... PostScriptÍѥݥ¹¥È¥×¥í¥»¥Ã¥µ
33 + grohtml ... HTMLÍѥݥ¹¥È¥×¥í¥»¥Ã¥µ(Thanks HANATAKA Shinya
34 + <hanataka@abyss.rim.or.jp>)
35 + grodvi ... DVIÍѥݥ¹¥È¥×¥í¥»¥Ã¥µ (NTT JTeX or ASCIIÆüËܸìTeX)
36 + gxditview ... X¥¦¥£¥ó¥É¥¦Íѥݥ¹¥È¥×¥í¥»¥Ã¥µ
37 + gtbl ... tbl¥Þ¥¯¥íÍÑ¥×¥ê¥×¥í¥»¥Ã¥µ
38 + gpic ... pic¥Þ¥¯¥íÍÑ¥×¥ê¥×¥í¥»¥Ã¥µ
39 + geqn ... eqn¥Þ¥¯¥íÍÑ¥×¥ê¥×¥í¥»¥Ã¥µ
40 + xtotroff ... X¤Î¥Õ¥©¥ó¥È¤«¤égroffÍÑ¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹
43 +¡ô lj4¥Ý¥¹¥È¥×¥í¥»¥Ã¥µ¡¢bib´ØÏ¢¤Î¥³¥Þ¥ó¥É¤ÏÆüËܸì̤Âбþ¤Ç¤¹¡£
48 + °Ê²¼¤Î´Ä¶¤Çmake½ÐÍè¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¤¤Þ¤¹¡£
50 + ¡ù FreeBSD 2.1.0-RELEASE
51 + XFree86-3.1.2, gcc 2.6.3
53 + ¡ù Debian GNU/Linux 2.2
56 + SVR4.2 Release9.1 Rev.B, X11R5, gcc 2.6.0
58 + (1) ¥ª¥ê¥¸¥Ê¥ë¤ÈƱÍÍconfigure¤ò¼Â¹Ô¤·¤¿¸å¡¢make & install¤·¤Æ²¼¤µ¤¤¡£
59 + ¾Ü¤·¤¯¤ÏINSTALL¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
61 + *) grodvi¤ÏNTT JTeX·Á¼°¤Þ¤¿¤ÏASCIIÆüËܸìTeX·Á¼°¤ÎDVI¥Õ¥¡¥¤¥ë¤ò¥µ¥Ý¡¼
62 + ¥È¤·¤Æ¤¤¤Þ¤¹¡£groff¤¬½ÐÎϤ¹¤ëDVI¥Õ¥¡¥¤¥ë¤òASCIIÆüËܸìTeX·Á¼°¤Ë
63 + ¤·¤¿¤¤¾ì¹ç¤Ïconfigure --JTeX=ASCII¤È¤·¤Æ¤¯¤À¤µ¤¤¡£
64 + --JTeX¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤ÏNTT JTeX·Á¼°¤Ë¤Ê¤ê¤Þ¤¹¡£
66 + (2) groff¤Îmake¤Î¸å¡¢gxditview(groff¤ÎX¥¦¥£¥ó¥É¥¦Íѥݥ¹¥È¥×¥í¥»¥Ã¥µ)
67 + ¤òmake¤·¤Þ¤¹¡£¥È¥Ã¥×¥Ç¥£¥ì¥¯¥È¥êľ²¼¤Îxditview¤Øcd¤·¤Æ¡¢
72 + % make install install.man
74 + ¤Ç¡¢¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£
79 + groff¤Î-T¥ª¥×¥·¥ç¥ó¤Ë-Tnippon(üËöɽ¼¨)¤òÄɲä·¤¿°Ê³°¤Ï¥ª¥ê¥¸¥Ê¥ë¤Î¤Þ
83 + (£±) groff -Tnippon -man groff.jman
85 + ÆüËܸì¤ò´Þ¤àroff¥Õ¥¡¥¤¥ë(groff.jman)¤òman¥Þ¥¯¥í¤ò»È¤Ã¤Æ¥Õ¥©¡¼¥Þ¥Ã¥È¤·¡¢
88 + (£²) groff -Tps -man groff.jman
90 + ÆüËܸì¤ò´Þ¤àroff¥Õ¥¡¥¤¥ë¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤·¡¢PostScript¤ËÊÑ´¹¤·¤Þ¤¹¡£
92 + (£³) groff -TX100 -man groff.jman
94 + ÆüËܸì¤ò´Þ¤àroff¥Õ¥¡¥¤¥ë¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤·¡¢X¥¦¥£¥ó¥É¥¦¤Ëɽ¼¨¤·¤Þ¤¹¡£
96 + (£´) groff -Tdvi -man groff.jman
98 + ÆüËܸì¤ò´Þ¤àroff¥Õ¥¡¥¤¥ë¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤·¡¢DVI¥Õ¥¡¥¤¥ë¤ò½ÐÎϤ·¤Þ¤¹¡£
103 +¡¦ ÆüËܸìʸ»ú¥³¡¼¥É¤ÏÆüËܸìEUC(¤Î¥³¡¼¥É¥»¥Ã¥È1)¤Î¤ß¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£
105 +¡¦ ÆüËܸì¥Õ¥©¥ó¥È¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥«¥ì¥ó¥È¥Õ¥©¥ó¥È¤¬¥Ü¡¼¥ë¥ÉÂΤλþ¤Ï¥´¥·¥Ã
106 + ¥¯ÂΤˡ¢¤½¤ì°Ê³°¤Î¥Õ¥©¥ó¥È(¥í¡¼¥Þ¥ó¡¢¥¤¥¿¥ê¥Ã¥¯¡¢¥¤¥¿¥ê¥Ã¥¯¥Ü¡¼¥ë¥É
107 + Åù)¤¬¥«¥ì¥ó¥È¥Õ¥©¥ó¥È¤Î»þ¤ÏÌÀÄ«ÂΤˡ¢¼«Æ°Åª¤ËÀÚ¤êÂؤï¤ê¤Þ¤¹¡£ÆüËܸì
108 + ¥Õ¥©¥ó¥È¤òľÀÜ»ØÄꤹ¤ë¤³¤È¤Ï½ÐÍè¤Þ¤»¤ó¡£
110 + (Ãí) ¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë̾¤¬'B'¤Ç½ª¤Ã¤Æ¤¤¤ë¥Õ¥©¥ó¥È(B¡¢TB¡¢HNB¤Ê¤É)¤ò
111 + ¥Ü¡¼¥ë¥É¥Õ¥©¥ó¥È¤È¤·¤Æ¤¤¤Þ¤¹¡£
113 +¡¦ ¹ÔƬ¡¢¤ª¤è¤Ó¹ÔËö¶Ø§¤ËÂбþ¤·¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤¾¤ì¤Î¶Ø§ʸ»ú¤Ï¡¢
115 + ¹ÔƬ¶Ø§ʸ»ú: ¡¢ ¡£¡¤¡¥¡¦¡§¡¨¡©¡ª¡Ë¡Í¡Ï¡Ñ¡×¡Ù¡Û
116 + ¤¡¤£¤¥¤§¤©¤Ã¤ã¤å¤ç¥¡¥£¥¥¥§¥©¥Ã¥ã¥å¥ç
117 + . ? ! " ' ) ] * , : ; > }
118 + ¹ÔËö¶Ø§ʸ»ú: ¡Ê ¡Ì¡Î¡Ð¡Ö¡Ø¡Ú
122 +¡¦ -Tps¤ò»ØÄꤷ¤¿¾ì¹ç¡¢EUCʸ»ú¤ÈASCIIʸ»ú¤Î´Ö¤Ë¤Ï¡¢Éý¤Î¶¹¤¤¶õÇò¤¬¼«Æ°
123 + Ū¤ËÁÞÆþ¤µ¤ì¤Þ¤¹¡£¤³¤Î¶õÇò¤ÎÉý¤Ïdevps/DESC¤Îwcharkern¤Ç»ØÄꤷ¤Þ¤¹¡£
124 + unitñ°Ì¤Ç¤¹¡£0¤ò»ØÄꤹ¤ë¤È¶õÇò¤ÏÁÞÆþ¤µ¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
126 +¡¦ -Tps¤ò»ØÄꤷ¤¿¾ì¹ç¡¢EUCʸ»ú¤ÏASCIIʸ»ú¤ËÂФ·¤Æ¾¯¤·²¼¤²¤Æ½ÐÎϤµ¤ì¤Þ
127 + ¤¹(¤½¤Î¤Þ¤Þ¤À¤ÈASCIIʸ»ú¤¬Íî¤Á¹þ¤ó¤Ç¸«¤¨¤ë¤¿¤á)¡£¤³¤Î²¼¤²Éý¤Ï
128 + devps/DESC¤Îlowerwchar¤Ç»ØÄꤷ¤Þ¤¹¡£unitñ°Ì¤Ç¤¹¡£0¤ò»ØÄꤹ¤ë¤È»ú²¼
129 + ¤²¤Ï¹Ô¤Ê¤ï¤ì¤Þ¤»¤ó¡£
131 +¡¦ ¥ª¥ê¥¸¥Ê¥ë¤Ç¤Ï²þ¹Ô¥³¡¼¥É¤Ï̵¾ò·ï¤Ë¥¹¥Ú¡¼¥¹Ê¸»ú¤ËÊÑ´¹¤µ¤ì¤Þ¤¹¤¬¡¢EUC
132 + ʸ»ú¤Ç°Ï¤Þ¤ì¤¿²þ¹Ô¥³¡¼¥É¤Ï¥¹¥Ú¡¼¥¹¤ËÊÑ´¹¤»¤ºÌµ»ë¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£
134 +¡¦ EUC¤Î¥¹¥Ú¡¼¥¹Ê¸»ú(0xa1a1)¤ÏASCII¤Î¥¹¥Ú¡¼¥¹Ê¸»ú¤È¤·¤Æ½èÍý¤µ¤ì¤Þ¤¹¡£
139 +grodvi¤ÎASCIIÆüËܸìTeXÂбþ¤Ï¡¢±§ÅÔµÜÂç³Ø¤Î²£ÅĤµ¤ó¤¬¹Ô¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤¤Þ
140 +¤·¤¿¡£grohtml¤ÎÆüËܸì(EUC)Âбþ¤Ï¡¢²Ö¿ó¿®ºÈ¤µ¤ó¤¬¹Ô¤Ã¤Æ¤¯¤ì¤Þ¤·¤¿¡£
141 +¤Þ¤¿¡¢Â¿¤¯¤ÎÊý¤«¤é¥Ð¥°¤Ë´Ø¤¹¤ëÊó¹ð¡¢½¤Àµ¥¤¥á¡¼¥¸¤òÁ÷¤Ã¤Æĺ¤¤Þ¤·¤¿¡£
142 +¸æ¶¨ÎϤ¯¤À¤µ¤Ã¤¿³§ÍͤˤϤȤƤⴶ¼Õ¤·¤Æ¤ª¤ê¤Þ¤¹¡£ÍÆñ¤¦¤´¤¶¤¤¤Þ¤·¤¿¡£
147 +¸½¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ïlj4¥Ý¥¹¥È¥×¥í¥»¥Ã¥µ¡¢bib´ØÏ¢¤Î¥³¥Þ¥ó¥É·²¤¬ÆüËܸ첽¤µ¤ì
148 +¤Æ¤ª¤ê¤Þ¤»¤ó¡£¤³¤ì¤é¤ÎÆüËܸ첽¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤ëÊý¤òÊ罸Ãפ·¤Æ¤ª¤ê¤Þ¤¹¡£
149 +¤¼¤Ò¸æ¶¨ÎϤ¯¤À¤µ¤¤¡£¤Þ¤¿¡¢ÆüËܸìÂбþgroff¤Ë´Ø¤·¤Æ¸æ°Õ¸«¡¢¸æ´õ˾Åù¤ò
150 +À§Èó¤ªÊ¹¤«¤»¤¯¤À¤µ¤¤¡£º£¸å¤Î»²¹Í¤Ë¤µ¤»¤Æĺ¤¤Þ¤¹(¤â¤Á¤í¤ó¥Ð¥°Êó¹ð¤â
152 +°Ê¾å¤ÏE-Mail¤Ë¤Æ¡¢tm-kita@kh.rim.or.jp°¸¤Ë¤ªÁ÷¤ê¤¯¤À¤µ¤¤¡£
153 --- groff-1.18.1.1.orig/src/include/config.hin
154 +++ groff-1.18.1.1/src/include/config.hin
156 -/* src/include/config.hin. Generated automatically from configure.ac by autoheader. */
157 +/* src/include/config.hin. Generated from configure.ac by autoheader. */
159 /* Define if your C++ doesn't understand `delete []'. */
160 #undef ARRAY_DELETE_NEEDS_SIZE
162 +/* Define if you want to use multibyte extension. */
163 +#undef ENABLE_MULTIBYTE
165 /* Define if you have a C++ <limits.h>. */
166 #undef HAVE_CC_LIMITS_H
168 /* Define if you have a C++ <osfcn.h>. */
169 #undef HAVE_CC_OSFCN_H
171 -/* Define if you have the <dirent.h> header file. */
172 +/* Define to 1 if you have the <dirent.h> header file. */
175 -/* Define if you have the `fmod' function. */
176 +/* Define to 1 if you have the `fmod' function. */
179 -/* Define if you have the `getcwd' function. */
180 +/* Define to 1 if you have the `getcwd' function. */
183 -/* Define if you have the `getpagesize' function. */
184 +/* Define to 1 if you have the `getpagesize' function. */
185 #undef HAVE_GETPAGESIZE
187 -/* Define if you have the `gettimeofday' function. */
188 +/* Define to 1 if you have the `gettimeofday' function. */
189 #undef HAVE_GETTIMEOFDAY
191 -/* Define if you have the <limits.h> header file. */
192 +/* Define to 1 if you have the <inttypes.h> header file. */
193 +#undef HAVE_INTTYPES_H
195 +/* Define to 1 if you have the `isatty' function. */
198 +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
199 +#undef HAVE_LANGINFO_CODESET
201 +/* Define to 1 if you have the <limits.h> header file. */
204 -/* Define if you have the <math.h> header file. */
205 +/* Define to 1 if you have the <math.h> header file. */
208 +/* Define to 1 if you have the <memory.h> header file. */
209 +#undef HAVE_MEMORY_H
211 /* Define if you have mkstemp(). */
214 -/* Define if you have a working `mmap' system call. */
215 +/* Define to 1 if you have a working `mmap' system call. */
218 -/* Define if you have the `putenv' function. */
219 +/* Define to 1 if you have the `putenv' function. */
222 -/* Define if you have the `rename' function. */
223 +/* Define to 1 if you have the `rename' function. */
226 -/* Define if you have the `snprintf' function. */
227 +/* Define to 1 if you have the `snprintf' function. */
230 -/* Define if you have the `isatty' function. */
233 -/* Define if you have the <stdint.h> header file. */
234 +/* Define to 1 if you have the <stdint.h> header file. */
237 -/* Define if you have the <stdlib.h> header file. */
238 +/* Define to 1 if you have the <stdlib.h> header file. */
241 -/* Define if you have the `strcasecmp' function. */
242 +/* Define to 1 if you have the `strcasecmp' function. */
243 #undef HAVE_STRCASECMP
245 -/* Define if you have the `strerror' function. */
246 +/* Define to 1 if you have the `strerror' function. */
249 -/* Define if you have the <strings.h> header file. */
250 +/* Define to 1 if you have the <strings.h> header file. */
251 #undef HAVE_STRINGS_H
253 -/* Define if you have the <string.h> header file. */
254 +/* Define to 1 if you have the <string.h> header file. */
257 -/* Define if you have the `strncasecmp' function. */
258 +/* Define to 1 if you have the `strncasecmp' function. */
259 #undef HAVE_STRNCASECMP
261 -/* Define if you have the `strsep' function. */
262 +/* Define to 1 if you have the `strsep' function. */
265 -/* Define if you have the `strtol' function. */
266 +/* Define to 1 if you have the `strtol' function. */
269 /* Define if <math.h> defines struct exception. */
270 #undef HAVE_STRUCT_EXCEPTION
272 -/* Define if you have the <sys/dir.h> header file. */
273 +/* Define to 1 if you have the <sys/dir.h> header file. */
274 #undef HAVE_SYS_DIR_H
276 /* Define if you have sys_errlist in <errno.h> or in <stdio.h>. */
278 /* Define if you have sysnerr in <errno.h> or <stdio.h>. */
281 -/* Define if you have the <sys/time.h> header file. */
282 +/* Define to 1 if you have the <sys/stat.h> header file. */
283 +#undef HAVE_SYS_STAT_H
285 +/* Define to 1 if you have the <sys/time.h> header file. */
286 #undef HAVE_SYS_TIME_H
288 -/* Define if you have the <unistd.h> header file. */
289 +/* Define to 1 if you have the <sys/types.h> header file. */
290 +#undef HAVE_SYS_TYPES_H
292 +/* Define to 1 if you have the <unistd.h> header file. */
295 /* Define if the host's encoding is EBCDIC. */
297 /* Define if your C++ doesn't declare strncasecmp(). */
298 #undef NEED_DECLARATION_STRNCASECMP
300 +/* Define to the address where bug reports for this package should be sent. */
301 +#undef PACKAGE_BUGREPORT
303 +/* Define to the full name of this package. */
306 +/* Define to the full name and version of this package. */
307 +#undef PACKAGE_STRING
309 +/* Define to the one symbol short name of this package. */
310 +#undef PACKAGE_TARNAME
312 +/* Define to the version of this package. */
313 +#undef PACKAGE_VERSION
315 /* Define if the printer's page size is A4. */
319 /* Define if srand() returns void not int. */
320 #undef RET_TYPE_SRAND_IS_VOID
322 -/* Define if `sys_siglist' is declared by <signal.h> or <unistd.h>. */
323 +/* Define to 1 if you have the ANSI C header files. */
326 +/* Define to 1 if `sys_siglist' is declared by <signal.h> or <unistd.h>. */
327 #undef SYS_SIGLIST_DECLARED
329 /* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */
330 --- groff-1.18.1.1.orig/src/include/encoding.h
331 +++ groff-1.18.1.1/src/include/encoding.h
334 +/* Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp>
336 +This file is part of groff.
338 +groff is free software; you can redistribute it and/or modify it under
339 +the terms of the GNU General Public License as published by the Free
340 +Software Foundation; either version 2, or (at your option) any later
343 +groff is distributed in the hope that it will be useful, but WITHOUT ANY
344 +WARRANTY; without even the implied warranty of MERCHANTABILITY or
345 +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
348 +You should have received a copy of the GNU General Public License
349 +along with this program; if not, write to the Free Software
350 +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
357 +#ifdef ENABLE_MULTIBYTE
358 +typedef int wchar; // negative is used for charcode & index
366 +class encoding_istream {
368 + encoding_istream() {};
369 + virtual ~encoding_istream() {};
370 + virtual int getbyte() = 0;
371 + virtual int peekbyte() = 0;
372 + virtual void ungetbyte(int ch) = 0;
375 +class encoding_istream_str: public encoding_istream {
377 + const unsigned char *s;
379 + encoding_istream_str() {};
381 + encoding_istream_str(const unsigned char *s0, int *i0) : s(s0), i(i0) {};
382 + ~encoding_istream_str() {};
383 + inline int getbyte() { return s[(*i)++]; };
384 + inline int peekbyte() { return s[(*i)]; };
385 + inline void ungetbyte(int ch) { --(*i); };
388 +class encoding_istream_fp: public encoding_istream {
392 + encoding_istream_fp(FILE *fp0) : fp(fp0) {};
393 + ~encoding_istream_fp() {};
394 + inline int getbyte() { return fgetc(fp); };
395 + inline int peekbyte() { int ch = fgetc(fp); ungetc(ch, fp); return ch; };
396 + inline void ungetbyte(int ch) { ungetc(ch, fp); };
399 +class encoding_ostream {
401 + encoding_ostream() {};
402 + virtual ~encoding_ostream() {};
403 + virtual void putbyte(unsigned char ch) = 0;
406 +class encoding_ostream_str: public encoding_ostream {
411 + encoding_ostream_str() {};
413 + encoding_ostream_str(unsigned char *s0, int *i0, int max) : s(s0), i(i0), len(max) {};
414 + ~encoding_ostream_str() {};
415 + inline void putbyte(unsigned char ch) {
421 +class encoding_ostream_fp: public encoding_ostream {
424 + const char *format;
426 + encoding_ostream_fp(FILE *ofp, const char *fmt = "%c") : fp(ofp), format(fmt) {};
427 + ~encoding_ostream_fp() {};
428 + inline void putbyte(unsigned char ch) {
429 + fprintf(fp, format, ch);
433 +class encoding_handler {
435 + encoding_handler() {};
436 + virtual ~encoding_handler() {};
438 + // name of this encoding_handler
439 + virtual const char *name() { return ""; };
441 + // check if this byte is byte in multibyte character in this encoding?
442 + virtual int is_wchar_byte(unsigned char c) { return 0; };
444 + // make new wchar from c0 (beginning of multibytes) and rest from `in'
445 + virtual wchar make_wchar(unsigned char c0, encoding_istream& in) {
448 + // make new wchar from c0 (beginning of multibytes) and rest from `fp'
449 + virtual wchar make_wchar(unsigned char c0, FILE *fp) {
450 + encoding_istream_fp in(fp);
451 + return make_wchar(c0, in);
453 + // make new wchar from c0 (beginning of multibtyes) and rest from
454 + // s[*i], *i will be changed to point the byte of next character.
455 + virtual wchar make_wchar(unsigned char c0, const unsigned char *s, int *i) {
456 + encoding_istream_str in(s, i);
457 + return make_wchar(c0, in);
460 + // put wchar to outputstream
461 + // returns number of bytes written
462 + virtual int put_wchar(wchar wc, encoding_ostream& eos) {
463 + eos.putbyte((unsigned char)wc);
466 + // put wchar to `fp' using `fmt'
467 + // returns number of bytes written
468 + virtual int put_wchar(wchar wc, FILE *fp, const char *fmt = "%c") {
469 + encoding_ostream_fp out(fp, fmt);
470 + return put_wchar(wc, out);
472 + // put wchar to s[*i] (until maxlen)
473 + // *i will be changed to point the byte of next character.
474 + virtual int put_wchar(wchar wc, unsigned char *s, int *i, int maxlen) {
475 + encoding_ostream_str out(s, i, maxlen);
476 + return put_wchar(wc, out);
479 + // maximum number of bytes of multibyte character in this encoding
480 + virtual int max_wchar_len() { return 1; };
484 +encoding_handler* select_input_encoding_handler(const char* encoding_name);
485 +encoding_handler* select_output_encoding_handler(const char* encoding_name);
486 +extern encoding_handler* input_encoding;
487 +extern encoding_handler* output_encoding;
488 +void init_encoding_handler();
490 +// check if wc is wchar?
491 +int is_wchar_code(wchar wc);
493 +// check if wc is wchar & can be represented in single byte?
494 +int is_wchar_singlebyte(wchar wc);
496 +// get singlebyte representation of wchar (if is_wchar_singlebyte(wc))
497 +unsigned char wchar_singlebyte(wchar wc);
499 +// get actual wide character code
500 +int wchar_code(wchar wc);
502 +// make wchar from wide character code
503 +int make_wchar(int w);
507 +#endif /* ENCODING_H */
508 --- groff-1.18.1.1.orig/src/include/lib.h
509 +++ groff-1.18.1.1/src/include/lib.h
512 extern char invalid_char_table[];
514 +#include "encoding.h" /* XXX: ukai */
516 inline int invalid_input_char(int c)
518 +#ifdef ENABLE_MULTIBYTE
519 + if (input_encoding->is_wchar_byte(c))
523 return c >= 0 && invalid_char_table[c];
526 --- groff-1.18.1.1.orig/src/include/device.h
527 +++ groff-1.18.1.1/src/include/device.h
529 with groff; see the file COPYING. If not, write to the Free Software
530 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
535 extern const char *device;
537 +#endif /* _DEVICE_H */
538 --- groff-1.18.1.1.orig/src/include/config.h
539 +++ groff-1.18.1.1/src/include/config.h
541 +/* src/include/config.h. Generated by configure. */
542 +/* src/include/config.hin. Generated from configure.ac by autoheader. */
544 +/* Define if your C++ doesn't understand `delete []'. */
545 +/* #undef ARRAY_DELETE_NEEDS_SIZE */
547 +/* Define if you want to use multibyte extension. */
548 +#define ENABLE_MULTIBYTE 1
550 +/* Define if you have a C++ <limits.h>. */
551 +#define HAVE_CC_LIMITS_H 1
553 +/* Define if you have a C++ <osfcn.h>. */
554 +/* #undef HAVE_CC_OSFCN_H */
556 +/* Define to 1 if you have the <dirent.h> header file. */
557 +#define HAVE_DIRENT_H 1
559 +/* Define to 1 if you have the `fmod' function. */
562 +/* Define to 1 if you have the `getcwd' function. */
563 +#define HAVE_GETCWD 1
565 +/* Define to 1 if you have the `getpagesize' function. */
566 +#define HAVE_GETPAGESIZE 1
568 +/* Define to 1 if you have the `gettimeofday' function. */
569 +#define HAVE_GETTIMEOFDAY 1
571 +/* Define to 1 if you have the <inttypes.h> header file. */
572 +#define HAVE_INTTYPES_H 1
574 +/* Define to 1 if you have the `isatty' function. */
575 +#define HAVE_ISATTY 1
577 +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
578 +#define HAVE_LANGINFO_CODESET 1
580 +/* Define to 1 if you have the <limits.h> header file. */
581 +#define HAVE_LIMITS_H 1
583 +/* Define to 1 if you have the <math.h> header file. */
584 +#define HAVE_MATH_H 1
586 +/* Define to 1 if you have the <memory.h> header file. */
587 +#define HAVE_MEMORY_H 1
589 +/* Define if you have mkstemp(). */
590 +#define HAVE_MKSTEMP 1
592 +/* Define to 1 if you have a working `mmap' system call. */
595 +/* Define to 1 if you have the `putenv' function. */
596 +#define HAVE_PUTENV 1
598 +/* Define to 1 if you have the `rename' function. */
599 +#define HAVE_RENAME 1
601 +/* Define to 1 if you have the `snprintf' function. */
602 +#define HAVE_SNPRINTF 1
604 +/* Define to 1 if you have the <stdint.h> header file. */
605 +#define HAVE_STDINT_H 1
607 +/* Define to 1 if you have the <stdlib.h> header file. */
608 +#define HAVE_STDLIB_H 1
610 +/* Define to 1 if you have the `strcasecmp' function. */
611 +#define HAVE_STRCASECMP 1
613 +/* Define to 1 if you have the `strerror' function. */
614 +#define HAVE_STRERROR 1
616 +/* Define to 1 if you have the <strings.h> header file. */
617 +#define HAVE_STRINGS_H 1
619 +/* Define to 1 if you have the <string.h> header file. */
620 +#define HAVE_STRING_H 1
622 +/* Define to 1 if you have the `strncasecmp' function. */
623 +#define HAVE_STRNCASECMP 1
625 +/* Define to 1 if you have the `strsep' function. */
626 +#define HAVE_STRSEP 1
628 +/* Define to 1 if you have the `strtol' function. */
629 +#define HAVE_STRTOL 1
631 +/* Define if <math.h> defines struct exception. */
632 +#define HAVE_STRUCT_EXCEPTION 1
634 +/* Define to 1 if you have the <sys/dir.h> header file. */
635 +#define HAVE_SYS_DIR_H 1
637 +/* Define if you have sys_errlist in <errno.h> or in <stdio.h>. */
638 +#define HAVE_SYS_ERRLIST 1
640 +/* Define if you have sysnerr in <errno.h> or <stdio.h>. */
641 +#define HAVE_SYS_NERR 1
643 +/* Define to 1 if you have the <sys/stat.h> header file. */
644 +#define HAVE_SYS_STAT_H 1
646 +/* Define to 1 if you have the <sys/time.h> header file. */
647 +#define HAVE_SYS_TIME_H 1
649 +/* Define to 1 if you have the <sys/types.h> header file. */
650 +#define HAVE_SYS_TYPES_H 1
652 +/* Define to 1 if you have the <unistd.h> header file. */
653 +#define HAVE_UNISTD_H 1
655 +/* Define if the host's encoding is EBCDIC. */
656 +/* #undef IS_EBCDIC_HOST */
658 +/* Define if localtime() takes a long * not a time_t *. */
659 +/* #undef LONG_FOR_TIME_T */
661 +/* Define if your C++ doesn't declare gettimeofday(). */
662 +/* #undef NEED_DECLARATION_GETTIMEOFDAY */
664 +/* Define if your C++ doesn't declare hypot(). */
665 +/* #undef NEED_DECLARATION_HYPOT */
667 +/* Define if your C++ doesn't declare pclose(). */
668 +/* #undef NEED_DECLARATION_PCLOSE */
670 +/* Define if your C++ doesn't declare popen(). */
671 +/* #undef NEED_DECLARATION_POPEN */
673 +/* Define if your C++ doesn't declare putenv(). */
674 +/* #undef NEED_DECLARATION_PUTENV */
676 +/* Define if your C++ doesn't declare strcasecmp(). */
677 +/* #undef NEED_DECLARATION_STRCASECMP */
679 +/* Define if your C++ doesn't declare strncasecmp(). */
680 +/* #undef NEED_DECLARATION_STRNCASECMP */
682 +/* Define to the address where bug reports for this package should be sent. */
683 +#define PACKAGE_BUGREPORT ""
685 +/* Define to the full name of this package. */
686 +#define PACKAGE_NAME ""
688 +/* Define to the full name and version of this package. */
689 +#define PACKAGE_STRING ""
691 +/* Define to the one symbol short name of this package. */
692 +#define PACKAGE_TARNAME ""
694 +/* Define to the version of this package. */
695 +#define PACKAGE_VERSION ""
697 +/* Define if the printer's page size is A4. */
700 +/* Define as the return type of signal handlers (`int' or `void'). */
701 +#define RETSIGTYPE void
703 +/* Define if srand() returns void not int. */
704 +#define RET_TYPE_SRAND_IS_VOID 1
706 +/* Define to 1 if you have the ANSI C header files. */
707 +#define STDC_HEADERS 1
709 +/* Define to 1 if `sys_siglist' is declared by <signal.h> or <unistd.h>. */
710 +#define SYS_SIGLIST_DECLARED 1
712 +/* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */
713 +/* #undef TRADITIONAL_CPP */
715 +/* Define if the 0200 bit of the status returned by wait() indicates whether a
716 + core image was produced for a process that was terminated by a signal. */
717 +/* #undef WCOREFLAG */
719 +/* Define if -D_POSIX_SOURCE is necessary. */
720 +/* #undef _POSIX_SOURCE */
722 +/* Define if you have ISC 3.x or 4.x. */
725 +/* Define uintmax_t to `unsigned long' or `unsigned long long' if <inttypes.h>
727 +/* #undef uintmax_t */
728 --- groff-1.18.1.1.orig/src/include/printer.h
729 +++ groff-1.18.1.1/src/include/printer.h
734 +#include "encoding.h"
742 void load_font(int i, const char *name);
743 +#ifdef ENABLE_MULTIBYTE
744 + void set_wchar_char(wchar c, char *s, int i0, int len, const environment *env, int *widthp = 0);
746 void set_ascii_char(unsigned char c, const environment *env,
748 void set_special_char(const char *nm, const environment *env,
749 --- groff-1.18.1.1.orig/src/include/font.h
750 +++ groff-1.18.1.1/src/include/font.h
752 with groff; see the file COPYING. If not, write to the Free Software
753 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
755 +#include "encoding.h"
757 typedef void (*FONT_COMMAND_HANDLER)(const char *, const char *,
760 struct font_kern_list;
761 struct font_char_metric;
762 +#ifdef ENABLE_MULTIBYTE
763 +struct fontset_list;
764 +struct font_wchar_metric;
766 struct font_widths_cache;
770 const char *get_special_device_encoding(int index);
771 const char *get_name();
772 const char *get_internal_name();
773 +#ifdef ENABLE_MULTIBYTE
774 + const char *get_subfont_name(int index);
777 static int scan_papersize(const char *, const char **, double *, double *);
780 static int load_desc();
781 static int name_to_index(const char *);
782 static int number_to_index(int);
783 +#ifdef ENABLE_MULTIBYTE
784 + static int wchar_index(wchar);
786 static FONT_COMMAND_HANDLER
787 set_unknown_desc_command_handler(FONT_COMMAND_HANDLER);
791 static int sizescale;
793 +#ifdef ENABLE_MULTIBYTE
794 + // XXX: should be in charinfo or font_wchar_metric?
795 + static int lowerwchar;
796 + static int wcharkern;
798 static int pass_filenames;
799 static int use_charnames_in_special;
802 static const char **style_table;
803 static const char *family;
805 +#ifdef ENABLE_MULTIBYTE
806 + // fontsets - sub font list
807 + static fontset_list *fontsets;
808 + // get fontset for `wc' in current font `fname'
809 + static int get_fontset_font(const char *fname, wchar wc);
810 + // is the fontno's font load on demand?
811 + static int is_on_demand(int fontno);
815 font_kern_list **kern_hash_table;
818 + short *ch_index; /* XXX: this is used unless font_wchar_metric. */
820 font_char_metric *ch;
821 +#ifdef ENABLE_MULTIBYTE
822 + // font metric for wchar
823 + font_wchar_metric *wch;
824 + // get font metric for wchar indexed by c
825 + font_wchar_metric *get_font_wchar_metric(int c);
830 --- groff-1.18.1.1.orig/src/include/driver.h
831 +++ groff-1.18.1.1/src/include/driver.h
836 +#include "encoding.h" // XXX: ukai
840 --- groff-1.18.1.1.orig/src/libs/libdriver/input.cc
841 +++ groff-1.18.1.1/src/libs/libdriver/input.cc
846 +#include "encoding.h"
850 @@ -1439,6 +1440,19 @@
851 char *subcmd_str = get_string_arg();
852 char subcmd = subcmd_str[0];
854 +#ifdef ENABLE_MULTIBYTE
855 + case 'e': // x encoding: select encoding
857 + char *str_arg = get_string_arg();
859 + warning("empty argument for `x encoding' command");
861 + select_input_encoding_handler(str_arg);
867 case 'f': // x font: mount font
869 IntArg n = get_integer_arg();
870 @@ -1517,7 +1531,7 @@
875 +////////////////////////////////////////////////////////////////
876 /**********************************************************************
877 exported part (by driver.h)
878 **********************************************************************/
879 @@ -1625,6 +1639,18 @@
880 if (str_arg[0] != 'i')
881 fatal("the third command must be `x init'");
883 +#ifdef ENABLE_MULTIBYTE
884 + Char c = get_char();
885 + while (is_space_or_tab(c) && c != Char('\n') && c != Char(EOF))
888 + if (c != Char('\n') && c != Char(EOF)) {
889 + const char *tmp_encoding = get_string_arg();
890 + if (tmp_encoding && *tmp_encoding)
891 + select_input_encoding_handler(tmp_encoding);
892 + delete tmp_encoding;
898 @@ -1763,6 +1789,18 @@
900 while ((c = str_arg[i++]) != '\0') {
902 +#ifdef ENABLE_MULTIBYTE
903 + if (input_encoding->is_wchar_byte(c)) {
905 + wchar wc = input_encoding->make_wchar(c, (const unsigned char *)str_arg, (int *)&i);
906 + if (is_wchar_code(wc)) {
907 + /* XXX: singlebyte check? */
908 + pr->set_wchar_char(wc, str_arg, i0, i - i0, current_env, &w);
910 + pr->set_ascii_char((unsigned char) c, current_env, &w);
914 pr->set_ascii_char((unsigned char) c, current_env, &w);
915 current_env->hpos += w;
917 --- groff-1.18.1.1.orig/src/libs/libdriver/printer.cc
918 +++ groff-1.18.1.1/src/libs/libdriver/printer.cc
923 +#include "encoding.h"
931 +#ifdef ENABLE_MULTIBYTE
932 +void printer::set_wchar_char(wchar c, char *s, int i0, int len, const environment *env, int *widthp)
934 + unsigned char *buf = new unsigned char[len+1];
935 + memset(buf, 0, len+1);
936 + memcpy(buf, s+i0, len);
939 + int i = set_char_and_width((const char *)buf, env, &w, &f);
941 + set_char(c, f, env, w, (const char *)buf);
949 void printer::set_special_char(const char *nm, const environment *env,
952 --- groff-1.18.1.1.orig/src/libs/libgroff/fontfile.cc
953 +++ groff-1.18.1.1/src/libs/libgroff/fontfile.cc
958 +#include "encoding.h" // XXX: ukai
960 #include "searchpath.h"
966 +#ifdef ENABLE_MULTIBYTE
967 +int font::lowerwchar = 0;
968 +int font::wcharkern = 0;
970 int font::unitwidth = 0;
971 int font::paperwidth = 0;
972 int font::paperlength = 0;
973 --- groff-1.18.1.1.orig/src/libs/libgroff/font.cc
974 +++ groff-1.18.1.1/src/libs/libgroff/font.cc
979 +#include "encoding.h" // XXX: ukai
984 int italic_correction;
985 int subscript_correction;
986 char *special_device_coding;
987 +#ifdef ENABLE_MULTIBYTE
988 + char *subfont_name;
992 +#ifdef ENABLE_MULTIBYTE
993 +struct fontset_list {
994 + struct fontset_list *next;
995 + char *primary_font_name;
1002 +fontset_list *font::fontsets = NULL;
1004 +struct font_wchar_metric {
1005 + struct font_wchar_metric *next;
1012 + int pre_math_space;
1013 + int italic_correction;
1014 + int subscript_correction;
1015 + char *special_device_coding;
1016 + char *subfont_name;
1020 struct font_kern_list {
1023 @@ -149,7 +181,11 @@
1025 font::font(const char *s)
1026 : ligatures(0), kern_hash_table(0), space_width(0), ch_index(0), nindices(0),
1027 - ch(0), ch_used(0), ch_size(0), special(0), widths_cache(0)
1029 +#ifdef ENABLE_MULTIBYTE
1032 + ch_used(0), ch_size(0), special(0), widths_cache(0)
1034 name = new char[strlen(s) + 1];
1036 @@ -183,6 +219,17 @@
1037 widths_cache = widths_cache->next;
1040 +#ifdef ENABLE_MULTIBYTE
1041 + struct font_wchar_metric *wcp, *nwcp;
1042 + for (wcp = wch; wcp != NULL; wcp = nwcp) {
1044 + if (wcp->special_device_coding)
1045 + delete [] wcp->special_device_coding;
1046 + if (wcp->subfont_name)
1047 + delete [] wcp->subfont_name;
1053 static int scale_round(int n, int x, int y)
1054 @@ -244,6 +291,11 @@
1056 int font::contains(int c)
1058 +#ifdef ENABLE_MULTIBYTE
1059 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1063 return c >= 0 && c < nindices && ch_index[c] >= 0;
1066 @@ -266,8 +318,31 @@
1070 +#ifdef ENABLE_MULTIBYTE
1071 +struct font_wchar_metric *
1072 +font::get_font_wchar_metric(int c)
1074 + /* XXX: c is font index, not char code... */
1075 + /* XXX: we assume wchar_code == font index code for wchars */
1076 + /* XXX: does really code conflicts with index? */
1077 + struct font_wchar_metric *wcp;
1078 + for (wcp = wch; wcp != NULL; wcp = wcp->next) {
1079 + if (wcp->start_code <= wchar_code(c) && wchar_code(c) <= wcp->end_code) {
1087 int font::get_width(int c, int point_size)
1089 +#ifdef ENABLE_MULTIBYTE
1090 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1091 + if (wcp != NULL) {
1092 + return scale(wcp->width, point_size);
1095 assert(c >= 0 && c < nindices);
1096 int i = ch_index[c];
1098 @@ -299,30 +374,60 @@
1100 int font::get_height(int c, int point_size)
1102 +#ifdef ENABLE_MULTIBYTE
1103 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1104 + if (wcp != NULL) {
1105 + return scale(wcp->height, point_size);
1108 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1109 return scale(ch[ch_index[c]].height, point_size);
1112 int font::get_depth(int c, int point_size)
1114 +#ifdef ENABLE_MULTIBYTE
1115 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1116 + if (wcp != NULL) {
1117 + return scale(wcp->depth, point_size);
1120 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1121 return scale(ch[ch_index[c]].depth, point_size);
1124 int font::get_italic_correction(int c, int point_size)
1126 +#ifdef ENABLE_MULTIBYTE
1127 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1128 + if (wcp != NULL) {
1129 + return scale(wcp->italic_correction, point_size);
1132 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1133 return scale(ch[ch_index[c]].italic_correction, point_size);
1136 int font::get_left_italic_correction(int c, int point_size)
1138 +#ifdef ENABLE_MULTIBYTE
1139 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1140 + if (wcp != NULL) {
1141 + return scale(wcp->pre_math_space, point_size);
1144 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1145 return scale(ch[ch_index[c]].pre_math_space, point_size);
1148 int font::get_subscript_correction(int c, int point_size)
1150 +#ifdef ENABLE_MULTIBYTE
1151 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1152 + if (wcp != NULL) {
1153 + return scale(wcp->subscript_correction, point_size);
1156 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1157 return scale(ch[ch_index[c]].subscript_correction, point_size);
1159 @@ -371,12 +476,24 @@
1161 int font::get_character_type(int c)
1163 +#ifdef ENABLE_MULTIBYTE
1164 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1165 + if (wcp != NULL) {
1169 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1170 return ch[ch_index[c]].type;
1173 int font::get_code(int c)
1175 +#ifdef ENABLE_MULTIBYTE
1176 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1177 + if (wcp != NULL) {
1181 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1182 return ch[ch_index[c]].code;
1184 @@ -393,10 +510,26 @@
1186 const char *font::get_special_device_encoding(int c)
1188 +#ifdef ENABLE_MULTIBYTE
1189 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1191 + return wcp->special_device_coding;
1193 assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1194 return( ch[ch_index[c]].special_device_coding );
1197 +#ifdef ENABLE_MULTIBYTE
1198 +const char *font::get_subfont_name(int c)
1200 + font_wchar_metric *wcp = get_font_wchar_metric(c);
1202 + return wcp->subfont_name;
1203 + assert(c >= 0 && c < nindices && ch_index[c] >= 0);
1204 + return ch[ch_index[c]].subfont_name;
1208 void font::alloc_ch_index(int index)
1210 if (nindices == 0) {
1211 @@ -554,9 +687,11 @@
1216 // If the font can't be found, then if not_found is non-NULL, it will be set
1217 // to 1 otherwise a message will be printed.
1220 int font::load(int *not_found)
1225 text_file t(fp, path);
1226 t.skip_comments = 1;
1231 t.error("missing charset command");
1234 else if (strcmp(command, "charset") == 0) {
1236 +#ifdef ENABLE_MULTIBYTE
1237 + int had_range = 0;
1239 int last_index = -1;
1242 @@ -695,6 +833,11 @@
1246 +#ifdef ENABLE_MULTIBYTE
1247 + int start_code = 0;
1249 + int nrange = sscanf(nm, "u%X..u%X", &start_code, &end_code);
1252 if (last_index == -1) {
1253 t.error("first charset entry is duplicate");
1254 @@ -711,7 +854,64 @@
1256 copy_entry(index, last_index);
1258 +#ifdef ENABLE_MULTIBYTE
1259 + else if (nrange == 2) {
1261 + font_wchar_metric *wcp = new font_wchar_metric;
1262 + wcp->start_code = start_code;
1263 + wcp->end_code = end_code;
1266 + wcp->pre_math_space = 0;
1267 + wcp->italic_correction = 0;
1268 + wcp->subscript_correction = 0;
1269 + int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d",
1270 + &wcp->width, &wcp->height, &wcp->depth,
1271 + &wcp->italic_correction,
1272 + &wcp->pre_math_space,
1273 + &wcp->subscript_correction);
1275 + t.error("bad width for `%1'", nm);
1278 + p = strtok(0, WS);
1280 + t.error("missing character type for `%1'", nm);
1284 + if (sscanf(p, "%d", &type) != 1) {
1285 + t.error("bad character type for `%1'", nm);
1288 + if (type < 0 || type > 255) {
1289 + t.error("character type `%1' out of range", type);
1294 + p = strtok(0, WS);
1295 + if ((p == 0) || (strcmp(p, "--") == 0)) {
1296 + wcp->subfont_name = NULL;
1298 + wcp->subfont_name = new char[strlen(p) + 1];
1299 + strcpy(wcp->subfont_name, p);
1302 + p = strtok(0, WS);
1303 + if ((p == NULL) || (strcmp(p, "--") == 0)) {
1304 + wcp->special_device_coding = NULL;
1306 + wcp->special_device_coding = new char[strlen(p) + 1];
1307 + strcpy(wcp->special_device_coding, p);
1316 font_char_metric metric;
1319 @@ -747,6 +947,16 @@
1320 t.error("missing code for `%1'", nm);
1323 +#ifdef ENABLE_MULTIBYTE
1324 + char *subp = strchr(p, ':');
1327 + metric.subfont_name = new char[strlen(subp) + 1];
1328 + strcpy(metric.subfont_name, subp);
1330 + metric.subfont_name = NULL;
1334 metric.code = (int)strtol(p, &ptr, 0);
1335 if (metric.code == 0 && ptr == p) {
1336 @@ -777,7 +987,11 @@
1340 +#ifdef ENABLE_MULTIBYTE
1341 + if (!had_range && last_index == -1) {
1343 if (last_index == -1) {
1345 t.error("I didn't seem to find any characters");
1348 @@ -811,6 +1025,11 @@
1349 { "biggestfont", &font::biggestfont },
1350 { "spare2", &font::spare2 },
1351 { "sizescale", &font::sizescale }
1352 +#ifdef ENABLE_MULTIBYTE
1354 + { "lowerwchar", &font::lowerwchar },
1355 + { "wcharkern", &font::wcharkern }
1359 int font::load_desc()
1360 @@ -981,6 +1200,67 @@
1362 else if (strcmp("use_charnames_in_special", p) == 0)
1363 use_charnames_in_special = 1;
1364 +#ifdef ENABLE_MULTIBYTE
1365 + else if (strcmp("fontset", p) == 0) {
1366 + /* fontset <primary-fontname> <fontname> <code>..<code> [ondemand] */
1367 + p = strtok(0, WS);
1369 + t.error("no primary font for fontset");
1372 + char *pfont = NULL;
1373 + if (strcmp(p, "-") != 0) {
1374 + pfont = new char[strlen(p)+1];
1377 + p = strtok(0, WS);
1379 + t.error("no fontset font for `%1'",
1380 + pfont ? pfont : "-");
1383 + int fontset_font = 0;
1384 + for (int i = 0; i < nfonts; i++) {
1385 + if (strcmp(p, font_name_table[i]) == 0) {
1390 + if (fontset_font == nfonts) {
1391 + t.error("fontset font `%1' for font `%2' not defined",
1392 + p, pfont ? pfont : "-");
1395 + p = strtok(0, WS);
1397 + t.error("no range for fontset font `%1' for font `%2'",
1398 + font_name_table[fontset_font],
1399 + pfont ? pfont : "-");
1402 + wchar start_code = 0;
1403 + wchar end_code = 0;
1404 + int nparms = sscanf(p, "%x..%x", &start_code, &end_code);
1405 + if (nparms != 2) {
1406 + t.error("invalid range format `%1'", p);
1409 + p = strtok(0, WS);
1410 + int on_demand = 0;
1411 + if (p != NULL && strcmp(p, "ondemand") == 0) {
1415 + fontset_list *fl = new fontset_list;
1416 + fl->primary_font_name = pfont;
1417 + fl->fontset_font = fontset_font;
1418 + fl->start_code = start_code;
1419 + fl->end_code = end_code;
1420 + fl->on_demand = on_demand;
1421 + fl->next = fontsets;
1425 else if (strcmp("charset", p) == 0)
1427 else if (unknown_desc_command_handler) {
1428 @@ -1020,6 +1300,39 @@
1432 +#ifdef ENABLE_MULTIBYTE
1434 +font::get_fontset_font(const char *fname, wchar wc) {
1436 + int avail_fontno = -1;
1437 + wc = wchar_code(wc);
1438 + for (fl = fontsets; fl != NULL; fl = fl->next) {
1439 + if (fl->primary_font_name == NULL) {
1440 + if (fl->start_code <= wc && wc <= fl->end_code) {
1441 + avail_fontno = fl->fontset_font;
1444 + else if (fname && strcmp(fl->primary_font_name, fname) == 0) {
1445 + if (fl->start_code <= wc && wc <= fl->end_code) {
1446 + return fl->fontset_font;
1450 + return avail_fontno;
1454 +font::is_on_demand(int fontno) {
1456 + for (fl = fontsets; fl != NULL; fl = fl->next) {
1457 + if (fl->fontset_font == fontno) {
1458 + return fl->on_demand;
1465 void font::handle_unknown_font_command(const char *, const char *,
1468 --- groff-1.18.1.1.orig/src/libs/libgroff/searchpath.cc
1469 +++ groff-1.18.1.1/src/libs/libgroff/searchpath.cc
1471 with groff; see the file COPYING. If not, write to the Free Software
1472 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
1474 +#include "encoding.h"
1478 --- groff-1.18.1.1.orig/src/libs/libgroff/nametoindex.cc
1479 +++ groff-1.18.1.1/src/libs/libgroff/nametoindex.cc
1484 +#include "encoding.h" // XXX: ukai
1489 character_indexer();
1490 ~character_indexer();
1491 int ascii_char_index(unsigned char);
1492 +#ifdef ENABLE_MULTIBYTE
1493 + int wchar_index(wchar);
1495 int named_char_index(const char *);
1496 int numbered_char_index(int);
1499 return ascii_index[c];
1502 +#ifdef ENABLE_MULTIBYTE
1503 +int character_indexer::wchar_index(wchar wc)
1505 + return wc; /* XXX: wchar code == index */
1509 int character_indexer::numbered_char_index(int n)
1511 if (n >= 0 && n < NSMALL) {
1512 @@ -103,6 +114,30 @@
1513 int font::name_to_index(const char *s)
1515 assert(s != 0 && s[0] != '\0' && s[0] != ' ');
1516 +#ifdef ENABLE_MULTIBYTE
1519 + wchar wc = input_encoding->make_wchar(s[0], (const unsigned char *)s, &i);
1521 + * if wchar can be represented in single byte (<256),
1522 + * it should be the same as char<wc>.
1524 + if (is_wchar_singlebyte(wc)) {
1525 + return indexer.ascii_char_index(wchar_singlebyte(wc));
1527 + if (is_wchar_code(wc)) {
1528 + return indexer.wchar_index(wc);
1530 + /* XXX: uA1A1 and \xa1a1 are synonyms */
1531 + if (s[0] == 'u') {
1533 + long n = strtol(s + 1, &res, 16);
1534 + if (res != s + 1 && *res == '\0') {
1535 + return indexer.wchar_index(n);
1541 return indexer.ascii_char_index(s[0]);
1542 /* char128 and \200 are synonyms */
1544 return indexer.named_char_index(s);
1547 +#ifdef ENABLE_MULTIBYTE
1548 +int font::wchar_index(wchar wc)
1550 + return indexer.wchar_index(wc);
1553 --- groff-1.18.1.1.orig/src/libs/libgroff/encoding.cc
1554 +++ groff-1.18.1.1/src/libs/libgroff/encoding.cc
1557 +/* Copyright (C) 2001 Fumitoshi UKAI <ukai@debian.or.jp>
1559 +This file is part of groff.
1561 +groff is free software; you can redistribute it and/or modify it under
1562 +the terms of the GNU General Public License as published by the Free
1563 +Software Foundation; either version 2, or (at your option) any later
1566 +groff is distributed in the hope that it will be useful, but WITHOUT ANY
1567 +WARRANTY; without even the implied warranty of MERCHANTABILITY or
1568 +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1571 +You should have received a copy of the GNU General Public License
1572 +along with this program; if not, write to the Free Software
1573 +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
1575 +#include "encoding.h"
1576 +#include "device.h"
1578 +#include <string.h>
1579 +#ifdef ENABLE_MULTIBYTE
1580 +#include <locale.h>
1582 +#ifdef HAVE_LANGINFO_CODESET
1583 +#include <langinfo.h>
1585 +#include <stdlib.h>
1589 +class ascii8_handler : public encoding_handler {
1590 + // encoding handler for 8bit ascii
1591 + // no multibyte support
1593 + ascii8_handler() {}
1594 + ~ascii8_handler() {}
1596 + const char *name() { return "C"; }; /* ??? */
1598 + inline int is_wchar_byte(unsigned char c) { return 0; }
1599 + inline wchar make_wchar(unsigned char c0, encoding_istream& eis) {
1602 + inline int put_wchar(wchar wc, encoding_ostream& eos) {
1603 + eos.putbyte((unsigned char)wchar_code(wc));
1606 + inline int max_wchar_len() { return 1; };
1610 +#ifdef ENABLE_MULTIBYTE
1611 +class utf8_handler: public encoding_handler {
1613 + utf8_handler() { }
1614 + ~utf8_handler() { }
1616 + const char *name() { return "UTF-8"; };
1618 + inline int is_wchar_byte(unsigned char c) {
1619 + return (c >= 0x80);
1623 + 0000 0000-0000 007F 0xxxxxxx
1624 + 0000 0080-0000 07FF 110xxxxx 10xxxxxx
1625 + 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
1627 + 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
1628 + 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1629 + 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx
1632 + inline wchar make_wchar(unsigned char c0, encoding_istream& eis) {
1635 + if (! is_wchar_byte(c0)) {
1638 + if ((c0 & 0xFC) == 0xFC) {
1641 + } else if ((c0 & 0xF8) == 0xF8) {
1644 + } else if ((c0 & 0xF0) == 0xF0) {
1647 + } else if ((c0 & 0xE0) == 0xE0) {
1650 + } else if ((c0 & 0xC0) == 0xC0) {
1654 + for (; count > 0; count--) {
1656 + int c1 = eis.getbyte();
1657 + if (! is_wchar_byte(c1)) {
1658 + /* illegal utf8 sequence? */
1660 + wc |= (c1 & 0x3F);
1662 + return -wc; // XXX: negative
1665 + inline int put_wchar(wchar wc, encoding_ostream& eos) {
1667 + if (! is_wchar_code(wc)) {
1671 + wc = -wc; // XXX: negative -> character code
1674 + count = 1; eos.putbyte((wc >> 6) | 0xC0);
1675 + } else if (wc < 0x10000) {
1676 + count = 2; eos.putbyte((wc >> 12) | 0xE0);
1677 + } else if (wc < 0x200000) {
1678 + count = 3; eos.putbyte((wc >> 18) | 0xF0);
1679 + } else if (wc < 0x4000000) {
1680 + count = 4; eos.putbyte((wc >> 24) | 0xf8);
1681 + } else if (wc <= 0x7fffffff) {
1682 + count = 5; eos.putbyte((wc >> 30) | 0xFC);
1684 + for (int i = 0; i < count; i++) {
1685 + eos.putbyte(((wc >> 6 * (count - i - 1)) & 0x3f) | 0x80);
1689 + inline int max_wchar_len() { return 6; }; /* XXX 3?*/
1698 +class iconv_handler : public encoding_handler {
1701 + const char *encoding_name;
1702 + static iconv_handler *ih_header;
1705 + iconv_handler *next;
1707 + static iconv_handler *new_iconv_handler(const char *ename) {
1708 + iconv_handler *ip;
1709 + // if already created, use it.
1710 + for (ip = ih_header; ip != NULL; ip = ip->next) {
1711 + if (strcmp(ip->name(), ename) == 0) {
1715 + // not found, create new one.
1716 + ip = new iconv_handler(ename);
1717 + ip->next = ih_header;
1721 + iconv_handler(const char *ename) : encoding_name(ename) {
1722 + // internal code is UCS-2BE
1723 + icd = iconv_open("UCS-2BE", encoding_name);
1724 + ocd = iconv_open(encoding_name, "UCS-2BE");
1726 + ~iconv_handler() {};
1728 + const char *name() { return encoding_name; };
1730 + inline int is_wchar_byte(unsigned char c) {
1731 + return (c >= 0x80); /* ??? */
1734 + inline wchar make_wchar(unsigned char c0, encoding_istream& eis) {
1736 + char inbuf[8], outbuf[8];
1738 + size_t inbytesleft, outbytesleft;
1741 + if (! is_wchar_byte(c0)) {
1744 + for (inbuf[i++] = c0; ;inbuf[i++] = eis.getbyte()) {
1746 + outbytesleft = sizeof(outbuf);
1749 + size_t r = iconv(icd, &inp, &inbytesleft, &outp, &outbytesleft);
1750 + if (r == (size_t)-1) {
1751 + if (errno == EILSEQ) {
1752 + /* illegal sequence? */
1754 + } else if (errno == EINVAL) {
1755 + /* incomplete sequence? */
1757 + } else if (errno == E2BIG) {
1758 + /* no room to output? */
1763 + /* UCS-2 is 2 bytes */
1764 + wc = ((outbuf[0] & 0x0ff) << 8) | (outbuf[1] & 0x0ff);
1765 + return -wc; // XXX: negative
1770 + inline int put_wchar(wchar wc, encoding_ostream& eos) {
1771 + char inbuf[4], outbuf[4];
1773 + size_t inbytesleft, outbytesleft;
1775 + if (!is_wchar_code(wc)) {
1776 + eos.putbyte(wc & 0x0ff);
1779 + wc = -wc; // XXX: negative -> character code
1781 + inbuf[0] = (wc >> 8) & 0x0ff;
1782 + inbuf[1] = (wc >> 0) & 0x0ff;
1788 + size_t r = iconv(ocd, &inp, &inbytesleft, &outp, &outbytesleft);
1789 + if (r == (size_t)-1) {
1790 + if (errno == EILSEQ) {
1791 + /* illegal sequence? */;
1792 + } else if (errno == EINVAL) {
1793 + /* incomplete sequence? */;
1794 + } else if (errno == E2BIG) {
1795 + /* no room to output? */;
1800 + char *op = outbuf;
1802 + for (; op < outp; op++, n++) {
1803 + eos.putbyte(*op & 0x0ff);
1805 + return outp - outbuf;
1807 + inline int max_wchar_len() { return 6; }; /* XXX */
1811 +class euc_handler : public encoding_handler {
1812 + static const int WCTABLE_OFFSET = 0xa1;
1813 + static const int WCTABLE_SIZE = 94;
1814 + static const int EUCMASK = 0x8080;
1818 + ~euc_handler() {};
1820 + const char *name() { return "EUC-JP"; };
1822 + inline int is_wchar_byte(unsigned char c) {
1823 + return (c >= 0xa1 && c <= 0xfe);
1826 + inline wchar make_wchar(unsigned char c0, encoding_istream& eis) {
1828 + if (! is_wchar_byte(c0)) {
1831 + int c1 = eis.peekbyte();
1832 + if (! is_wchar_byte(c1)) {
1833 + eis.ungetbyte(c1);
1836 + c1 = eis.getbyte();
1837 + wc = (c0 & 0xff) << 8;
1838 + wc |= (c1 & 0xff);
1845 + inline int put_wchar(wchar wc, encoding_ostream& eos) {
1846 + if (is_wchar_code(wc)) {
1848 + eos.putbyte((wc >> 8) & 0x0ff);
1849 + eos.putbyte((wc >> 0) & 0x0ff);
1852 + eos.putbyte(wc & 0x0ff);
1856 + inline int max_wchar_len() { return 2; }; /* XXX */
1858 +#endif /* USE_ICONV */
1861 +static ascii8_handler ascii8;
1862 +#ifdef ENABLE_MULTIBYTE
1863 +static utf8_handler utf8;
1865 +iconv_handler *iconv_handler::ih_header = NULL;
1867 +static euc_handler eucjp;
1871 +encoding_handler *input_encoding = &ascii8;
1872 +encoding_handler *output_encoding = &ascii8;
1875 +new_encoding_handler(encoding_handler **eptr, const char *encoding_name)
1877 + if (!encoding_name) {
1881 +#ifdef ENABLE_MULTIBYTE
1882 + if (strcmp(encoding_name, "UTF-8") == 0) {
1887 + if (strcmp(encoding_name, "C") != 0) {
1888 + *eptr = iconv_handler::new_iconv_handler(encoding_name);
1892 + // printf("encoding request: [%s]\n", encoding_name);
1893 + if (strcmp(encoding_name, "EUC-JP") == 0) {
1894 + // printf("encoding: [EUC-JP]\n");
1906 +select_input_encoding_handler(const char *encoding_name)
1908 + new_encoding_handler(&input_encoding, encoding_name);
1909 + return input_encoding;
1913 +select_output_encoding_handler(const char *encoding_name)
1915 + new_encoding_handler(&output_encoding, encoding_name);
1916 + return output_encoding;
1920 +init_encoding_handler()
1922 +#ifdef ENABLE_MULTIBYTE
1923 + const char *locale, *charset;
1924 + // groff 1 defines ISO-8859-1 as the input encoding, so this is required
1925 + // for compatibility. groff 2 will define UTF-8 (or possibly officially
1926 + // allow it to be switchable?)
1927 + select_input_encoding_handler("ISO-8859-1");
1928 + select_output_encoding_handler("C");
1930 + locale = setlocale(LC_ALL, "");
1931 + if (locale == NULL ||
1932 + strcmp(locale, "C") == 0 || strcmp(locale, "POSIX") == 0) {
1935 + /* check LC_CTYPE is C or POSIX */
1936 + locale = setlocale(LC_CTYPE, NULL);
1937 + if (strcmp(locale, "C") == 0 || strcmp(locale, "POSIX") == 0) {
1941 +#if HAVE_LANGINFO_CODESET
1942 + charset = nl_langinfo(CODESET);
1944 + charset = strchr(locale, '.');
1950 + if (strncmp(locale, "ja", 2) == 0 || strncmp(locale, "zh", 2) == 0 ||
1951 + (strncmp(locale, "ko", 2) == 0 && strcmp(charset, "UTF-8") == 0)) {
1952 + select_input_encoding_handler(charset);
1953 + select_output_encoding_handler(charset);
1954 + } else if ((!device || strcmp(device, "ascii8") == 0)) {
1955 + select_input_encoding_handler(NULL);
1956 + select_output_encoding_handler(NULL);
1963 +is_wchar_code(wchar wc)
1969 +is_wchar_singlebyte(wchar wc)
1971 + return ((-256 < wc) && (wc < 0));
1975 +wchar_singlebyte(wchar wc)
1978 + return (unsigned char)wc;
1980 + return (unsigned char)-wc;
1984 +wchar_code(wchar wc)
1997 --- groff-1.18.1.1.orig/src/libs/libgroff/Makefile.sub
1998 +++ groff-1.18.1.1/src/libs/libgroff/Makefile.sub
2003 + encoding.$(OBJEXT) \
2008 $(srcdir)/color.cc \
2010 $(srcdir)/device.cc \
2011 + $(srcdir)/encoding.cc \
2012 $(srcdir)/errarg.cc \
2013 $(srcdir)/error.cc \
2014 $(srcdir)/fatal.cc \
2015 --- groff-1.18.1.1.orig/src/libs/libgroff/tmpfile.cc
2016 +++ groff-1.18.1.1/src/libs/libgroff/tmpfile.cc
2021 +#include "encoding.h"
2025 --- groff-1.18.1.1.orig/src/utils/tfmtodit/tfmtodit.cc
2026 +++ groff-1.18.1.1/src/utils/tfmtodit/tfmtodit.cc
2028 gives the groff name of the character, `i' gives its index in
2029 the encoding, which is filled in later (-1 if it does not appear). */
2038 // Each possible ligature appears in this table.
2042 unsigned char c1, c2, res;
2045 --- groff-1.18.1.1.orig/src/preproc/eqn/eqn.y
2046 +++ groff-1.18.1.1/src/preproc/eqn/eqn.y
2051 +#include "encoding.h" /* XXX */
2054 extern int non_empty_flag;
2055 --- groff-1.18.1.1.orig/src/preproc/eqn/lex.cc
2056 +++ groff-1.18.1.1/src/preproc/eqn/lex.cc
2058 #include "eqn_tab.h"
2059 #include "stringclass.h"
2061 +#include "encoding.h"
2065 @@ -375,6 +376,11 @@
2066 lex_error("invalid input character code %1", c);
2069 +#ifdef ENABLE_MULTIBYTE
2070 + if (input_encoding->is_wchar_byte(c)) {
2071 + line += char(getc(fp));
2077 --- groff-1.18.1.1.orig/src/preproc/eqn/main.cc
2078 +++ groff-1.18.1.1/src/preproc/eqn/main.cc
2080 program_name = argv[0];
2081 static char stderr_buf[BUFSIZ];
2082 setbuf(stderr, stderr_buf);
2083 + init_encoding_handler();
2085 int load_startup_file = 1;
2086 static const struct option long_options[] = {
2087 --- groff-1.18.1.1.orig/src/preproc/eqn/text.cc
2088 +++ groff-1.18.1.1/src/preproc/eqn/text.cc
2093 +#include "encoding.h"
2095 class char_box : public simple_box {
2097 +#ifdef ENABLE_MULTIBYTE
2100 char next_is_italic;
2101 char prev_is_italic;
2103 char_box(unsigned char);
2104 +#ifdef ENABLE_MULTIBYTE
2105 + char_box(unsigned char, wchar);
2110 @@ -165,11 +172,22 @@
2113 char_box::char_box(unsigned char cc)
2114 -: c(cc), next_is_italic(0), prev_is_italic(0)
2116 +#ifdef ENABLE_MULTIBYTE
2119 + next_is_italic(0), prev_is_italic(0)
2121 spacing_type = char_table[c].spacing_type;
2124 +#ifdef ENABLE_MULTIBYTE
2125 +char_box::char_box(unsigned char cc, wchar wc)
2126 +: c(cc), wc(wc), next_is_italic(0), prev_is_italic(0)
2131 void char_box::hint(unsigned flags)
2133 if (flags & HINT_PREV_IS_ITALIC)
2134 @@ -188,7 +206,11 @@
2136 fputs("\\e", stdout);
2138 +#ifdef ENABLE_MULTIBYTE
2139 + output_encoding->put_wchar(wc, stdout);
2143 if (!next_is_italic)
2144 fputs("\\/", stdout);
2146 @@ -497,6 +519,14 @@
2150 +#ifdef ENABLE_MULTIBYTE
2151 + if (input_encoding->is_wchar_byte(c)) {
2153 + wchar wc = input_encoding->make_wchar(c, (unsigned char *)s, &i);
2154 + b = new char_box('A', wc); // char_info of wc is same the 'A'.
2158 b = new char_box(c);
2161 --- groff-1.18.1.1.orig/src/preproc/eqn/box.cc
2162 +++ groff-1.18.1.1/src/preproc/eqn/box.cc
2165 int nroff = 0; // should we grok ndefine or tdefine?
2172 --- groff-1.18.1.1.orig/src/preproc/html/pre-html.cc
2173 +++ groff-1.18.1.1/src/preproc/html/pre-html.cc
2175 #define DEFAULT_IMAGE_RES 100 // number of pixels per inch resolution
2176 #define IMAGE_BOARDER_PIXELS 0
2177 #define INLINE_LEADER_CHAR '\\'
2178 +#define A4_LENGTH 841890 // taken from devps/Makefile.sub
2179 +#define LETTER_LENGTH 792000 // taken from devps/Makefile.sub
2180 +#define A4_OFFSET 0
2181 +#define LETTER_OFFSET 50 // 50/72 of an inch
2183 #define TRANSPARENT "-background white -transparent white"
2184 #define MIN_ALPHA_BITS 0
2186 static char *macroset_template= NULL; // image template passed to troff by -D
2187 static int troff_arg = 0; // troff arg index
2188 static char *image_dir = NULL; // user specified image directory
2189 +static char *gsPaper = NULL; // the paper size that gs must use
2190 static int textAlphaBits = MAX_ALPHA_BITS;
2191 static int graphicAlphaBits = MAX_ALPHA_BITS;
2192 static char *antiAlias = NULL; // antialias arguments we pass to gs.
2193 @@ -211,6 +216,54 @@
2197 + * get_papersize - returns an integer determining the paper length from
2201 +static int get_papersize (void)
2206 + f = font_path.open_file("devps/DESC", &pathp);
2208 + fatal("can't open devps/DESC");
2209 + while (get_line(f)) {
2210 + int n = sscanf(linebuf, "paperlength %d", &res);
2215 + if (!strncmp(linebuf, "papersize", 9)) {
2217 + char *p = linebuf + 9;
2218 + while (*p == ' ' || *p == '\t')
2220 + for (p = strtok(p, " \t"); p; p = strtok(0, " \t")) {
2221 + if (font::scan_papersize(p, 0, &length, 0)) {
2223 + return int(length * postscriptRes + 0.5);
2226 + fatal("bad argument to `papersize' keyword in devps/DESC");
2229 + fatal("can't find `papersize' or `paperlength' keyword in devps/DESC");
2234 + * determine_vertical_offset - works out the default vertical offset from
2238 +static void determine_vertical_offset (void)
2240 + vertical_offset = ((A4_LENGTH-get_papersize())*72)/postscriptRes;
2241 + gsPaper = "-sPAPERSIZE=a4";
2245 * html_system - a wrapper for system()
2248 @@ -1469,6 +1522,7 @@
2251 postscriptRes = get_resolution();
2252 + determine_vertical_offset();
2253 i = scanArguments(argc, argv);
2256 --- groff-1.18.1.1.orig/src/preproc/grn/hdb.cc
2257 +++ groff-1.18.1.1/src/preproc/grn/hdb.cc
2259 type = DBGetType(string); /* interpret element type */
2260 if (type < 0) { /* no more data */
2262 - (void) fclose(file);
2265 (void) xscanf(file, &x, &y); /* always one point */
2266 --- groff-1.18.1.1.orig/src/preproc/refer/command.cc
2267 +++ groff-1.18.1.1/src/preproc/refer/command.cc
2269 ? means that the previous argument is optional, * means that the
2270 previous argument can occur any number of times. */
2276 const char *arg_types;
2277 --- groff-1.18.1.1.orig/src/devices/grotty/grotty.man
2278 +++ groff-1.18.1.1/src/devices/grotty/grotty.man
2289 option on ASCII based systems, and with
2290 @@ -235,8 +237,10 @@
2292 is the name of the device, usually
2301 @@ -315,10 +319,20 @@
2305 +.B @FONTDIR@/devascii8/DESC
2306 +Device description file for
2310 .B @FONTDIR@/devlatin1/DESC
2311 Device description file for
2315 +.B @FONTDIR@/devnippon/DESC
2316 +Device description file for
2321 .BI @FONTDIR@/devlatin1/ F
2322 --- groff-1.18.1.1.orig/src/devices/grotty/tty.cc
2323 +++ groff-1.18.1.1/src/devices/grotty/tty.cc
2328 +#include "encoding.h"
2330 extern "C" const char *Version_string;
2336 +#ifdef ENABLE_MULTIBYTE
2337 + , WCHAR_MODE = 0x100
2341 +#ifdef ENABLE_MULTIBYTE
2345 +#define putchar(wc) output_encoding->put_wchar((wc), stdout)
2348 // Mode to use for bold-underlining.
2349 static unsigned char bold_underline_mode = BOLD_MODE|UNDERLINE_MODE;
2352 static tty_font *load_tty_font(const char *);
2356 tty_font *tty_font::load_tty_font(const char *s)
2358 tty_font *f = new tty_font(s);
2361 const char *num = f->get_internal_name();
2363 +#ifdef ENABLE_MULTIBYTE
2365 + n = strtol(num, 0, 0);
2368 + f->mode = int(UNDERLINE_MODE);
2372 + f->mode = int(BOLD_MODE);
2375 + f->mode = int(BOLD_MODE|UNDERLINE_MODE);
2380 if (num != 0 && (n = strtol(num, 0, 0)) != 0)
2381 f->mode = int(n & (BOLD_MODE|UNDERLINE_MODE));
2383 if (!underline_flag)
2384 f->mode &= ~UNDERLINE_MODE;
2390 +#ifdef ENABLE_MULTIBYTE
2393 unsigned char back_color_idx;
2394 unsigned char fore_color_idx;
2395 void *operator new(size_t);
2397 void make_underline();
2398 void make_bold(unsigned int);
2399 unsigned char color_to_idx(color *col);
2400 - void add_char(unsigned int, int, int, color *, color *, unsigned char);
2401 + void add_char(unsigned int, int, int, color *, color *, font *, unsigned char);
2403 tty_printer(const char *device);
2406 void special(char *arg, const environment *env, char type);
2407 void change_color(const environment *env);
2408 void change_fill_color(const environment *env);
2409 - void put_char(unsigned int);
2410 + int put_char(unsigned int);
2411 void put_color(unsigned char, int);
2412 void begin_page(int) { }
2413 void end_page(int page_length);
2414 @@ -203,6 +236,10 @@
2415 tty_printer::tty_printer(const char *device) : cached_v(0)
2417 is_utf8 = !strcmp(device, "utf8");
2418 +#ifdef ENABLE_MULTIBYTE
2420 + select_output_encoding_handler("UTF-8");
2422 tty_colors[0].set_rgb(0, // black
2425 @@ -242,8 +279,18 @@
2426 void tty_printer::make_underline()
2428 if (old_drawing_scheme) {
2429 +#if 0 /* def ENABLE_MULTIBYTE XXX: not necessary? */
2430 + if ((p->mode & WCHAR_MODE)) {
2431 + putchar('_'); putchar('_');
2432 + putchar('\b'); putchar('\b');
2443 if (!is_underline) {
2444 @@ -285,17 +332,25 @@
2445 void tty_printer::set_char(int i, font *f, const environment *env,
2446 int w, const char *name)
2448 +#ifdef ENABLE_MULTIBYTE
2449 + if (is_wchar_code(i)) {
2450 + add_char(wchar_code(i), env->hpos, env->vpos, env->col, env->fill,
2451 + f, ((tty_font *)f)->get_mode());
2456 fatal("width of character not equal to horizontal resolution");
2457 add_char(f->get_code(i),
2458 env->hpos, env->vpos,
2459 env->col, env->fill,
2460 - ((tty_font *)f)->get_mode());
2461 + f, ((tty_font *)f)->get_mode());
2464 void tty_printer::add_char(unsigned int c,
2466 color *fore, color *back,
2471 @@ -338,6 +393,16 @@
2473 g->fore_color_idx = color_to_idx(fore);
2474 g->back_color_idx = color_to_idx(back);
2475 +#ifdef ENABLE_MULTIBYTE
2476 + if (is_wchar_code(c))
2477 + mode |= WCHAR_MODE;
2478 + if (curfont && curfont->contains(c)) {
2479 + int gw0 = curfont->get_space_width(font::unitwidth);
2480 + int gw = curfont->get_width(c, font::unitwidth);
2483 + g->cols = 1; /* XXX */
2487 // The list will be reversed later. After reversal, it must be in
2489 void tty_printer::special(char *arg, const environment *env, char type)
2492 - add_char(*arg - '0', env->hpos, env->vpos, env->col, env->fill, CU_MODE);
2493 + add_char(*arg - '0', env->hpos, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), CU_MODE);
2497 @@ -395,12 +460,12 @@
2499 void tty_printer::change_color(const environment *env)
2501 - add_char(0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE);
2502 + add_char(0, env->hpos, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), COLOR_CHANGE);
2505 void tty_printer::change_fill_color(const environment *env)
2507 - add_char(0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE);
2508 + add_char(0, env->hpos, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), COLOR_CHANGE);
2511 void tty_printer::draw(int code, int *p, int np, const environment *env)
2516 - add_char('|', env->hpos, v, env->col, env->fill, VDRAW_MODE);
2517 + add_char('|', env->hpos, v, env->col, env->fill, get_font_from_index(env->fontno), VDRAW_MODE);
2521 @@ -434,18 +499,24 @@
2525 - add_char('-', h, env->vpos, env->col, env->fill, HDRAW_MODE);
2526 + add_char('-', h, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), HDRAW_MODE);
2533 -void tty_printer::put_char(unsigned int wc)
2534 +int tty_printer::put_char(unsigned int wc)
2536 +#ifdef ENABLE_MULTIBYTE
2538 + return output_encoding->put_wchar(make_wchar(wc), stdout);
2541 if (is_utf8 && wc >= 0x80) {
2547 count = 1, *p = (unsigned char)((wc >> 6) | 0xc0);
2548 @@ -458,14 +529,18 @@
2549 else if (wc <= 0x7fffffff)
2550 count = 5, *p = (unsigned char)((wc >> 30) | 0xfC);
2555 do *++p = (unsigned char)(((wc >> (6 * --count)) & 0x3f) | 0x80);
2567 void tty_printer::put_color(unsigned char color_index, int back)
2568 @@ -629,7 +704,11 @@
2572 +#ifdef ENABLE_MULTIBYTE
2578 if (!old_drawing_scheme
2579 && (is_bold || is_underline
2581 if (getenv("GROFF_NO_SGR"))
2582 old_drawing_scheme = 1;
2583 setbuf(stderr, stderr_buf);
2584 + init_encoding_handler();
2586 static const struct option long_options[] = {
2587 { "help", no_argument, 0, CHAR_MAX + 1 },
2588 --- groff-1.18.1.1.orig/src/devices/grops/ps.cc
2589 +++ groff-1.18.1.1/src/devices/grops/ps.cc
2592 #include "nonposix.h"
2594 +#include "encoding.h"
2598 @@ -193,12 +194,23 @@
2602 +#ifdef ENABLE_MULTIBYTE
2603 +ps_output &ps_output::put_string(const wchar *s, int n)
2605 ps_output &ps_output::put_string(const char *s, int n)
2610 for (i = 0; i < n; i++) {
2611 +#ifdef ENABLE_MULTIBYTE
2614 + if (is_wchar_singlebyte(wc))
2615 + c = wchar_singlebyte(wc);
2619 if (is_ascii(c) && csprint(c)) {
2620 if (c == '(' || c == ')' || c == '\\')
2622 @@ -224,8 +236,13 @@
2626 +#ifdef ENABLE_MULTIBYTE
2627 + int nb = output_encoding->put_wchar(s[i], fp, "%02x");
2630 fprintf(fp, "%02x", s[i] & 0377);
2639 char *reencoded_name;
2640 +#ifdef ENABLE_MULTIBYTE
2641 + char *encodingname;
2644 void handle_unknown_font_command(const char *command, const char *arg,
2645 const char *filename, int lineno);
2648 ps_font::ps_font(const char *nm)
2649 : font(nm), encoding_index(-1), encoding(0), reencoded_name(0)
2650 +#ifdef ENABLE_MULTIBYTE
2659 a_delete reencoded_name;
2660 +#ifdef ENABLE_MULTIBYTE
2661 + a_delete encodingname;
2665 void ps_font::handle_unknown_font_command(const char *command, const char *arg,
2666 @@ -433,6 +459,15 @@
2668 encoding = strsave(arg);
2670 +#ifdef ENABLE_MULTIBYTE
2671 + if (strcmp(command, "encodingname") == 0) {
2673 + error_with_file_and_line(filename, lineno,
2674 + "`encodingname' command requires an argument");
2676 + encodingname = strsave(arg);
2681 static void handle_unknown_desc_command(const char *command, const char *arg,
2682 @@ -487,7 +522,11 @@
2684 int equalise_spaces;
2685 enum { SBUF_SIZE = 256 };
2686 +#ifdef ENABLE_MULTIBYTE
2687 + wchar sbuf[SBUF_SIZE];
2689 char sbuf[SBUF_SIZE];
2692 int sbuf_start_hpos;
2694 @@ -606,7 +645,11 @@
2696 if (i == space_char_index || invis_count > 0)
2698 +#ifdef ENABLE_MULTIBYTE
2699 + wchar code = f->get_code(i);
2701 unsigned char code = f->get_code(i);
2703 style sty(f, env->size, env->height, env->slant);
2704 if (sty.slant != 0) {
2705 if (sty.slant > 80 || sty.slant < -80) {
2706 @@ -763,6 +806,14 @@
2707 if (sty == defined_styles[i]) {
2708 sprintf(buf, "F%d", i);
2709 out.put_symbol(buf);
2710 +#ifdef ENABLE_MULTIBYTE
2711 + char *encodingname = ((ps_font *)sty.f)->encodingname;
2712 + if (encodingname != 0) {
2713 + select_output_encoding_handler(encodingname);
2715 + select_output_encoding_handler("LATIN1");
2720 if (ndefined_styles >= MAX_DEFINED_STYLES)
2721 @@ -772,6 +823,14 @@
2722 const char *psname = sty.f->get_internal_name();
2724 fatal("no internalname specified for font `%1'", sty.f->get_name());
2725 +#ifdef ENABLE_MULTIBYTE
2726 + char *encodingname = ((ps_font *)sty.f)->encodingname;
2727 + if (encodingname != 0) {
2728 + select_output_encoding_handler(encodingname);
2730 + select_output_encoding_handler("LATIN1");
2733 char *encoding = ((ps_font *)sty.f)->encoding;
2734 if (encoding != 0) {
2735 char *s = ((ps_font *)sty.f)->reencoded_name;
2736 @@ -1555,6 +1614,7 @@
2738 static char stderr_buf[BUFSIZ];
2739 setbuf(stderr, stderr_buf);
2740 + init_encoding_handler();
2742 static const struct option long_options[] = {
2743 { "help", no_argument, 0, CHAR_MAX + 1 },
2744 --- groff-1.18.1.1.orig/src/devices/grops/ps.h
2745 +++ groff-1.18.1.1/src/devices/grops/ps.h
2747 with groff; see the file COPYING. If not, write to the Free Software
2748 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
2750 +#include "encoding.h" // XXX
2754 ps_output(FILE *, int max_line_length);
2755 +#ifdef ENABLE_MULTIBYTE
2756 + ps_output &put_string(const wchar *, int);
2758 ps_output &put_string(const char *, int);
2760 ps_output &put_number(int);
2761 ps_output &put_fix_number(int);
2762 ps_output &put_float(double);
2763 --- groff-1.18.1.1.orig/src/devices/grohtml/html.h
2764 +++ groff-1.18.1.1/src/devices/grohtml/html.h
2766 class simple_output {
2768 simple_output(FILE *, int max_line_length);
2769 +#ifdef ENABLE_MULTIBYTE
2770 + simple_output &put_string(const wchar *, int);
2772 simple_output &put_string(const char *, int);
2773 simple_output &put_string(const char *s);
2774 simple_output &put_string(const string &s);
2775 --- groff-1.18.1.1.orig/src/devices/grohtml/post-html.cc
2776 +++ groff-1.18.1.1/src/devices/grohtml/post-html.cc
2779 #include "html-text.h"
2780 #include "html-table.h"
2781 +#include "encoding.h" // XXX: ukai
2789 +#ifdef ENABLE_MULTIBYTE
2790 + char *add_string(const wchar *, unsigned int);
2792 char *add_string(const char *, unsigned int);
2793 char *add_string(const string &);
2795 @@ -301,6 +305,43 @@
2799 +#ifdef ENABLE_MULTIBYTE
2800 +char *char_buffer::add_string (const wchar *s, unsigned int length)
2803 + unsigned int old_used;
2806 + tail = new char_block;
2809 + if (tail->used + length*2 + 1 > char_block::SIZE) {
2810 + tail->next = new char_block;
2811 + tail = tail->next;
2814 + // at this point we have a tail which is ready for the string.
2815 + if (tail->used + length*2 + 1 > char_block::SIZE) {
2816 + fatal("need to increase char_block::SIZE");
2819 + old_used = tail->used;
2821 + length -= output_encoding->put_wchar(s[i], (unsigned char *)tail->buffer, &tail->used, length*2);
2823 + } while (length>0);
2825 + // add terminating nul character
2827 + tail->buffer[tail->used] = '\0';
2830 + // and return start of new string
2832 + return( &tail->buffer[old_used] );
2836 char *char_buffer::add_string (const char *s, unsigned int length)
2842 old_used = tail->used;
2843 + /* XXX: encoding - ukai */
2845 tail->buffer[tail->used] = s[i];
2847 @@ -1917,6 +1959,15 @@
2849 current_paragraph->do_para(&html, "", indentation, pageoffset, linelength);
2851 +#if 0 // def ENABLE_MULTIBYTE /* XXX */
2852 + else if (strcmp(fontname, "M") == 0) {
2853 + current_paragraph->done_bold();
2854 + current_paragraph->done_italic();
2855 + current_paragraph->done_tt();
2856 + } else if (strcmp(fontname, "G") == 0) {
2857 + current_paragraph->do_bold();
2862 void html_printer::determine_header_level (int level)
2863 @@ -2948,6 +2999,11 @@
2864 current_paragraph->done_italic();
2865 current_paragraph->done_tt();
2867 +#ifdef ENABLE_MULTIBYTE
2868 + else if (strcmp(fontname, "G") == 0) {
2869 + current_paragraph->done_bold();
2875 @@ -2992,6 +3048,15 @@
2876 current_paragraph->do_italic();
2877 current_paragraph->do_bold();
2879 +#ifdef ENABLE_MULTIBYTE
2880 + else if (strcmp(fontname, "M") == 0) {
2881 + current_paragraph->done_bold();
2882 + current_paragraph->done_italic();
2883 + current_paragraph->done_tt();
2884 + } else if (strcmp(fontname, "G") == 0) {
2885 + current_paragraph->do_bold();
2891 @@ -3331,7 +3396,23 @@
2893 last_sbuf_length = sbuf.length();
2894 if (html_glyph == NULL)
2895 +#ifdef ENABLE_MULTIBYTE
2897 + if (is_wchar_code(code)) {
2898 + int mblen = output_encoding->max_wchar_len();
2899 + unsigned char *wbuf = new unsigned char[mblen];
2901 + output_encoding->put_wchar(code, wbuf, &j, mblen);
2902 + for (i = 0; i < j; i++) {
2907 + sbuf += ((char)code);
2910 sbuf += ((char)code);
2915 @@ -3445,12 +3526,12 @@
2919 + sbuf_style = sty; /* XXX? */
2920 add_to_sbuf(i, name);
2921 sbuf_end_hpos = env->hpos + w;
2922 sbuf_start_hpos = env->hpos;
2923 sbuf_prev_hpos = env->hpos;
2924 sbuf_vpos = env->vpos;
2929 @@ -3659,6 +3740,7 @@
2930 program_name = argv[0];
2931 static char stderr_buf[BUFSIZ];
2932 setbuf(stderr, stderr_buf);
2933 + init_encoding_handler();
2935 static const struct option long_options[] = {
2936 { "help", no_argument, 0, CHAR_MAX + 1 },
2937 --- groff-1.18.1.1.orig/src/devices/grodvi/dvi.cc
2938 +++ groff-1.18.1.1/src/devices/grodvi/dvi.cc
2942 #include "nonposix.h"
2943 +#include "encoding.h"
2945 extern "C" const char *Version_string;
2948 struct output_font {
2951 +#ifdef ENABLE_MULTIBYTE
2952 + const char *sf; // subfont name
2954 output_font() : f(0) { }
2958 output_font output_font_table[FONTS_MAX];
2961 +#ifdef ENABLE_MULTIBYTE
2962 + const char *cur_subfont;
2967 @@ -341,9 +348,18 @@
2968 if (*env->col != cur_color)
2969 set_color(env->col);
2970 int code = f->get_code(index);
2971 +#ifdef ENABLE_MULTIBYTE
2972 + const char *sf = f->get_subfont_name(index);
2973 + if (env->size != cur_point_size || f != cur_font ||
2974 + (sf != cur_subfont && strcmp(sf, cur_subfont))) {
2976 if (env->size != cur_point_size || f != cur_font) {
2979 cur_point_size = env->size;
2980 +#ifdef ENABLE_MULTIBYTE
2985 if (i >= FONTS_MAX) {
2986 @@ -352,9 +368,16 @@
2987 if (output_font_table[i].f == 0) {
2988 output_font_table[i].f = (dvi_font *)cur_font;
2989 output_font_table[i].point_size = cur_point_size;
2990 +#ifdef ENABLE_MULTIBYTE
2991 + output_font_table[i].sf = cur_subfont;
2995 if (output_font_table[i].f == cur_font
2996 +#ifdef ENABLE_MULTIBYTE
2997 + && (output_font_table[i].sf == cur_subfont ||
2998 + strcmp(output_font_table[i].sf, cur_subfont) == 0)
3000 && output_font_table[i].point_size == cur_point_size)
3003 @@ -398,7 +421,13 @@
3005 out4(output_font_table[i].point_size*RES_7227);
3006 out4(int((double(f->design_size)/(1<<20))*RES_7227*100 + .5));
3007 +#ifdef ENABLE_MULTIBYTE
3009 + if (!(nm = output_font_table[i].sf))
3010 + nm = f->get_internal_name();
3012 const char *nm = f->get_internal_name();
3018 program_name = argv[0];
3019 static char stderr_buf[BUFSIZ];
3020 setbuf(stderr, stderr_buf);
3021 + init_encoding_handler();
3023 static const struct option long_options[] = {
3024 { "help", no_argument, 0, CHAR_MAX + 1 },
3025 --- groff-1.18.1.1.orig/src/xditview/encoding.h
3026 +++ groff-1.18.1.1/src/xditview/encoding.h
3029 +/* Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp>
3031 +This file is part of groff.
3033 +groff is free software; you can redistribute it and/or modify it under
3034 +the terms of the GNU General Public License as published by the Free
3035 +Software Foundation; either version 2, or (at your option) any later
3038 +groff is distributed in the hope that it will be useful, but WITHOUT ANY
3039 +WARRANTY; without even the implied warranty of MERCHANTABILITY or
3040 +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3043 +You should have received a copy of the GNU General Public License
3044 +along with this program; if not, write to the Free Software
3045 +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
3050 +#include "config.h"
3052 +#ifdef ENABLE_MULTIBYTE
3053 +typedef unsigned int wchar;
3055 +typedef char wchar;
3059 --- groff-1.18.1.1.orig/src/xditview/lex.c
3060 +++ groff-1.18.1.1/src/xditview/lex.c
3062 #include <X11/IntrinsicP.h>
3063 #include <X11/StringDefs.h>
3065 +#include "config.h"
3069 DviGetAndPut(dw, cp)
3085 +#ifdef ENABLE_MULTIBYTE
3086 +#include <locale.h>
3087 +#include <langinfo.h>
3091 +static iconv_t icd;
3096 + setlocale(LC_ALL, "");
3097 + enc = nl_langinfo(CODESET);
3098 + icd = iconv_open("UCS-2BE", enc);
3102 +DviGetCharacter(dw, cp)
3109 + size_t inbytesleft, outbytesleft = 8;
3122 + outbytesleft = BUFSIZ;
3125 + r = iconv(icd, &inp, &inbytesleft, &outp, &outbytesleft);
3126 + if (r == (size_t)-1) {
3127 + if (errno == EILSEQ) {
3128 + /* illegal sequence */
3129 + } else if (errno == EINVAL) {
3130 + /* incomplete sequence */
3132 + } else if (errno == E2BIG) {
3133 + /* no room to output? */
3138 + /* ok - pass inbuf to cp */
3139 + for (j = 0; j < i; j++) {
3149 +DviWCharP(char *name, int *wc)
3151 + char outbuf[BUFSIZ];
3153 + int inbytesleft, outbytesleft;
3157 + inbytesleft = strlen(name);
3159 + outbytesleft = sizeof(outbuf)-1;
3160 + r = iconv(icd, &inp, &inbytesleft, &outp, &outbytesleft);
3165 + if (outbuf + 2 != outp) {
3168 + for (inp = outbuf; inp < outp; inp++) {
3170 + *wc |= (*inp) & 0x0ff;
3179 --- groff-1.18.1.1.orig/src/xditview/Dvi.c
3180 +++ groff-1.18.1.1/src/xditview/Dvi.c
3185 +#include "config.h"
3188 * Dvi.c - Dvi display widget
3191 NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
3192 S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
3193 SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
3194 +M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\n\
3195 +G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\
3198 #define offset(field) XtOffset(DviWidget, field)
3201 static void SaveToFile ();
3204 +extern void ParseFontMap();
3205 +extern void DestroyFontMap();
3206 +extern void ForgetFonts();
3209 +extern void DestroyFileMap();
3210 +extern int SearchPagePosition();
3211 +extern void FileSeek();
3212 +extern void ForgetPagePositions();
3215 +extern int ParseInput();
3217 DviClassRec dviClassRec = {
3219 &widgetClassRec, /* superclass */
3225 SetDevice (dw, name)
3229 DviWidgetClass super = (DviWidgetClass) wc->core_class.superclass;
3230 if (wc->command_class.save == InheritSaveToFile)
3231 wc->command_class.save = super->command_class.save;
3232 +#ifdef ENABLE_MULTIBYTE
3238 --- groff-1.18.1.1.orig/src/xditview/parse.c
3239 +++ groff-1.18.1.1/src/xditview/parse.c
3241 #include <X11/StringDefs.h>
3244 +#include "config.h"
3246 +#include "encoding.h"
3248 static int StopSeen = 0;
3249 -static ParseDrawFunction(), ParseDeviceControl();
3250 -static push_env(), pop_env();
3251 +static void ParseDrawFunction(), ParseDeviceControl();
3252 +static void push_env(), pop_env();
3255 +extern int PutCharacter();
3256 +extern int PutNumberedCharacter();
3257 +extern void HorizontalGoto();
3258 +extern void Word();
3259 +extern void VerticalGoto();
3260 +extern void VerticalMove();
3261 +extern void FlushCharCache();
3262 +extern void Newline();
3263 +extern void DrawLine();
3264 +extern void DrawCircle();
3265 +extern void DrawFilledCircle();
3266 +extern void DrawEllipse();
3267 +extern void DrawFilledEllipse();
3268 +extern void DrawArc();
3269 +extern void DrawPolygon();
3270 +extern void DrawFilledPolygon();
3271 +extern void DrawSpline();
3274 +extern void SetDevice();
3277 +extern void RememberPagePosition();
3280 +extern void SetFontPosition();
3283 +extern int GetNumber();
3285 #define HorizontalMove(dw, delta) ((dw)->dvi.state->x += (delta))
3290 register DviWidget dw;
3293 DviGetC(dw,&otherc)-'0');
3295 case 'c': /* single ascii character */
3296 +#ifdef ENABLE_MULTIBYTE
3297 + DviGetCharacter(dw, Buffer);
3298 + if (Buffer[0] == ' ')
3307 (void) PutCharacter (dw, Buffer);
3310 @@ -69,10 +109,15 @@
3311 (void) PutCharacter (dw, Buffer);
3314 +#ifdef ENABLE_MULTIBYTE
3315 + while (DviGetCharacter(dw, Buffer) != EOF
3316 + && Buffer[0] != ' ' && Buffer[0] != '\n') {
3319 while (DviGetC (dw, &c) != EOF
3320 && c != ' ' && c != '\n') {
3323 HorizontalMove (dw, PutCharacter (dw, Buffer));
3336 dw->dvi.state = new;
3345 XtFree ((char *) old);
3355 #define DRAW_ARGS_MAX 128
3359 ParseDrawFunction(dw, buf)
3362 @@ -284,13 +329,12 @@
3368 ParseDeviceControl(dw) /* Parse the x commands */
3371 char str[20], str1[50];
3373 - extern int LastPage, CurrentPage;
3375 GetWord (dw, str, 20);
3376 switch (str[0]) { /* crude for now */
3377 --- groff-1.18.1.1.orig/src/xditview/DviChar.c
3378 +++ groff-1.18.1.1/src/xditview/DviChar.c
3380 * font indexes and back
3383 -#include "DviChar.h"
3384 +#include <stdlib.h>
3385 +#include "config.h"
3386 +#include "DviChar.h"
3387 +#include "encoding.h"
3389 extern char *xmalloc();
3392 static int standard_maps_loaded = 0;
3393 static void load_standard_maps ();
3394 static int hash_name ();
3395 -static dispose_hash(), compute_hash();
3396 +static void dispose_hash(), compute_hash();
3399 DviFindMap (encoding)
3407 DviCharNameMap *map;
3416 DviCharNameMap *map;
3418 @@ -120,7 +123,10 @@
3423 +#ifdef ENABLE_MULTIBYTE
3424 + if (map->char_index)
3425 + return (*map->char_index)(map, name);
3427 i = hash_name (name) % DVI_HASH_SIZE;
3428 for (h = map->buckets[i]; h; h=h->next)
3429 if (!strcmp (h->name, name))
3430 @@ -128,9 +134,47 @@
3434 +#ifdef ENABLE_MULTIBYTE
3435 +#include <X11/Xlib.h>
3437 +DviChar2XChar2b(int c, XChar2b *xc)
3439 + /* XXX: can we assume 'c' is EUC-JP ? */
3440 + xc->byte1 = (c >> 8) & 0x7f;
3441 + xc->byte2 = (c) &0x7f;
3446 +DviCharIndexJISX0208_1983(map, name)
3447 + DviCharNameMap *map;
3450 + /* XXX: can we assume name points EUC-JP chars? */
3451 + unsigned char ub = *name, lb = *(name + 1);
3453 + wc = (name[0] & 0xff) << 8;
3454 + wc |= (name[1] & 0xff);
3458 +static DviCharNameMap JISX0208_1983_0_map = {
3459 + "jisx0208.1983-0",
3462 + DviCharIndexJISX0208_1983,
3464 +{ "DummyEntry", /* 0 */},
3468 static DviCharNameMap ISO8859_1_map = {
3471 +#ifdef ENABLE_MULTIBYTE
3478 @@ -393,6 +437,10 @@
3479 static DviCharNameMap Adobe_Symbol_map = {
3480 "adobe-fontspecific",
3482 +#ifdef ENABLE_MULTIBYTE
3490 standard_maps_loaded = 1;
3491 DviRegisterMap (&ISO8859_1_map);
3492 DviRegisterMap (&Adobe_Symbol_map);
3493 +#ifdef ENABLE_MULTIBYTE
3494 + DviRegisterMap (&JISX0208_1983_0_map);
3497 --- groff-1.18.1.1.orig/src/xditview/config.h
3498 +++ groff-1.18.1.1/src/xditview/config.h
3501 +#include "../include/config.h"
3504 --- groff-1.18.1.1.orig/src/xditview/XFontName.c
3505 +++ groff-1.18.1.1/src/xditview/XFontName.c
3511 XCopyFontName (name1, name2, fontNameAttributes)
3512 XFontName *name1, *name2;
3513 unsigned int fontNameAttributes;
3514 --- groff-1.18.1.1.orig/src/xditview/GXditview.ad
3515 +++ groff-1.18.1.1/src/xditview/GXditview.ad
3517 GXditview.promptShell.promptDialog.cancel.label: Cancel
3518 GXditview.promptShell.promptDialog.cancel.translations: #override \
3519 <BtnUp>: Cancel() unset()
3521 +GXditview*fontMap: \
3522 +TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
3523 +TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\
3524 +TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
3525 +TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
3526 +CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
3527 +CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\
3528 +CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
3529 +CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\
3530 +HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
3531 +HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\
3532 +HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
3533 +HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\
3534 +NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
3535 +NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\
3536 +NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
3537 +NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
3538 +S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
3539 +SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
3540 +M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\n\
3541 +G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0
3542 --- groff-1.18.1.1.orig/src/xditview/GXditview-ad.h
3543 +++ groff-1.18.1.1/src/xditview/GXditview-ad.h
3545 "GXditview.promptShell.promptDialog.cancel.label: Cancel",
3546 "GXditview.promptShell.promptDialog.cancel.translations: #override \
3547 <BtnUp>: Cancel() unset()",
3548 +"GXditview*fontMap: \
3549 +TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3550 +TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\\n\
3551 +TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3552 +TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\\n\
3553 +CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3554 +CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\\n\
3555 +CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3556 +CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\\n\
3557 +HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3558 +HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\\n\
3559 +HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3560 +HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\\n\
3561 +NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3562 +NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\\n\
3563 +NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\
3564 +NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\\n\
3565 +S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\\n\
3566 +SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\\n\
3567 +M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\\n\
3568 +G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0",
3569 --- groff-1.18.1.1.orig/src/xditview/DviP.h
3570 +++ groff-1.18.1.1/src/xditview/DviP.h
3575 +#include "config.h"
3578 #include "DviChar.h"
3580 #define DVI_CHAR_CACHE_SIZE 1024
3582 typedef struct _dviCharCache {
3583 +#ifdef ENABLE_MULTIBYTE
3584 + XTextItem16 cache[DVI_TEXT_CACHE_SIZE];
3586 XTextItem cache[DVI_TEXT_CACHE_SIZE];
3588 char adjustable[DVI_TEXT_CACHE_SIZE];
3589 +#ifdef ENABLE_MULTIBYTE
3590 + XChar2b char_cache[DVI_CHAR_CACHE_SIZE];
3592 char char_cache[DVI_CHAR_CACHE_SIZE];
3601 +extern int DviGetAndPut();
3602 #define DviGetIn(dw,cp)\
3603 (dw->dvi.tmpFile ? (\
3604 DviGetAndPut (dw, cp) \
3605 @@ -228,6 +238,11 @@
3606 extern DeviceFont *QueryDeviceFont ();
3608 extern char *GetWord(), *GetLine();
3610 +#ifdef ENABLE_MULTIBYTE
3611 +extern void DviInitLocale();
3612 +extern int DviGEtCharacter();
3614 #endif /* _XtDviP_h */
3617 --- groff-1.18.1.1.orig/src/xditview/device.c
3618 +++ groff-1.18.1.1/src/xditview/device.c
3623 +#include <stdlib.h>
3625 #include <X11/Xos.h>
3626 #include <X11/Intrinsic.h>
3628 +#include "config.h"
3634 struct charinfo *char_table[CHAR_TABLE_SIZE];
3635 struct charinfo *code_table[256];
3636 +#ifdef ENABLE_MULTIBYTE
3637 + struct charrange *range;
3643 static struct charinfo *add_char();
3644 static int read_charset_section();
3645 static char *canonicalize_name();
3646 +#ifdef ENABLE_MULTIBYTE
3648 + struct charrange *next;
3653 +static void add_charrange();
3657 Device *new_device(name)
3659 f->char_table[i] = 0;
3660 for (i = 0; i < 256; i++)
3661 f->code_table[i] = 0;
3662 +#ifdef ENABLE_MULTIBYTE
3668 @@ -267,6 +284,15 @@
3672 +#ifdef ENABLE_MULTIBYTE
3674 + struct charrange *cp, *cp2;
3675 + for (cp = f->range; cp != NULL; cp = cp2) {
3677 + XtFree((char *)cp);
3682 for (i = 0; i < CHAR_TABLE_SIZE; i++) {
3683 struct charinfo *ptr = f->char_table[i];
3684 @@ -342,6 +368,20 @@
3688 +#ifdef ENABLE_MULTIBYTE
3690 + extern DviWCharP();
3691 + if (DviWCharP(name, &wc)) {
3692 + struct charrange *rp;
3693 + for (rp = f->range; rp != NULL; rp = rp->next) {
3694 + if (rp->start_code <= wc && wc <= rp->end_code) {
3695 + *widthp = scale_round(rp->width, ps,
3696 + f->dev->unitwidth);
3702 name = canonicalize_name(name);
3703 for (p = f->char_table[hash_name(name) % CHAR_TABLE_SIZE];; p = p->next) {
3705 @@ -424,6 +464,22 @@
3709 +#ifdef ENABLE_MULTIBYTE
3711 +add_charrange(f, width, start_code, end_code)
3713 + int width, start_code, end_code;
3715 + struct charrange *ci;
3716 + ci = (struct charrange *)XtMalloc(sizeof(struct charrange));
3717 + ci->start_code = start_code;
3718 + ci->end_code = end_code;
3719 + ci->width = width;
3720 + ci->next = f->range;
3725 /* Return non-zero for success. */
3728 @@ -439,11 +495,31 @@
3732 +#ifdef ENABLE_MULTIBYTE
3737 name = strtok(buf, WS);
3739 continue; /* ignore blank lines */
3740 +#ifdef ENABLE_MULTIBYTE
3741 + if (sscanf(name, "u%X..u%X", &scode, &ecode) == 2) {
3742 + p = strtok((char *)0, WS);
3745 + if (sscanf(p, "%d", &width) != 1) {
3746 + error("bad width field");
3749 + p = strtok((char *)0, WS);
3751 + error("missing type field");
3754 + add_charrange(f, width, scode, ecode);
3757 p = strtok((char *)0, WS);
3758 if (!p) /* end of charset section */
3762 last_charinfo = add_char(f, name, width, code);
3764 +#ifdef ENABLE_MULTIBYTE
3771 FILE *open_device_file(device_name, file_name, result)
3772 char *device_name, *file_name, **result;
3778 buf = XtMalloc(3 + strlen(device_name) + 1 + strlen(file_name) + 1);
3779 --- groff-1.18.1.1.orig/src/xditview/page.c
3780 +++ groff-1.18.1.1/src/xditview/page.c
3794 ForgetPagePositions (dw)
3798 dw->dvi.file_map = 0;
3802 RememberPagePosition(dw, number)
3806 m->position = ftell (dw->dvi.file);
3810 SearchPagePosition (dw, number)
3818 FileSeek(dw, position)
3821 --- groff-1.18.1.1.orig/src/xditview/FontMap.jisx0208
3822 +++ groff-1.18.1.1/src/xditview/FontMap.jisx0208
3824 +M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0
3825 +G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0
3826 --- groff-1.18.1.1.orig/src/xditview/xditview.c
3827 +++ groff-1.18.1.1/src/xditview/xditview.c
3829 #include <X11/Xaw/SimpleMenu.h>
3830 #include <X11/Xaw/SmeBSB.h>
3832 +#include <stdlib.h>
3837 * Report the syntax for calling xditview.
3845 @@ -126,12 +127,12 @@
3849 - "nextPage", NextPage,
3850 - "previousPage", PreviousPage,
3851 - "selectPage", SelectPage,
3853 - "openFile", OpenFile,
3855 + {"nextPage", NextPage},
3856 + {"previousPage",PreviousPage},
3857 + {"selectPage", SelectPage},
3859 + {"openFile", OpenFile},
3863 static void NextPageAction(), PreviousPageAction(), SelectPageAction();
3864 @@ -139,17 +140,18 @@
3865 static void AcceptAction(), CancelAction();
3866 static void PrintAction();
3867 static void RerasterizeAction();
3868 +static void MakePrompt();
3870 XtActionsRec xditview_actions[] = {
3871 - "NextPage", NextPageAction,
3872 - "PreviousPage", PreviousPageAction,
3873 - "SelectPage", SelectPageAction,
3874 - "Print", PrintAction,
3875 - "OpenFile", OpenFileAction,
3876 - "Rerasterize", RerasterizeAction,
3877 - "Quit", QuitAction,
3878 - "Accept", AcceptAction,
3879 - "Cancel", CancelAction,
3880 + {"NextPage", NextPageAction},
3881 + {"PreviousPage", PreviousPageAction},
3882 + {"SelectPage", SelectPageAction},
3883 + {"Print", PrintAction},
3884 + {"OpenFile", OpenFileAction},
3885 + {"Rerasterize", RerasterizeAction},
3886 + {"Quit", QuitAction},
3887 + {"Accept", AcceptAction},
3888 + {"Cancel", CancelAction},
3891 #define MenuNextPage 0
3894 static char fileBuf[1024];
3897 ResetMenuEntry (entry)
3901 CancelAction (widget, event, params, num_params);
3905 MakePrompt(centerw, prompt, func, def)
3908 --- groff-1.18.1.1.orig/src/xditview/xtotroff.c
3909 +++ groff-1.18.1.1/src/xditview/xtotroff.c
3913 * convert X font metrics into troff font metrics
3914 + * XXX: ENABLE_MULTIBYTE may not work yet
3917 #include <X11/Xlib.h>
3922 +#include "config.h"
3923 #include "XFontName.h"
3924 #include "DviChar.h"
3926 @@ -171,6 +173,47 @@
3927 fprintf (out, "spacewidth %d\n", w);
3929 fprintf (out, "charset\n");
3930 +#if 0 /* def ENABLE_MULTIBYTE */
3931 + if (fi->min_byte1 != 0 || fi->max_byte1 != 0) {
3933 + * 2 byte code font.
3936 + int D = fi->max_char_or_byte2 - fi->min_char_or_byte2 + 1;
3937 + int max = (fi->max_byte1 - fi->min_byte1 + 1) *
3938 + (fi->max_char_or_byte2 - fi->min_char_or_byte2 + 1);
3941 + unsigned int euc_code;
3943 + for (N = 0; N < max; N++) {
3944 + byte1 = N / D + fi->min_byte1;
3945 + byte2 = N % D + fi->min_char_or_byte2;
3946 + euc_code = ((byte1 << 8) | byte2) & 0xffff | 0x8080;
3947 + wid = fi->max_bounds.width;
3948 + fputc(byte1 & 0xff | 0x80, out);/* output EUC code */
3949 + fputc(byte2 & 0xff | 0x80, out);/* output EUC code */
3950 + fprintf (out, "\t%d", wid);
3953 + param[0] = fi->max_bounds.ascent;
3954 + param[1] = fi->max_bounds.descent;
3955 + param[2] = 0 /* charRBearing (fi, c) - wid */;
3956 + param[3] = 0 /* charLBearing (fi, c) */;
3957 + param[4] = 0; /* XXX */
3958 + for (j = 0; j < 5; j++)
3961 + for (j = 4; j >= 0; j--)
3962 + if (param[j] != 0)
3964 + for (k = 0; k <= j; k++)
3965 + fprintf (out, ",%d", param[k]);
3967 + fprintf (out, "\t0\t%#x\n", euc_code);
3970 +#endif /* ENABLE_MULTIBYTE */
3971 for (c = fi->min_char_or_byte2; c <= fi->max_char_or_byte2; c++) {
3972 char *name = DviCharName (char_map,c,0);
3973 if (charExists (fi, c) && (groff_flag || name)) {
3974 --- groff-1.18.1.1.orig/src/xditview/DviChar.h
3975 +++ groff-1.18.1.1/src/xditview/DviChar.h
3977 * CharSetRegistry from the CharSetEncoding
3980 +#include "config.h"
3982 # define DVI_MAX_SYNONYMS 10
3983 # define DVI_MAP_SIZE 256
3984 # define DVI_HASH_SIZE 256
3986 typedef struct _dviCharNameMap {
3989 +#ifdef ENABLE_MULTIBYTE
3990 + void (*char2XChar2b)(/* int c, XChar2b *xc */);
3991 + int (*char_index)(/* struct _dviCharNameMap *map, char *name */);
3993 char *dvi_names[DVI_MAP_SIZE][DVI_MAX_SYNONYMS];
3994 DviCharNameHash *buckets[DVI_HASH_SIZE];
3996 --- groff-1.18.1.1.orig/src/xditview/draw.c
3997 +++ groff-1.18.1.1/src/xditview/draw.c
4002 +#include "config.h"
4004 /* math.h on a Sequent doesn't define M_PI, apparently */
4010 +#include "encoding.h" /* XXX */
4012 #define DeviceToX(dw, n) ((int)((n) * (dw)->dvi.scale_factor + .5))
4013 #define XPos(dw) (DeviceToX((dw), (dw)->dvi.state->x - \
4016 static int FakeCharacter();
4019 +extern int MaxFontPosition();
4022 HorizontalMove(dw, delta)
4026 dw->dvi.state->x += delta;
4030 HorizontalGoto(dw, NewPosition)
4034 dw->dvi.state->x = NewPosition;
4038 VerticalMove(dw, delta)
4042 dw->dvi.state->y += delta;
4046 VerticalGoto(dw, NewPosition)
4050 dw->dvi.state->y = NewPosition;
4054 AdjustCacheDeltas (dw)
4057 @@ -94,14 +104,21 @@
4065 if (dw->dvi.cache.char_index != 0) {
4066 AdjustCacheDeltas (dw);
4067 +#ifdef ENABLE_MULTIBYTE
4068 + XDrawText16 (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
4069 + dw->dvi.cache.start_x, dw->dvi.cache.start_y,
4070 + dw->dvi.cache.cache, dw->dvi.cache.index + 1);
4072 XDrawText (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
4073 dw->dvi.cache.start_x, dw->dvi.cache.start_y,
4074 dw->dvi.cache.cache, dw->dvi.cache.index + 1);
4077 dw->dvi.cache.index = 0;
4078 dw->dvi.cache.max = DVI_TEXT_CACHE_SIZE;
4080 dw->dvi.cache.start_y = dw->dvi.cache.y = YPos (dw);
4088 dw->dvi.word_flag = 0;
4097 (fi)->max_bounds.width\
4102 int charExists (fi, c)
4103 @@ -152,14 +170,25 @@
4104 || p->ascent != 0 || p->descent != 0 || p->attributes != 0);
4109 +#ifdef ENABLE_MULTIBYTE
4110 +DoCharacter (dw, c, wid, char2xchar2b)
4112 DoCharacter (dw, c, wid)
4116 int wid; /* width in device units */
4117 +#ifdef ENABLE_MULTIBYTE
4118 + void (*char2xchar2b)();
4121 register XFontStruct *font;
4122 +#ifdef ENABLE_MULTIBYTE
4123 + register XTextItem16 *text;
4125 register XTextItem *text;
4130 @@ -225,9 +254,25 @@
4132 dw->dvi.cache.x += text->delta;
4134 +#ifdef ENABLE_MULTIBYTE
4135 + if (charExists(font, c) || char2xchar2b) {
4137 if (charExists(font, c)) {
4140 +#ifdef ENABLE_MULTIBYTE
4141 + if (char2xchar2b) {
4142 + (*char2xchar2b)(c,
4143 + &dw->dvi.cache.char_cache[dw->dvi.cache.char_index++]);
4145 + dw->dvi.cache.char_cache[dw->dvi.cache.char_index].
4146 + byte1 = (unsigned char)'\0';
4147 + dw->dvi.cache.char_cache[dw->dvi.cache.char_index++].
4148 + byte2 = (unsigned char)c;
4151 dw->dvi.cache.char_cache[dw->dvi.cache.char_index++] = (char) c;
4154 w = charWidth(font, c);
4155 dw->dvi.cache.x += w;
4156 @@ -291,7 +336,11 @@
4158 c = DviCharIndex (map, buf);
4160 +#ifdef ENABLE_MULTIBYTE
4161 + DoCharacter (dw, c, wid, map->char2XChar2b);
4163 DoCharacter (dw, c, wid);
4166 (void) FakeCharacter (dw, buf, wid);
4167 dw->dvi.state->font_number = prevFont;
4173 PutNumberedCharacter (dw, c)
4176 @@ -368,7 +418,11 @@
4177 dw->dvi.state->font_size, c, &wid))
4179 if (dw->dvi.native) {
4180 +#ifdef ENABLE_MULTIBYTE
4181 + DoCharacter (dw, c, wid, NULL);
4183 DoCharacter (dw, c, wid);
4187 map = QueryFontMap (dw, dw->dvi.state->font_number);
4188 @@ -379,7 +433,11 @@
4189 name = device_name_for_code ((DeviceFont *)0, c)) {
4190 int code = DviCharIndex (map, name);
4192 +#ifdef ENABLE_MULTIBYTE
4193 + DoCharacter (dw, code, wid, map->char2XChar2b);
4195 DoCharacter (dw, code, wid);
4199 if (FakeCharacter (dw, name, wid))
4200 @@ -387,13 +445,14 @@
4208 XClearWindow (XtDisplay (dw), XtWindow (dw));
4234 xp + DeviceToX (dw, x), yp + DeviceToX (dw, y));
4238 DrawCircle (dw, diam)
4246 DrawFilledCircle (dw, diam)
4254 DrawEllipse (dw, a, b)
4258 DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
4262 DrawFilledEllipse (dw, a, b)
4266 DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
4270 DrawArc (dw, x0, y0, x1, y1)
4274 rad*2, rad*2, angle1, angle2);
4278 DrawPolygon (dw, v, n)
4287 DrawFilledPolygon (dw, v, n)
4292 #define POINTS_MAX 10000
4296 appendPoint(points, pointi, x, y)
4305 flattenCurve(points, pointi, x2, y2, x3, y3, x4, y4)
4314 DrawSpline (dw, v, n)
4317 --- groff-1.18.1.1.orig/src/xditview/font.c
4318 +++ groff-1.18.1.1/src/xditview/font.c
4320 #include <X11/StringDefs.h>
4323 +#include <stdlib.h>
4325 #include "XFontName.h"
4327 -static DisposeFontSizes();
4328 +static void DisposeFontSizes();
4329 +void DestroyFontMap();
4332 +extern Bool XParseFontName();
4333 +extern Bool XFormatFontName();
4338 # define SizePosition 8
4339 # define EncodingPosition 13
4343 ConvertFontNameToSize (n)
4352 DisposeFontSizes (dw, fs)
4354 DviFontSizeList *fs;
4372 dw->dvi.font_map = fm;
4376 DestroyFontMap (font_map)
4377 DviFontMap *font_map;
4384 SetFontPosition (dw, position, dvi_name, extra)
4387 --- groff-1.18.1.1.orig/src/roff/troff/charinfo.h
4388 +++ groff-1.18.1.1/src/roff/troff/charinfo.h
4391 unsigned char special_translation;
4392 unsigned char hyphenation_code;
4393 +#ifdef ENABLE_MULTIBYTE
4394 + unsigned short flags;
4396 unsigned char flags;
4398 unsigned char ascii_code;
4399 unsigned char asciify_code;
4400 +#ifdef ENABLE_MULTIBYTE
4404 char transparent_translate; // non-zero means translation applies
4405 // to transparent throughput
4407 OVERLAPS_VERTICALLY = 16,
4410 +#ifdef ENABLE_MULTIBYTE
4412 + DONT_BREAK_BEFORE = 0x100, // 256, pre kinsoku
4413 + DONT_BREAK_AFTER = 0x200 // 512, post kinsoku
4419 int get_translation_input();
4420 charinfo *get_translation(int = 0);
4421 void set_translation(charinfo *, int, int);
4422 +#ifdef ENABLE_MULTIBYTE
4423 + void set_flags(unsigned short);
4425 void set_flags(unsigned char);
4427 void set_special_translation(int, int);
4428 int get_special_translation(int = 0);
4429 macro *set_macro(macro *, int = 0);
4434 +#ifdef ENABLE_MULTIBYTE
4435 + wchar get_wchar_code();
4436 + void set_wchar_code(wchar);
4437 + int cannot_break_before(); // pre kinsoku
4438 + int cannot_break_after(); // post kinsoku
4440 symbol *get_symbol();
4443 @@ -131,6 +153,18 @@
4447 +#ifdef ENABLE_MULTIBYTE
4448 +inline int charinfo::cannot_break_before()
4450 + return flags & DONT_BREAK_BEFORE;
4453 +inline int charinfo::cannot_break_after()
4455 + return flags & DONT_BREAK_AFTER;
4459 inline charinfo *charinfo::get_translation(int transparent_throughput)
4461 return (transparent_throughput && !transparent_translate
4462 @@ -153,7 +187,18 @@
4463 return (translate_input ? asciify_code : 0);
4466 +#ifdef ENABLE_MULTIBYTE
4467 +inline wchar charinfo::get_wchar_code()
4469 + return wchar_code;
4473 +#ifdef ENABLE_MULTIBYTE
4474 +inline void charinfo::set_flags(unsigned short c)
4476 inline void charinfo::set_flags(unsigned char c)
4481 --- groff-1.18.1.1.orig/src/roff/troff/troff.h
4482 +++ groff-1.18.1.1/src/roff/troff/troff.h
4487 +#include "encoding.h"
4491 --- groff-1.18.1.1.orig/src/roff/troff/env.cc
4492 +++ groff-1.18.1.1/src/roff/troff/env.cc
4494 #include "charinfo.h"
4495 #include "macropath.h"
4497 +#include "font.h" // ENABLE_MULTIBYTE only?
4500 symbol default_family("T");
4501 @@ -264,6 +265,13 @@
4502 void environment::add_char(charinfo *ci)
4505 +#ifdef ENABLE_MULTIBYTE
4506 + int fontno = get_font(); // current font #
4507 + int fontset_font = get_fontset_fontno(fontno, ci->get_wchar_code());
4508 + if (fontno >= 0 && fontno != fontset_font) {
4509 + change_curfont(fontset_font);
4514 // don't allow fields in dummy environments
4515 @@ -286,11 +294,95 @@
4519 +#ifdef ENABLE_MULTIBYTE
4521 + * XXX: NEED REWRITE TO BE MORE GENERIC
4522 + * This code is based on jgroff
4523 + * about kerning between ASCII and EUC-JP
4525 + if (!ci->get_wchar_code()) {
4527 + * This node is a ASCII character node.
4529 + if (!pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) {
4531 + * Insert a little space node between EUC and ASCII.
4533 + word_space_node *ws;
4535 + if (ci->ends_sentence() || ci->transparent() || ci->cannot_break_before())
4536 + ws = new unbreakable_space_node(hwkern.to_units(), get_fill_color());
4538 + ws = new word_space_node(hwkern.to_units(),
4540 + new width_list(env_space_width(this),
4541 + env_sentence_space_width(this)));
4542 + curenv->add_node(ws);
4544 + pre_char_is_ascii = 1;
4545 + pre_wchar_cannot_break_after = 0;
4548 + * This node is a EUC charcater node.
4550 + if (!pre_char_is_ascii && line->get_node_type() == NODE_NEWLINE_SPACE) {
4552 + * remove a newline-node.
4554 + node *ns_node = line;
4555 + line = line->next;
4556 + width_total -= ns_node->width();
4557 + space_total -= ns_node->nspaces();
4561 + if (!pre_wchar_cannot_break_after && !ci->cannot_break_before()) {
4563 + * add a zero-width-space-node before EUC charcater node.
4565 + add_node(new kword_space_node(get_fill_color()));
4566 + met_with_kword_space = 1;
4568 + pre_wchar_cannot_break_after = ci->cannot_break_after();
4570 + if (pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) {
4572 + * Insert a little space node between ASCII and EUC.
4574 + unbreakable_space_node *ws =
4575 + new unbreakable_space_node(hwkern.to_units(), get_fill_color());
4576 + curenv->add_node(ws);
4578 + pre_char_is_ascii = 0;
4580 + if (!vlower.is_zero()) {
4582 + * Lower a EUC charcater node.
4584 + curenv->add_node(new vmotion_node(vlower.to_units(),
4585 + get_fill_color())); // lower
4589 if (ci != hyphen_indicator_char)
4590 line = line->add_char(ci, this, &width_total, &space_total);
4592 line = line->add_discretionary_hyphen();
4593 +#ifdef ENABLE_MULTIBYTE
4594 + enable_wcharkern = 1;
4595 + if (!vlower.is_zero() && ci->get_wchar_code()) {
4597 + * Raise a EUC charcater node.
4599 + curenv->add_node(new vmotion_node(-vlower.to_units(),
4600 + get_fill_color())); // raise
4604 +#ifdef ENABLE_MULTIBYTE
4605 + if (fontset_font >= 0 && fontno != fontset_font)
4606 + change_curfont(fontno); /* restore saved font # */
4610 node *environment::make_char_node(charinfo *ci)
4611 @@ -394,7 +486,11 @@
4615 +#ifdef ENABLE_MULTIBYTE
4616 + add_node(new newline_space_node(x, get_fill_color())); // This node may be removed
4618 add_node(new word_space_node(x, get_fill_color(), w));
4620 possibly_break_line(0, spread_flag);
4623 @@ -480,6 +576,35 @@
4624 warning(WARN_FONT, "bad font number");
4627 +#ifdef ENABLE_MULTIBYTE
4628 +void environment::change_curfont(symbol nm)
4630 + int n = symbol_fontno(nm);
4632 + n = next_available_font_position();
4633 + if (!mount_font(n, nm))
4639 +void environment::change_curfont(int n)
4641 + if (is_good_fontno(n))
4644 + error("bad font number");
4647 +void environment::set_encoding(symbol enc)
4649 + if (enc.is_null() || enc.is_empty())
4651 + select_input_encoding_handler(enc.contents());
4652 + select_output_encoding_handler(enc.contents());
4654 +#endif /* ENABLE_MULTIBYTE */
4656 void environment::set_family(symbol fam)
4659 @@ -649,6 +774,16 @@
4661 no_break_control_char('\''),
4662 hyphen_indicator_char(0)
4663 +#ifdef ENABLE_MULTIBYTE
4665 + stretch_threshold(0),
4666 + pre_wchar_cannot_break_after(0),
4667 + pre_char_is_ascii(-1),
4668 + enable_wcharkern(0),
4669 + met_with_kword_space(0),
4670 + hwkern(font::wcharkern),
4671 + vlower(font::lowerwchar)
4674 prev_family = family = lookup_family(default_family);
4675 prev_fontno = fontno = 1;
4676 @@ -739,6 +874,16 @@
4677 control_char(e->control_char),
4678 no_break_control_char(e->no_break_control_char),
4679 hyphen_indicator_char(e->hyphen_indicator_char)
4680 +#ifdef ENABLE_MULTIBYTE
4682 + stretch_threshold(e->stretch_threshold),
4683 + pre_wchar_cannot_break_after(0),
4684 + pre_char_is_ascii(-1),
4685 + enable_wcharkern(0),
4686 + met_with_kword_space(0),
4687 + hwkern(font::wcharkern),
4688 + vlower(font::lowerwchar)
4693 @@ -1781,6 +1926,9 @@
4694 target_text_length = line_length - saved_indent;
4697 +#ifdef ENABLE_MULTIBYTE
4698 + enable_wcharkern = 0;
4702 hunits environment::get_hyphenation_space()
4703 @@ -1819,6 +1967,23 @@
4707 +#ifdef ENABLE_MULTIBYTE
4708 +void stretch_threshold_request()
4711 + if (has_arg() && get_integer(&n)) {
4712 + if (n < 0 || n > 100) {
4713 + warning(WARN_RANGE, "stretch threshold value %1 out of range", n);
4715 + curenv->stretch_threshold = n;
4718 + curenv->stretch_threshold = 0;
4724 breakpoint *environment::choose_breakpoint()
4726 hunits x = width_total;
4727 @@ -2014,6 +2179,30 @@
4728 // When a macro follows a paragraph in fill mode, the
4729 // current line should not be empty.
4730 || (width_total - line->width()) > target_text_length)) {
4731 +#ifdef ENABLE_MULTIBYTE
4732 + if (met_with_kword_space) {
4733 + node *linep = line;
4735 + while (linep->next) {
4736 + if (linep->next->get_node_type() == NODE_GLYPH)
4738 + else if (linep->next->get_node_type() == NODE_KWORD_SPACE)
4740 + linep = linep->next;
4744 + * delete a kword_space_node which is in the top of line.
4746 + linep = prep->next;
4747 + prep->next = linep->next;
4748 + width_total -= linep->width();
4749 + space_total -= linep->nspaces();
4752 + met_with_kword_space = 0;
4755 hyphenate_line(start_here);
4756 breakpoint *bp = choose_breakpoint();
4758 @@ -2026,6 +2215,15 @@
4759 bp->nd->split(bp->index, &pre, &post);
4761 hunits extra_space_width = H0;
4762 +#ifdef ENABLE_MULTIBYTE
4763 + int sv_adjust_mode = adjust_mode;
4764 + if (stretch_threshold) {
4765 + int ratio = bp->width * 100 / target_text_length;
4766 + if (ratio < stretch_threshold) {
4767 + adjust_mode = ADJUST_LEFT;
4771 switch(adjust_mode) {
4773 if (bp->nspaces != 0)
4774 @@ -2041,6 +2239,9 @@
4775 saved_indent += target_text_length - bp->width;
4778 +#ifdef ENABLE_MULTIBYTE
4779 + adjust_mode = sv_adjust_mode;
4781 distribute_space(pre, bp->nspaces, extra_space_width);
4782 hunits output_width = bp->width + extra_space_width;
4783 input_line_start -= output_width;
4784 @@ -3237,6 +3438,9 @@
4785 init_request("hys", hyphenation_space_request);
4786 init_request("hym", hyphenation_margin_request);
4787 init_request("pvs", post_vertical_spacing);
4788 +#ifdef ENABLE_MULTIBYTE
4789 + init_request("stt", stretch_threshold_request);
4791 init_int_env_reg(".f", get_font);
4792 init_int_env_reg(".b", get_bold);
4793 init_hunits_env_reg(".i", get_indent);
4794 --- groff-1.18.1.1.orig/src/roff/troff/node.h
4795 +++ groff-1.18.1.1/src/roff/troff/node.h
4797 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
4800 +#include "config.h"
4802 struct hyphen_list {
4803 unsigned char hyphen;
4804 unsigned char breakable;
4806 void hyphenate(hyphen_list *, unsigned);
4808 enum hyphenation_type { HYPHEN_MIDDLE, HYPHEN_BOUNDARY, HYPHEN_INHIBIT };
4809 +#ifdef ENABLE_MULTIBYTE
4810 +enum node_type {NODE_GLYPH, NODE_KWORD_SPACE, NODE_NEWLINE_SPACE, NODE_ANOTHER};
4813 class ascii_output_file;
4817 virtual int same(node *) = 0;
4818 virtual const char *type() = 0;
4819 +#ifdef ENABLE_MULTIBYTE
4820 + virtual node_type get_node_type();
4825 @@ -212,6 +220,24 @@
4829 +#ifdef ENABLE_MULTIBYTE
4830 +class kword_space_node : public word_space_node {
4832 + kword_space_node(color *, node * = 0);
4834 + const char *type();
4835 + node_type get_node_type();
4838 +class newline_space_node : public word_space_node {
4840 + newline_space_node(hunits, color *, node * = 0);
4842 + const char *type();
4843 + node_type get_node_type();
4847 class unbreakable_space_node : public word_space_node {
4848 unbreakable_space_node(hunits, int, color *, node * = 0);
4851 node *copy_node_list(node *);
4853 int get_bold_fontno(int f);
4854 +#ifdef ENABLE_MULTIBYTE
4855 +int get_fontset_fontno(int f, wchar wc);
4858 inline hyphen_list::hyphen_list(unsigned char code, hyphen_list *p)
4859 : hyphen(0), breakable(0), hyphenation_code(code), next(p)
4862 font_family *lookup_family(symbol);
4863 symbol get_font_name(int, environment *);
4865 --- groff-1.18.1.1.orig/src/roff/troff/env.h
4866 +++ groff-1.18.1.1/src/roff/troff/env.h
4867 @@ -213,6 +213,15 @@
4868 unsigned char control_char;
4869 unsigned char no_break_control_char;
4870 charinfo *hyphen_indicator_char;
4871 +#ifdef ENABLE_MULTIBYTE
4872 + int stretch_threshold;
4873 + int pre_wchar_cannot_break_after;
4874 + int pre_char_is_ascii;
4875 + int enable_wcharkern;
4876 + int met_with_kword_space;
4881 environment(symbol);
4882 environment(const environment *); // for temporary environment
4883 @@ -279,6 +288,10 @@
4886 void set_font(symbol);
4887 +#ifdef ENABLE_MULTIBYTE
4888 + void change_curfont(int);
4889 + void change_curfont(symbol);
4891 void set_family(symbol);
4893 void set_char_height(int);
4895 const char *get_point_size_string();
4896 const char *get_requested_point_size_string();
4897 void output_pending_lines();
4898 +#ifdef ENABLE_MULTIBYTE
4899 + void set_encoding(symbol);
4902 friend void title_length();
4903 friend void space_size();
4905 #ifdef WIDOW_CONTROL
4906 friend void widow_control_request();
4907 #endif /* WIDOW_CONTROL */
4908 +#ifdef ENABLE_MULTIBYTE
4909 + friend void stretch_threshold_request();
4912 friend void do_divert(int append, int boxing);
4914 --- groff-1.18.1.1.orig/src/roff/troff/input.cc
4915 +++ groff-1.18.1.1/src/roff/troff/input.cc
4917 #include "macropath.h"
4920 +#include "encoding.h" // XXX: ukai
4922 // Needed for getpid() and isatty()
4925 charinfo *charset_table[256];
4926 unsigned char hpf_code_table[256];
4928 +#ifdef ENABLE_MULTIBYTE
4929 +charinfo *wcharset_table_entry(wchar wc);
4931 +#endif /* ENABLE_MULTIBYTE */
4933 static int warning_mask = DEFAULT_WARNING_MASK;
4934 static int inhibit_errors = 0;
4935 static int ignoring = 0;
4936 @@ -148,6 +154,20 @@
4937 input_iterator *make_temp_iterator(const char *);
4938 const char *input_char_description(int);
4940 +#ifdef ENABLE_MULTIBYTE
4944 + symbol e = get_long_name(1);
4945 + if (e.is_null()) {
4949 + curenv->set_encoding(e);
4955 void set_escape_char()
4957 @@ -1524,6 +1544,19 @@
4958 type = TOKEN_NEWLINE;
4961 +#ifdef ENABLE_MULTIBYTE
4962 +class encoding_istream_input : public encoding_istream {
4966 + encoding_istream_input(node **n) : np(n) {};
4967 + ~encoding_istream_input() {};
4968 + int getbyte() { return input_stack::get(np); };
4969 + int peekbyte() { return input_stack::peek(); };
4970 + void ungetbyte(int ch) { return; };
4977 @@ -1533,6 +1566,10 @@
4981 +#ifdef ENABLE_MULTIBYTE
4982 + encoding_istream_input einput(&n);
4985 int cc = input_stack::get(&n);
4986 if (cc != escape_char || escape_char == 0) {
4988 @@ -1686,8 +1723,22 @@
4992 +#ifdef ENABLE_MULTIBYTE
4993 + wc = input_encoding->make_wchar(cc, einput);
4994 + if (is_wchar_code(wc)) {
4995 + type = TOKEN_WCHAR;
4997 + } else if (wc == ' ') {
4998 + type = TOKEN_SPACE;
5001 + type = TOKEN_CHAR;
5011 @@ -2057,6 +2108,10 @@
5015 +#ifdef ENABLE_MULTIBYTE
5017 + return wc == t.wc;
5021 case TOKEN_NUMBERED_CHAR:
5022 @@ -2563,6 +2618,27 @@
5026 +#ifdef ENABLE_MULTIBYTE
5027 + case token::TOKEN_WCHAR:
5029 + wchar wch = tok.wc;
5031 + if (possibly_handle_first_page_transition())
5035 + curenv->add_char(wcharset_table_entry(wch));
5037 + if (tok.type != token::TOKEN_WCHAR)
5041 + suppress_next = 1;
5046 +#endif /* ENABLE_MULTIBYTE */
5047 case token::TOKEN_TRANSPARENT:
5050 @@ -6018,6 +6094,10 @@
5052 if (type == TOKEN_CHAR)
5053 return charset_table[c];
5054 +#ifdef ENABLE_MULTIBYTE
5055 + if (type == TOKEN_WCHAR)
5056 + return wcharset_table_entry(wc);
5058 if (type == TOKEN_SPECIAL)
5059 return get_charinfo(nm);
5060 if (type == TOKEN_NUMBERED_CHAR)
5061 @@ -6070,6 +6150,11 @@
5063 *pp = (*pp)->add_char(charset_table[c], curenv, &w, &s);
5065 +#ifdef ENABLE_MULTIBYTE
5067 + *pp = (*pp)->add_char(wcharset_table_entry(wc), curenv, &w, &s);
5073 @@ -6142,6 +6227,11 @@
5075 curenv->add_char(charset_table[c]);
5077 +#ifdef ENABLE_MULTIBYTE
5079 + curenv->add_char(wcharset_table_entry(wc));
5083 curenv->add_node(new dummy_node);
5085 @@ -6900,6 +6990,7 @@
5087 mac_path = ¯o_path;
5088 set_string(".T", device);
5089 + init_encoding_handler();
5090 init_charset_table();
5091 init_hpf_code_table();
5092 if (!font::load_desc())
5093 @@ -6924,6 +7015,9 @@
5094 // In the DESC file a font name of 0 (zero) means leave this
5096 if (strcmp(font::font_name_table[i], "0") != 0)
5097 +#ifdef ENABLE_MULTIBYTE
5098 + if (!font::is_on_demand(i))
5100 mount_font(j, symbol(font::font_name_table[i]));
5101 curdiv = topdiv = new top_level_diversion;
5103 @@ -7081,6 +7175,9 @@
5104 init_request("ecs", save_escape_char);
5105 init_request("el", else_request);
5106 init_request("em", end_macro);
5107 +#ifdef ENABLE_MULTIBYTE
5108 + init_request("encoding", select_encoding);
5110 init_request("eo", escape_off);
5111 init_request("ex", exit_request);
5112 init_request("fchar", define_fallback_character);
5113 @@ -7533,12 +7630,92 @@
5115 dictionary charinfo_dictionary(501);
5117 +#ifdef ENABLE_MULTIBYTE
5118 +struct charinfo_list {
5119 + struct charinfo_list *next;
5121 +} *wcharset_table = NULL;
5123 +/* XXX: use more efficient method? */
5125 +lookup_wcharset_table(wchar wc)
5127 + struct charinfo_list *cl;
5128 + for (cl = wcharset_table; cl; cl = cl->next) {
5129 + if (cl->ci && cl->ci->get_wchar_code() == wc)
5136 +add_wcharset_table(charinfo *ci)
5138 + struct charinfo_list *cl = new struct charinfo_list;
5139 + cl->next = wcharset_table;
5141 + wcharset_table = cl;
5144 +charinfo *wcharset_table_entry(wchar wc)
5146 + if (! is_wchar_code(wc))
5148 + charinfo *cp = lookup_wcharset_table(wc);
5150 + int i = wchar_code(wc);
5153 + sprintf(buf, "u%04X", i);
5155 + cp = get_charinfo_by_number(i);
5158 + sprintf(buf, "char%d", i); // ???
5160 + symbol nm = symbol(buf);
5161 + cp = new charinfo(nm);
5162 + (void)charinfo_dictionary.lookup(nm, cp);
5163 + cp->set_wchar_code(wc);
5164 + add_wcharset_table(cp);
5170 +wchar_charinfo(symbol nm)
5172 + const char *p = nm.contents();
5177 + wchar wc = make_wchar(strtol(p + 1, &pp, 16));
5180 + charinfo *cp = lookup_wcharset_table(wc);
5183 + /* create on demand */
5184 + cp = new charinfo(nm);
5185 + cp->set_wchar_code(wc);
5186 + add_wcharset_table(cp);
5191 charinfo *get_charinfo(symbol nm)
5193 void *p = charinfo_dictionary.lookup(nm);
5195 return (charinfo *)p;
5196 +#ifdef ENABLE_MULTIBYTE
5197 + charinfo *cp = wchar_charinfo(nm);
5199 + cp = new charinfo(nm);
5201 charinfo *cp = new charinfo(nm);
5203 (void)charinfo_dictionary.lookup(nm, cp);
5206 @@ -7548,6 +7725,9 @@
5207 charinfo::charinfo(symbol s)
5208 : translation(0), mac(0), special_translation(TRANSLATE_NONE),
5209 hyphenation_code(0), flags(0), ascii_code(0), asciify_code(0),
5210 +#ifdef ENABLE_MULTIBYTE
5213 not_found(0), transparent_translate(1), translate_input(0),
5216 @@ -7592,6 +7772,14 @@
5220 +#ifdef ENABLE_MULTIBYTE
5221 +void charinfo::set_wchar_code(wchar wc)
5224 + index = wc; /* XXX: wchar code == index */
5228 macro *charinfo::set_macro(macro *m, int f)
5231 @@ -7647,6 +7835,13 @@
5232 int font::name_to_index(const char *nm)
5235 +#ifdef ENABLE_MULTIBYTE
5237 + wchar wc = input_encoding->make_wchar(nm[0], (const unsigned char *)nm, &i);
5238 + if (is_wchar_code(wc)) {
5239 + ci = wcharset_table_entry(wc);
5243 ci = charset_table[nm[0] & 0xff];
5244 else if (nm[0] == '\\' && nm[2] == 0)
5245 @@ -7663,3 +7858,10 @@
5247 return get_charinfo_by_number(n)->get_index();
5250 +#ifdef ENABLE_MULTIBYTE
5251 +int font::wchar_index(wchar wc)
5253 + return(wcharset_table_entry(wc)->get_index());
5256 --- groff-1.18.1.1.orig/src/roff/troff/token.h
5257 +++ groff-1.18.1.1/src/roff/troff/token.h
5262 +#ifdef ENABLE_MULTIBYTE
5270 TOKEN_CHAR, // a normal printing character
5271 +#ifdef ENABLE_MULTIBYTE
5272 + TOKEN_WCHAR, // a multibyte character
5275 TOKEN_EMPTY, // this is the initial value
5277 --- groff-1.18.1.1.orig/src/roff/troff/troff.man
5278 +++ groff-1.18.1.1/src/roff/troff/troff.man
5280 A copy of the Free Documentation License is included as a file called
5281 FDL in the main directory of the groff source package.
5284 +A copy of the GNU Free Documentation License is also available in this
5285 +Debian package as /usr/share/doc/groff-base/copyright.
5289 .\" --------------------------------------------------------------------
5290 --- groff-1.18.1.1.orig/src/roff/troff/node.cc
5291 +++ groff-1.18.1.1/src/roff/troff/node.cc
5295 #include "geometry.h"
5296 +#include "encoding.h"
5298 #include "nonposix.h"
5300 @@ -745,8 +746,15 @@
5301 int current_font_number;
5302 symbol *font_position;
5303 int nfont_positions;
5304 +#ifdef ENABLE_MULTIBYTE
5305 + const char *current_encoding;
5307 enum { TBUF_SIZE = 256 };
5308 +#ifdef ENABLE_MULTIBYTE
5309 + wchar tbuf[TBUF_SIZE];
5311 char tbuf[TBUF_SIZE];
5318 void put(unsigned int i);
5319 void put(const char *s);
5320 +#ifdef ENABLE_MULTIBYTE
5321 + void putw(const wchar wc);
5323 void set_font(tfont *tf);
5326 @@ -799,6 +810,13 @@
5330 +#ifdef ENABLE_MULTIBYTE
5331 +inline void troff_output_file::putw(wchar wc)
5333 + output_encoding->put_wchar(wc, fp);
5337 inline void troff_output_file::put(unsigned char c)
5340 @@ -956,7 +974,11 @@
5341 check_output_limits(hpos, vpos - current_size);
5343 for (int i = 0; i < tbuf_len; i++)
5344 +#ifdef ENABLE_MULTIBYTE
5352 @@ -988,7 +1010,13 @@
5356 +#ifdef ENABLE_MULTIBYTE
5357 + wchar c = ci->get_wchar_code();
5359 + c = ci->get_ascii_code();
5361 char c = ci->get_ascii_code();
5366 @@ -1014,7 +1042,8 @@
5368 else if (tcommand_flag) {
5369 if (tbuf_len > 0 && hpos == output_hpos && vpos == output_vpos
5370 - && gcol == current_glyph_color && fcol == current_fill_color
5371 + && (!gcol || gcol == current_glyph_color)
5372 + && (!fcol || fcol == current_fill_color)
5374 && tbuf_len < TBUF_SIZE) {
5375 check_charinfo(tf, ci);
5376 @@ -1039,17 +1068,26 @@
5377 check_charinfo(tf, ci);
5378 // check_output_limits(output_hpos, output_vpos);
5379 if (vpos == output_vpos
5380 - && gcol == current_glyph_color && fcol == current_fill_color
5381 + && (!gcol || gcol == current_glyph_color)
5382 + && (!fcol || fcol == current_fill_color)
5383 && n > 0 && n < 100 && !force_motion) {
5384 put(char(n/10 + '0'));
5385 put(char(n%10 + '0'));
5386 +#ifdef ENABLE_MULTIBYTE
5396 +#ifdef ENABLE_MULTIBYTE
5402 hpos += w.to_units() + kk;
5404 @@ -1063,7 +1101,13 @@
5406 if (tf != current_tfont)
5408 +#ifdef ENABLE_MULTIBYTE
5409 + wchar c = ci->get_wchar_code();
5411 + c = ci->get_ascii_code();
5413 char c = ci->get_ascii_code();
5418 @@ -1087,11 +1131,16 @@
5420 int n = hpos - output_hpos;
5421 if (vpos == output_vpos
5422 - && gcol == current_glyph_color && fcol == current_fill_color
5423 + && (!gcol || gcol == current_glyph_color)
5424 + && (!fcol || fcol == current_fill_color)
5425 && n > 0 && n < 100) {
5426 put(char(n/10 + '0'));
5427 put(char(n%10 + '0'));
5428 +#ifdef ENABLE_MULTIBYTE
5436 @@ -1099,13 +1148,26 @@
5440 +#ifdef ENABLE_MULTIBYTE
5449 void troff_output_file::set_font(tfont *tf)
5451 +#ifdef ENABLE_MULTIBYTE
5453 + if (current_encoding != output_encoding->name()) {
5454 + put("x encoding ");
5455 + put(output_encoding->name());
5457 + current_encoding = output_encoding->name();
5460 if (current_tfont == tf)
5462 int n = tf->get_input_position();
5463 @@ -1162,7 +1224,7 @@
5465 void troff_output_file::fill_color(color *col)
5467 - if ((current_fill_color == col) || !color_flag)
5468 + if (!col || current_fill_color == col || !color_flag)
5472 @@ -1210,7 +1272,7 @@
5474 void troff_output_file::glyph_color(color *col)
5476 - if ((current_glyph_color == col) || !color_flag)
5477 + if (!col || current_glyph_color == col || !color_flag)
5481 @@ -1497,7 +1559,17 @@
5485 +#ifdef ENABLE_MULTIBYTE
5486 + current_encoding = output_encoding->name();
5488 + if (current_encoding && *current_encoding != '\0') {
5490 + put(current_encoding);
5499 @@ -1777,6 +1849,9 @@
5503 +#ifdef ENABLE_MULTIBYTE
5504 + node_type get_node_type();
5508 glyph_node *glyph_node::free_list = 0;
5509 @@ -1802,6 +1877,9 @@
5513 +#ifdef ENABLE_MULTIBYTE
5514 + node_type get_node_type();
5518 class kern_pair_node : public node {
5519 @@ -5225,6 +5303,55 @@
5523 +#ifdef ENABLE_MULTIBYTE
5524 +kword_space_node::kword_space_node(color *c, node *x) : word_space_node(0, c, new width_list(0, 0), x)
5527 +node *kword_space_node::copy()
5529 + return new kword_space_node(col);
5531 +newline_space_node::newline_space_node(hunits d, color *c, node *x) : word_space_node(d, c, new width_list(0, 0), x)
5534 +node *newline_space_node::copy()
5536 + return new newline_space_node(n, col);
5539 +const char *kword_space_node::type()
5541 + return "kword_space_node";
5543 +const char *newline_space_node::type()
5545 + return "newline_space_node";
5548 +node_type node::get_node_type()
5550 + return NODE_ANOTHER;
5552 +node_type glyph_node::get_node_type()
5554 + return NODE_GLYPH;
5557 +node_type ligature_node::get_node_type()
5559 + return NODE_ANOTHER;
5562 +node_type kword_space_node::get_node_type()
5564 + return NODE_KWORD_SPACE;
5566 +node_type newline_space_node::get_node_type()
5568 + return NODE_NEWLINE_SPACE;
5572 int unbreakable_space_node::same(node *nd)
5574 return n == ((unbreakable_space_node *)nd)->n
5575 @@ -5625,6 +5752,28 @@
5579 +#ifdef ENABLE_MULTIBYTE
5580 +int get_fontset_fontno(int n, wchar wc)
5582 + if (n >= 0 && n < font_table_size && font_table[n] != 0) {
5583 + /* XXX: external_name should be used? */
5584 + int fn = font::get_fontset_font(font_table[n]->get_name().contents(), wc);
5586 + symbol nm(font::font_name_table[fn]);
5587 + int nn = symbol_fontno(nm);
5589 + nn = next_available_font_position();
5590 + if (!mount_font(nn, nm)) {
5591 + return -1; /* XXX */
5601 hunits env_digit_width(environment *env)
5603 node *n = make_glyph_node(charset_table['0'], env);
5604 --- groff-1.18.1.1.orig/src/roff/nroff/nroff.sh
5605 +++ groff-1.18.1.1/src/roff/nroff/nroff.sh
5613 case "${LC_ALL-${LC_CTYPE-${LANG}}}" in
5619 + ja_JP.ujis | ja_JP.eucJP)
5622 case "$LESSCHARSET" in
5638 -[iptSUC] | -[mrno]*)
5640 - -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047)
5641 + -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047 | -Tascii8 | -Tnippon)
5644 # ignore other devices
5645 --- groff-1.18.1.1.orig/src/roff/nroff/nroff.man
5646 +++ groff-1.18.1.1/src/roff/nroff/nroff.man
5648 command using groff.
5657 are valid arguments for the
5658 --- groff-1.18.1.1.orig/src/roff/groff/groff.cc
5659 +++ groff-1.18.1.1/src/roff/groff/groff.cc
5661 program_name = argv[0];
5662 static char stderr_buf[BUFSIZ];
5663 setbuf(stderr, stderr_buf);
5664 + init_encoding_handler();
5665 assert(NCOMMANDS <= MAX_COMMANDS);
5666 string Pargs, Largs, Fargs;
5668 --- groff-1.18.1.1.orig/src/roff/groff/groff.man
5669 +++ groff-1.18.1.1/src/roff/groff/groff.man
5671 A copy of the Free Documentation License is included as a file called
5672 FDL in the main directory of the groff source package.
5675 +A copy of the GNU Free Documentation License is also available in this
5676 +Debian package as /usr/share/doc/groff-base/copyright.
5679 .\" --------------------------------------------------------------------
5682 .c --------------------------------------------------------------------
5683 .c ShortOpt ([char [punct]])
5685 -.c `-c' somwhere in the text
5686 +.c `-c' somewhere in the text
5687 .c second arg is punctuation
5691 .c --------------------------------------------------------------------
5692 .c LongOpt ([name [punct]])
5694 -.c `--name' somwhere in the text
5695 +.c `--name' somewhere in the text
5696 .c second arg is punctuation
5701 program allows to control the whole
5703 -system by comand line options.
5704 +system by command line options.
5706 This is a great simplification in comparison to the classical case (which
5711 .\" --------------------------------------------------------------------
5712 -.SS Tranparent Options
5713 +.SS Transparent Options
5714 .\" --------------------------------------------------------------------
5716 The following options are transparently handed over to the formatter
5719 .IR "classical roff" .
5721 -This section gives an overview of the parts that consitute the groff
5722 +This section gives an overview of the parts that constitute the groff
5726 @@ -948,6 +952,10 @@
5727 Text output using the EBCDIC code page IBM cp1047 (e.g. OS/390 Unix).
5731 +Text output using the Japanese-EUC character set.
5737 @@ -956,6 +964,12 @@
5742 +For typewriter-like devices. Unlike
5744 +this device is 8 bit clean. This device is intended to be used
5745 +for codesets other than ASCII and ISO-8859-1.
5748 Text output using the ISO Latin-1 (ISO 8859-1) character set; see
5750 @@ -1031,7 +1045,7 @@
5753 Today, most printing or drawing hardware is handled by the operating
5754 -system, by device drivers, or by software interfaces, usally accepting
5755 +system, by device drivers, or by software interfaces, usually accepting
5758 Consequently, there isn't an urgent need for more hardware device
5759 --- groff-1.18.1.1.orig/font/devX75/DESC
5760 +++ groff-1.18.1.1/font/devX75/DESC
5763 -fonts 6 0 0 0 0 0 S
5764 +fonts 8 0 0 0 0 0 S M G
5765 +fontset B G 2E00..9FFF
5766 +fontset CB G 2E00..9FFF
5767 +fontset HB G 2E00..9FFF
5768 +fontset NB G 2E00..9FFF
5769 +fontset TB G 2E00..9FFF
5770 +fontset - M 2E00..9FFF
5771 +fontset B G FF00..FFEF
5772 +fontset CB G FF00..FFEF
5773 +fontset HB G FF00..FFEF
5774 +fontset NB G FF00..FFEF
5775 +fontset TB G FF00..FFEF
5776 +fontset - M FF00..FFEF
5777 sizes 8 10 12 14 18 24 0
5780 --- groff-1.18.1.1.orig/font/devX75/M.proto
5781 +++ groff-1.18.1.1/font/devX75/M.proto
5789 --- groff-1.18.1.1.orig/font/devX75/Makefile.sub
5790 +++ groff-1.18.1.1/font/devX75/Makefile.sub
5793 -DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
5794 +DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G
5800 + @cat $(srcdir)/M.proto > M
5805 + @sed -e 's/name M/name G/' M > G
5806 --- groff-1.18.1.1.orig/font/devlbp/Makefile.sub
5807 +++ groff-1.18.1.1/font/devlbp/Makefile.sub
5810 cat $(srcdir)/DESC.in >>DESC
5811 if test "$(PAGE)" = A4; then \
5812 - echo "papersize a4" >>DESC; \
5813 + echo "papersize /etc/papersize a4" >>DESC; \
5815 - echo "papersize letter" >>DESC; \
5816 + echo "papersize /etc/papersize letter" >>DESC; \
5818 test -z '$(LBPPRINT)' || echo print '$(LBPPRINT)' >>DESC
5820 --- groff-1.18.1.1.orig/font/devascii/Makefile.sub
5821 +++ groff-1.18.1.1/font/devascii/Makefile.sub
5824 @(charwidth=`expr $(RES) / $(CPI)` ; \
5825 sed -e "s/^name [A-Z]*$$/name $@/" \
5826 - -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
5827 - -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
5828 + -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \
5829 + -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
5830 -e "s/^internalname .*$$/internalname $@/" \
5831 -e "/^internalname/s/BI/3/" \
5832 -e "/^internalname/s/B/2/" \
5833 --- groff-1.18.1.1.orig/font/devascii8/Makefile.sub
5834 +++ groff-1.18.1.1/font/devascii8/Makefile.sub
5838 +DEVFILES=$(FONTS) DESC
5839 +CLEANADD=$(FONTS) DESC
5848 + @(charwidth=`expr $(RES) / $(CPI)` ; \
5849 + sed -e "s/^name [A-Z]*$$/name $@/" \
5850 + -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \
5851 + -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
5852 + -e "s/^internalname .*$$/internalname $@/" \
5853 + -e "/^internalname/s/BI/3/" \
5854 + -e "/^internalname/s/B/2/" \
5855 + -e "/^internalname/s/I/1/" \
5856 + -e "/^internalname .*[^ 0-9]/d" \
5857 + $(srcdir)/R.proto >$@)
5862 + @sed -e "s/^res .*$$/res $(RES)/" \
5863 + -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
5864 + -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
5865 + -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
5866 + $(srcdir)/DESC.proto >$@
5867 --- groff-1.18.1.1.orig/font/devascii8/R.proto
5868 +++ groff-1.18.1.1/font/devascii8/R.proto
6132 --- groff-1.18.1.1.orig/font/devascii8/DESC.proto
6133 +++ groff-1.18.1.1/font/devascii8/DESC.proto
6143 --- groff-1.18.1.1.orig/font/devX100/DESC
6144 +++ groff-1.18.1.1/font/devX100/DESC
6147 -fonts 6 0 0 0 0 0 S
6148 +fonts 8 0 0 0 0 0 S M G
6149 +fontset B G 2E00..9FFF
6150 +fontset CB G 2E00..9FFF
6151 +fontset HB G 2E00..9FFF
6152 +fontset NB G 2E00..9FFF
6153 +fontset TB G 2E00..9FFF
6154 +fontset - M 2E00..9FFF
6155 +fontset B G FF00..FFEF
6156 +fontset CB G FF00..FFEF
6157 +fontset HB G FF00..FFEF
6158 +fontset NB G FF00..FFEF
6159 +fontset TB G FF00..FFEF
6160 +fontset - M FF00..FFEF
6161 sizes 8 10 12 14 18 24 0
6164 --- groff-1.18.1.1.orig/font/devX100/M.proto
6165 +++ groff-1.18.1.1/font/devX100/M.proto
6172 --- groff-1.18.1.1.orig/font/devX100/Makefile.sub
6173 +++ groff-1.18.1.1/font/devX100/Makefile.sub
6176 -DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
6177 +DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G
6183 + @cat $(srcdir)/M.proto > M
6188 + @sed -e 's/name M/name G/' M > G
6189 --- groff-1.18.1.1.orig/font/devX100-12/DESC
6190 +++ groff-1.18.1.1/font/devX100-12/DESC
6193 -fonts 6 0 0 0 0 0 S
6194 +fonts 8 0 0 0 0 0 S M G
6195 +fontset B G 2E00..9FFF
6196 +fontset CB G 2E00..9FFF
6197 +fontset HB G 2E00..9FFF
6198 +fontset NB G 2E00..9FFF
6199 +fontset TB G 2E00..9FFF
6200 +fontset - M 2E00..9FFF
6201 +fontset B G FF00..FFEF
6202 +fontset CB G FF00..FFEF
6203 +fontset HB G FF00..FFEF
6204 +fontset NB G FF00..FFEF
6205 +fontset TB G FF00..FFEF
6206 +fontset - M FF00..FFEF
6207 sizes 8 10 12 14 18 24 0
6210 --- groff-1.18.1.1.orig/font/devX100-12/M.proto
6211 +++ groff-1.18.1.1/font/devX100-12/M.proto
6218 --- groff-1.18.1.1.orig/font/devX100-12/Makefile.sub
6219 +++ groff-1.18.1.1/font/devX100-12/Makefile.sub
6222 -DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
6223 +DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G
6229 + @cat $(srcdir)/M.proto > M
6234 + @sed -e 's/name M/name G/' M > G
6236 --- groff-1.18.1.1.orig/font/devlj4/Makefile.sub
6237 +++ groff-1.18.1.1/font/devlj4/Makefile.sub
6239 echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>DESC
6240 cat $(srcdir)/DESC.in >>DESC
6241 if test "$(PAGE)" = A4; then \
6242 - echo "papersize a4" >>DESC; \
6243 + echo "papersize /etc/papersize a4" >>DESC; \
6245 - echo "papersize letter" >>DESC; \
6246 + echo "papersize /etc/papersize letter" >>DESC; \
6248 test -z '$(LJ4PRINT)' || echo print '$(LJ4PRINT)' >>DESC
6250 --- groff-1.18.1.1.orig/font/devnippon/M.proto
6251 +++ groff-1.18.1.1/font/devnippon/M.proto
6259 --- groff-1.18.1.1.orig/font/devnippon/Makefile.sub
6260 +++ groff-1.18.1.1/font/devnippon/Makefile.sub
6265 +ALLFONTS=$(FONTS) $(WFONTS)
6266 +DEVFILES=$(ALLFONTS) DESC
6267 +CLEANADD=$(ALLFONTS) DESC
6276 + @(charwidth=`expr $(RES) / $(CPI)` ; \
6277 + sed -e "s/^name [A-Z]*$$/name $@/" \
6278 + -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \
6279 + -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
6280 + -e "s/^internalname .*$$/internalname $@/" \
6281 + -e "/^internalname/s/BI/3/" \
6282 + -e "/^internalname/s/B/2/" \
6283 + -e "/^internalname/s/I/1/" \
6284 + -e "/^internalname .*[^ 0-9]/d" \
6285 + $(srcdir)/R.proto >$@)
6290 + @(wcharwidth=`expr $(RES) / $(CPI) \* 2` ; \
6291 + spacewidth=`expr $(RES) / $(CPI)` ; \
6292 + sed -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \
6293 + -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \
6294 + $(srcdir)/M.proto > $@)
6299 + @sed -e 's/name M/name G/' \
6300 + -e 's/internalname 4/internalname 5/' M > G
6305 + @sed -e "s/^res .*$$/res $(RES)/" \
6306 + -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
6307 + -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
6308 + -e "s/^fonts .*$$/fonts `set $(ALLFONTS); echo $$#` $(ALLFONTS)/" \
6309 + $(srcdir)/DESC.proto >$@
6310 --- groff-1.18.1.1.orig/font/devnippon/R.proto
6311 +++ groff-1.18.1.1/font/devnippon/R.proto
6480 --- groff-1.18.1.1.orig/font/devnippon/DESC.proto
6481 +++ groff-1.18.1.1/font/devnippon/DESC.proto
6488 +fonts 6 R I B BI M G
6489 +fontset B G 2E00..9FFF
6490 +fontset - M 2E00..9FFF
6491 +fontset B G FF00..FFEF
6492 +fontset - M FF00..FFEF
6495 --- groff-1.18.1.1.orig/font/devps/M.proto
6496 +++ groff-1.18.1.1/font/devps/M.proto
6499 +internalname Ryumin-Light-EUC-H
6501 +encodingname EUC-JP
6503 +u2E00..u9FFF 1000 3
6504 +uFF00..uFF5F 1000 3
6506 +uFFA0..uFFEF 1000 3
6507 --- groff-1.18.1.1.orig/font/devps/DESC.in
6508 +++ groff-1.18.1.1/font/devps/DESC.in
6517 sizes 1000-10000000 0
6520 -fonts 9 0 0 0 0 0 SS S ZD ZDR
6521 +fonts 11 0 0 0 0 0 SS S ZD ZDR M G
6522 +fontset B G 2E00..9FFF
6523 +fontset AB G 2E00..9FFF
6524 +fontset BMB G 2E00..9FFF
6525 +fontset CB G 2E00..9FFF
6526 +fontset HB G 2E00..9FFF
6527 +fontset HNB G 2E00..9FFF
6528 +fontset NB G 2E00..9FFF
6529 +fontset PB G 2E00..9FFF
6530 +fontset TB G 2E00..9FFF
6531 +fontset - M 2E00..9FFF
6532 +fontset B G FF00..FFEF
6533 +fontset AB G FF00..FFEF
6534 +fontset BMB G FF00..FFEF
6535 +fontset CB G FF00..FFEF
6536 +fontset HB G FF00..FFEF
6537 +fontset HNB G FF00..FFEF
6538 +fontset NB G FF00..FFEF
6539 +fontset PB G FF00..FFEF
6540 +fontset TB G FF00..FFEF
6541 +fontset - M FF00..FFEF
6544 --- groff-1.18.1.1.orig/font/devps/Makefile.sub
6545 +++ groff-1.18.1.1/font/devps/Makefile.sub
6547 DISTFILES=text.enc download \
6548 S ZD ZDR SS AB ABI AI AR BMB BMBI BMI BMR \
6549 CB CBI CI CR HB HBI HI HR HNB HNBI HNI HNR \
6550 - NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI
6551 + NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI M G
6552 PSFILES=prologue symbolsl.pfa zapfdr.pfa
6553 DEVGENFILES=generate/Makefile generate/afmname generate/dingbats.map \
6554 generate/dingbats.rmap generate/lgreekmap generate/symbol.sed \
6555 generate/symbolchars generate/symbolsl.afm generate/textmap
6556 DEVFILES=DESC $(PSFILES) $(DISTFILES) $(DEVGENFILES)
6558 -CLEANADD=DESC $(PSFILES)
6559 +CLEANADD=DESC $(PSFILES) M G
6563 cat $(srcdir)/DESC.in >DESC
6564 echo broken $(BROKEN_SPOOLER_FLAGS) >>DESC
6565 if test "$(PAGE)" = A4; then \
6566 - echo "papersize a4" >>DESC; \
6567 + echo "papersize /etc/papersize a4" >>DESC; \
6569 - echo "papersize letter" >>DESC; \
6570 + echo "papersize /etc/papersize letter" >>DESC; \
6572 test -z '$(PSPRINT)' || echo print '$(PSPRINT)' >>DESC
6577 sed -f $(srcdir)/psstrip.sed $? >$@
6587 + @sed -e 's/name M/name G/' \
6588 + -e 's/internalname Ryumin-Light-EUC-H/internalname GothicBBB-Medium-EUC-H/' M > G
6589 --- groff-1.18.1.1.orig/font/devutf8/M.proto
6590 +++ groff-1.18.1.1/font/devutf8/M.proto
6598 --- groff-1.18.1.1.orig/font/devutf8/Makefile.sub
6599 +++ groff-1.18.1.1/font/devutf8/Makefile.sub
6603 -DEVFILES=$(FONTS) DESC
6604 -CLEANADD=$(FONTS) DESC
6606 +DEVFILES=$(FONTS) $(WFONTS) DESC
6607 +CLEANADD=$(FONTS) $(WFONTS) DESC
6613 @(charwidth=`expr $(RES) / $(CPI)` ; \
6614 sed -e "s/^name [A-Z]*$$/name $@/" \
6615 - -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
6616 - -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
6617 + -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \
6618 + -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
6619 -e "s/^internalname .*$$/internalname $@/" \
6620 -e "/^internalname/s/BI/3/" \
6621 -e "/^internalname/s/B/2/" \
6623 -e "/^internalname .*[^ 0-9]/d" \
6624 $(srcdir)/R.proto >$@)
6629 + (wcharwidth=`expr $(RES) / $(CPI) \* 2` ; \
6630 + spacewidth=`expr $(RES) / $(CPI)` ; \
6631 + sed -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \
6632 + -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \
6633 + $(srcdir)/M.proto > $@)
6638 + @sed -e 's/name M/name G/' \
6639 + -e 's/internalname 4/internalname 5/' M > G
6644 @sed -e "s/^res .*$$/res $(RES)/" \
6645 -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
6646 -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
6647 - -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
6648 + -e "s/^fonts .*$$/fonts `set $(FONTS) $(WFONTS); echo $$#` $(FONTS) $(WFONTS)/" \
6649 $(srcdir)/DESC.proto >$@
6651 --- groff-1.18.1.1.orig/font/devutf8/DESC.proto
6652 +++ groff-1.18.1.1/font/devutf8/DESC.proto
6658 +fonts 6 R I B BI M G
6659 +fontset B G 2E00..9FFF
6660 +fontset B G FF00..FFEF
6661 +fontset - M 2E00..9FFF
6662 +fontset - M FF00..FFEF
6665 --- groff-1.18.1.1.orig/font/devhtml/M.proto
6666 +++ groff-1.18.1.1/font/devhtml/M.proto
6671 +u2E00..u9FFF 16,14,2 0
6672 +uFF00..uFFEF 16,14,2 0
6673 --- groff-1.18.1.1.orig/font/devhtml/Makefile.sub
6674 +++ groff-1.18.1.1/font/devhtml/Makefile.sub
6677 PROTOFONTS=R I B BI CR CI CB CBI
6678 FONTS=$(PROTOFONTS) S
6679 -DEVFILES=$(FONTS) DESC
6680 -CLEANADD=$(FONTS) DESC
6682 +ALLFONTS=$(FONTS) $(WFONTS)
6683 +DEVFILES=$(ALLFONTS) DESC
6684 +CLEANADD=$(ALLFONTS) DESC
6690 @(charwidth=`expr $(RES) / $(CPI)` ; \
6691 sed -e "s/^name [A-Z]*$$/name $@/" \
6692 - -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \
6693 - -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \
6694 + -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \
6695 + -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
6696 -e "s/^internalname .*$$/internalname $@/" \
6697 -e "/^internalname/s/CR/4/" \
6698 -e "/^internalname/s/BI/3/" \
6700 @sed -e "s/^res .*$$/res $(RES)/" \
6701 -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
6702 -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
6703 - -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
6704 + -e "s/^fonts .*$$/fonts `set $(ALLFONTS); echo $$#` $(ALLFONTS)/" \
6705 $(srcdir)/DESC.proto >$@
6710 + @(wcharwidth=`expr $(RES) / $(CPI) \* 2`; \
6711 + spacewidth=`expr $(RES) / $(CPI)`; \
6712 + sed -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \
6713 + -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \
6714 + $(srcdir)/M.proto > $@)
6719 + @sed -e 's/name M/name G/' M > G
6720 --- groff-1.18.1.1.orig/font/devhtml/DESC.proto
6721 +++ groff-1.18.1.1/font/devhtml/DESC.proto
6725 sizes 6 8 10 12 14 16 18 0
6726 -fonts 9 R I B BI CR CI CB CBI S
6727 +fonts 11 R I B BI CR CI CB CBI S M G
6728 +fontset B G 2E00..9FFF
6729 +fontset - M 2E00..9FFF
6730 +fontset B G FF00..FFEF
6731 +fontset - M FF00..FFEF
6734 postpro post-grohtml
6735 --- groff-1.18.1.1.orig/font/devX75-12/DESC
6736 +++ groff-1.18.1.1/font/devX75-12/DESC
6739 -fonts 6 0 0 0 0 0 S
6740 +fonts 8 0 0 0 0 0 S M G
6741 +fontset B G 2E00..9FFF
6742 +fontset CB G 2E00..9FFF
6743 +fontset HB G 2E00..9FFF
6744 +fontset NB G 2E00..9FFF
6745 +fontset TB G 2E00..9FFF
6746 +fontset - M 2E00..9FFF
6747 +fontset B G FF00..FFEF
6748 +fontset CB G FF00..FFEF
6749 +fontset HB G FF00..FFEF
6750 +fontset NB G FF00..FFEF
6751 +fontset TB G FF00..FFEF
6752 +fontset - M FF00..FFEF
6753 sizes 8 10 12 14 18 24 0
6756 --- groff-1.18.1.1.orig/font/devX75-12/M.proto
6757 +++ groff-1.18.1.1/font/devX75-12/M.proto
6764 --- groff-1.18.1.1.orig/font/devX75-12/Makefile.sub
6765 +++ groff-1.18.1.1/font/devX75-12/Makefile.sub
6768 -DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
6769 +DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G
6775 + @cat $(srcdir)/M.proto > M
6780 + @sed -e 's/name M/name G/' M > G
6781 --- groff-1.18.1.1.orig/font/devdvi/M.proto-NTT
6782 +++ groff-1.18.1.1/font/devdvi/M.proto-NTT
6787 +designsize 10485760
13666 --- groff-1.18.1.1.orig/font/devdvi/DESC.in
13667 +++ groff-1.18.1.1/font/devdvi/DESC.in
13669 sizes 500-1000000 0
13672 -fonts 13 0 0 0 0 0 0 0 0 0 MI S EX CW
13673 +fonts 15 0 0 0 0 0 0 0 0 0 MI S EX CW M G
13674 +fontset B G 100..FFFF
13675 +fontset HB G 100..FFFF
13676 +fontset SB G 100..FFFF
13677 +fontset - M 100..FFFF
13680 --- groff-1.18.1.1.orig/font/devdvi/Makefile.sub
13681 +++ groff-1.18.1.1/font/devdvi/Makefile.sub
13683 TR TI TB TBI CW CWI HR HI HB HBI \
13684 TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
13685 TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
13687 + MI S EX SA SB M G \
13688 generate/CompileFonts generate/Makefile \
13689 generate/msam.map generate/msbm.map \
13690 generate/texb.map generate/texex.map generate/texi.map generate/texmi.map \
13691 generate/texr.map generate/texsy.map generate/textt.map \
13692 generate/ec.map generate/tc.map
13698 cat $(srcdir)/DESC.in >DESC
13699 test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>DESC
13701 +M: M.proto-$(DVIFORMAT)
13704 + cp M.proto-$(DVIFORMAT) M
13705 +# @if [ x$(DVIFORMAT) = xNTT ]; then \
13706 +# sed -e 's/ F / 959887,808326,151561 1 /' \
13707 +# -e 's/:0$$/:dmjsy10/' \
13708 +# -e 's/:1$$/:dmjroma10/' \
13709 +# -e 's/:2$$/:dmjhira10/' \
13710 +# -e 's/:3$$/:dmjkata10/' \
13711 +# -e 's/:4$$/:dmjgreek10/' \
13712 +# -e 's/:5$$/:dmjrussian10/' \
13713 +# -e 's/:6$$/:dmjkeisen10/' \
13714 +# -e 's/:a$$/:dmjka10/' \
13715 +# -e 's/:b$$/:dmjkb10/' \
13716 +# -e 's/:c$$/:dmjkc10/' \
13717 +# -e 's/:d$$/:dmjkd10/' \
13718 +# -e 's/:e$$/:dmjke10/' \
13719 +# -e 's/:f$$/:dmjkf10/' \
13720 +# -e 's/:g$$/:dmjkg10/' \
13721 +# -e 's/:h$$/:dmjkh10/' \
13722 +# -e 's/:i$$/:dmjki10/' \
13723 +# -e 's/:j$$/:dmjkj10/' \
13724 +# -e 's/:k$$/:dmjkk10/' \
13725 +# -e 's/:l$$/:dmjkl10/' \
13726 +# -e 's/:m$$/:dmjkm10/' \
13727 +# -e 's/:n$$/:dmjkn10/' \
13728 +# -e 's/:o$$/:dmjko10/' \
13729 +# -e 's/:p$$/:dmjkp10/' \
13730 +# -e 's/:q$$/:dmjkq10/' \
13731 +# -e 's/:r$$/:dmjkr10/' \
13732 +# -e 's/:s$$/:dmjks10/' \
13733 +# -e 's/:t$$/:dmjkt10/' \
13734 +# -e 's/:u$$/:dmjku10/' \
13735 +# -e 's/:v$$/:dmjkv10/' \
13736 +# -e 's/:w$$/:dmjkw10/' \
13737 +# -e 's/:x$$/:dmjkx10/' \
13738 +# -e 's/:y$$/:dmjky10/' \
13739 +# -e 's/:z$$/:dmjkz10/' \
13740 +# < M.proto-NTT > M ;\
13742 +# ../devnippon/createM -jis "1006514,815360,145600" 1 < M.proto-ASCII | \
13743 +# sed -f FixMetric.sed > M ;\
13749 + @sed -e 's/name M/name G/' \
13750 + -e 's/dmj/dgj/' \
13751 + -e 's/internalname min10/internalname goth10/' \
13753 --- groff-1.18.1.1.orig/font/devdvi/M.proto-ASCII
13754 +++ groff-1.18.1.1/font/devdvi/M.proto-ASCII
13757 +internalname min10
13758 +checksum -375402250
13759 +designsize 10485760
13760 --- groff-1.18.1.1.orig/font/devdvi/FixMetric.sed
13761 +++ groff-1.18.1.1/font/devdvi/FixMetric.sed
13763 +s/1006514,.*0x212b$/370845,815360,145600 1 0x212b/
13764 +s/1006514,.*0x212c$/370845,815360,145600 1 0x212c/
13765 +s/1006514,.*0x2126$/370845,815360,145600 1 0x2126/
13766 +s/1006514,.*0x2127$/370845,815360,145600 1 0x2127/
13767 +s/1006514,.*0x2128$/370845,815360,145600 1 0x2128/
13768 +s/1006514,.*0x212a$/370845,815360,145600 1 0x212a/
13769 +s/1006514,.*0x212d$/370845,815360,145600 1 0x212d/
13770 +s/1006514,.*0x212e$/370845,815360,145600 1 0x212e/
13771 +s/1006514,.*0x213e$/370845,815360,145600 1 0x213e/
13772 +s/1006514,.*0x2142$/370845,815360,145600 1 0x2142/
13773 +s/1006514,.*0x2143$/370845,815360,145600 1 0x2143/
13774 +s/1006514,.*0x2146$/370845,815360,145600 1 0x2146/
13775 +s/1006514,.*0x2147$/370845,815360,145600 1 0x2147/
13776 +s/1006514,.*0x2124$/370845,815360,145600 1 0x2124/
13777 +s/1006514,.*0x2125$/370845,815360,145600 1 0x2125/
13778 +s/1006514,.*0x214b$/528496,815360,145600 1 0x214b/
13779 +s/1006514,.*0x214d$/528496,815360,145600 1 0x214d/
13780 +s/1006514,.*0x214f$/528496,815360,145600 1 0x214f/
13781 +s/1006514,.*0x2151$/528496,815360,145600 1 0x2151/
13782 +s/1006514,.*0x2153$/528496,815360,145600 1 0x2153/
13783 +s/1006514,.*0x2155$/528496,815360,145600 1 0x2155/
13784 +s/1006514,.*0x2157$/528496,815360,145600 1 0x2157/
13785 +s/1006514,.*0x2159$/528496,815360,145600 1 0x2159/
13786 +s/1006514,.*0x215b$/528496,815360,145600 1 0x215b/
13787 +s/1006514,.*0x2129$/528496,815360,145600 1 0x2129/
13788 +s/1006514,.*0x212f$/528496,815360,145600 1 0x212f/
13789 +s/1006514,.*0x2130$/528496,815360,145600 1 0x2130/
13790 +s/1006514,.*0x2133$/528496,815360,145600 1 0x2133/
13791 +s/1006514,.*0x2135$/528496,815360,145600 1 0x2135/
13792 +s/1006514,.*0x2148$/528496,815360,145600 1 0x2148/
13793 +s/1006514,.*0x2149$/528496,815360,145600 1 0x2149/
13794 +s/1006514,.*0x216b$/528496,815360,145600 1 0x216b/
13795 +s/1006514,.*0x216c$/528496,815360,145600 1 0x216c/
13796 +s/1006514,.*0x216d$/528496,815360,145600 1 0x216d/
13797 +s/1006514,.*0x2178$/528496,815360,145600 1 0x2178/
13798 +s/1006514,.*0x214a$/528496,815360,145600 1 0x214a/
13799 +s/1006514,.*0x214c$/528496,815360,145600 1 0x214c/
13800 +s/1006514,.*0x214e$/528496,815360,145600 1 0x214e/
13801 +s/1006514,.*0x2150$/528496,815360,145600 1 0x2150/
13802 +s/1006514,.*0x2152$/528496,815360,145600 1 0x2152/
13803 +s/1006514,.*0x2154$/528496,815360,145600 1 0x2154/
13804 +s/1006514,.*0x2156$/528496,815360,145600 1 0x2156/
13805 +s/1006514,.*0x2158$/528496,815360,145600 1 0x2158/
13806 +s/1006514,.*0x215a$/528496,815360,145600 1 0x215a/
13807 +s/1006514,.*0x2122$/528496,815360,145600 1 0x2122/
13808 +s/1006514,.*0x2123$/528496,815360,145600 1 0x2123/
13809 +s/1006514,.*0x2136$/783741,815360,145600 1 0x2136/
13810 +s/1006514,.*0x2137$/783741,815360,145600 1 0x2137/
13811 +s/1006514,.*0x2139$/783741,815360,145600 1 0x2139/
13812 +s/1006514,.*0x2168$/783741,815360,145600 1 0x2168/
13813 +s/1006514,.*0x2169$/783741,815360,145600 1 0x2169/
13814 +s/1006514,.*0x216a$/783741,815360,145600 1 0x216a/
13815 +s/1006514,.*0x2170$/783741,815360,145600 1 0x2170/
13816 +s/1006514,.*0x2171$/783741,815360,145600 1 0x2171/
13817 +s/1006514,.*0x2172$/783741,815360,145600 1 0x2172/
13818 +s/1006514,.*0x2421$/783741,815360,145600 1 0x2421/
13819 +s/1006514,.*0x2423$/783741,815360,145600 1 0x2423/
13820 +s/1006514,.*0x2425$/783741,815360,145600 1 0x2425/
13821 +s/1006514,.*0x2427$/783741,815360,145600 1 0x2427/
13822 +s/1006514,.*0x2429$/783741,815360,145600 1 0x2429/
13823 +s/1006514,.*0x2443$/783741,815360,145600 1 0x2443/
13824 +s/1006514,.*0x2463$/783741,815360,145600 1 0x2463/
13825 +s/1006514,.*0x2465$/783741,815360,145600 1 0x2465/
13826 +s/1006514,.*0x2467$/783741,815360,145600 1 0x2467/
13827 +s/1006514,.*0x246e$/783741,815360,145600 1 0x246e/
13828 +s/1006514,.*0x2521$/783741,815360,145600 1 0x2521/
13829 +s/1006514,.*0x2523$/783741,815360,145600 1 0x2523/
13830 +s/1006514,.*0x2525$/783741,815360,145600 1 0x2525/
13831 +s/1006514,.*0x2527$/783741,815360,145600 1 0x2527/
13832 +s/1006514,.*0x2529$/783741,815360,145600 1 0x2529/
13833 +s/1006514,.*0x2543$/783741,815360,145600 1 0x2543/
13834 +s/1006514,.*0x2563$/783741,815360,145600 1 0x2563/
13835 +s/1006514,.*0x2565$/783741,815360,145600 1 0x2565/
13836 +s/1006514,.*0x2567$/783741,815360,145600 1 0x2567/
13837 +s/1006514,.*0x256e$/783741,815360,145600 1 0x256e/
13838 +s/1006514,.*0x2575$/783741,815360,145600 1 0x2575/
13839 +s/1006514,.*0x2576$/783741,815360,145600 1 0x2576/
13840 --- groff-1.18.1.1.orig/ChangeLog.jp
13841 +++ groff-1.18.1.1/ChangeLog.jp
13843 +2002-11-04 Fumitoshi UKAI <ukai@debian.or.jp>
13845 + * src/libs/libgroff/encoding.cc: for C or POSIX locale,
13846 + use ascii8 encoding handler
13847 + * font/devX*: new font desc for M, G
13848 + * src/xditview: support ENABLE_MULTIBYTE (Japanese only?)
13850 +2002-10-09 Fumitoshi UKAI <ukai@debian.or.jp>
13852 + * update groff-1.18-7
13854 +2002-09-23 Fumitoshi UKAI <ukai@debian.or.jp>
13856 + * src/roff/troff/input.cc: fix bug in wchar_charinfo()
13857 + check u<CODE> where <CODE> is 4- HEX chars
13858 + * src/device/grohtml/post-html.cc: works ENABLE_MULTIBYTE
13859 + * font/devhtml: add font M, G for Japanese
13861 +2002-09-22 Fumitoshi UKAI <ukai@debian.or.jp>
13863 + * new multibyte patch
13865 +2001-08-16 Fumitoshi UKAI <ukai@debian.or.jp>
13867 + * tmac/euc-jp.tmac:
13868 + fix disappearing `-' char
13870 +2001-07-21 Fumitoshi UKAI <ukai@debian.or.jp>
13872 + * add ENABLE_MULTIBYTE support to src/xditview
13874 +2001-07-20 Fumitoshi UKAI <ukai@debian.or.jp>
13876 + * introduce "fontset" in font/*/DESC
13877 + obsoletes "ondemand"
13879 +2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp>
13881 + * don't use input_encoding->is_wchar_code()
13882 + * fix troffrc empty line
13883 + * fix duplicate strcasecmp()
13885 +2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp>
13887 + * sub font selection move into environment::add_char()
13888 + it makes possible to use \[uni<code>]
13890 +2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp>
13892 + * use generic iconv_handler instead of euc_handler
13893 + * internal code now uses UCS-2
13895 +2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp
13897 + * wchar%x -> uni%X
13898 + - still no code conversion
13899 + - font description is not accurate
13900 + * change "fixed" to charset range
13902 +2001-07-18 Fumitoshi UKAI <ukai@debian.or.jp>
13904 + * Configuration Change:
13905 + obsolete: --enable-japanese (#ifdef NIPPON)
13906 + new: --enable-multibyte (#ifdef ENABLE_MULTIBYTE)
13908 +2001-07-18 Fumitoshi UKAI <ukai@debian.or.jp>
13910 + * create charinfo for wchar on demand (src/roff/troff/input.cc)
13911 + * use "fixed" for font wchar metric (src/libs/libgroff/font.cc)
13914 +2001-07-17 Fumitoshi UKAI <ukai@debian.or.jp>
13916 + * add utf8 encoding handler to src/libs/libgroff/encoding.cc
13917 + (this utf8 encodig handler is too slow!)
13919 +2001-07-15 Fumitoshi UKAI <ukai@debian.or.jp>
13921 + * based on groff 1.17.2-1
13922 + * use src/include/encoding.h instead of eucmac.h
13923 + * introduce src/libs/libgroff/encoding.cc
13924 + * introduce tmac/euc-jp.tmac for EUC-JP documents
13926 +2001-05-24 Fumitoshi UKAI <ukai@debian.or.jp>
13928 + * Apply for groff-1.17
13930 +2000-01-06 Yoshiaki Yanagihara <yochi@debian.or.jp>
13932 + * Apply japanese patch "jgroff-0.101"
13933 + (thanks hanataka@abyss.rim.or.jp).
13934 + * Added japanese extention option at configure.in, aclocal.m4.
13936 +Sat Jan 1 17:10:32 JST 2000 HANATAKA Shinya <hanataka@abyss.rim.or.jp>
13938 + * jgroff-0.100 ¤ò¤½¤Î¤Þ¤Þ groff-1.14 ¤ËŬÍѤ·¤Æ jgroff-101
13940 + * grohtml ¤òÆüËܸì¤ËÂбþ¤µ¤»¤ë¡£
13941 + * ÆüËܸì¥Þ¥Ë¥å¥¢¥ëÍÑ¤Ë tmac.docj ¤È tmac.andocj ¥Þ¥¯¥í¤òÄɲá£
13943 +Sun Mar 15 18:23:12 1998 Yoshiaki Yanagihara <yochi@debian.or.jp>
13945 + * jgroff ¤Î¥Ù¡¼¥¹¤ò groff-1.11a ¤ËÊѹ¹¤·¡¢jgroff-0.99¥Ñ¥Ã¥Á¤ò
13946 + ŬÍѤ·¤¿¤â¤Î¤ò jgroff-0.100 ¤È¤·¤¿¡£
13947 + ´ðËÜŪ¤Ë jgroff-0.99 ¤Èµ¡Ç½¤ÏƱ¤¸ *¤Ï¤º*¡£
13949 +Fri Dec 22 11:47:46 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp>
13951 + * ¥Ð¡¼¥¸¥ç¥ó0.99¡£
13953 +Mon Dec 18 18:28:37 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp>
13955 + * tmac/Makefile.sub: ¥¿¡¼¥²¥Ã¥È stamp-wrap¡¢uninstall_sub ¤¬°ìÉô
13956 + OS¤Îsh¤Ç¹½Ê¸¥¨¥é¡¼¤È¤Ê¤ë¥ª¥ê¥¸¥Ê¥ë¥Ð¥°¤ò½¤Àµ¡£
13958 +Wed Dec 13 15:09:26 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp>
13960 + * jgroff.sh: ¥ª¥ê¥¸¥Ê¥ë¤Ç¥¤¥ó¥¹¥È¡¼¥ë¥Ñ¥¹¤¬Êѹ¹¤µ¤ì¤¿¤Î¤Ë¹ç¤ï¤»¡¢
13961 + GROFF_TMAC_PATH¡¢GROFF_FONT_PATH¤òshare/groffÇÛ²¼¤ËÊѹ¹¡£
13963 +Sat Dec 9 15:28:36 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp>
13965 + * wchar.h¤«¤éeucmac.h¤Ë¥Õ¥¡¥¤¥ë̾¤òÊѹ¹¡£
13967 +Fri Dec 8 12:15:47 1995 Yoshio Takaeda <shio@yinyan.bekkoame.or.jp>
13969 + * troff/env.cc(add_char): ¡ØASCIIʸ»ú + ²þ¹Ô¥³¡¼¥É + EUCʸ»ú¡Ù¤È¤¤¤¦
13970 + ¥Ñ¥¿¡¼¥ó¤Î»þ¡¢²þ¹Ô¥³¡¼¥É¤¬¥¹¥Ú¡¼¥¹¤ËÊÑ´¹¤µ¤ì¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£
13972 +Thu Dec 7 21:35:06 1995 Yanagihara Yoshiaki <yosiaki@bsd2.kbnes.nec.co.jp>
13974 + * troff/input.cc (process_input_stack): gcc-2.7.0¤ÇÊÑ¿ôÄêµÁ¤¬¥¹¥³¡¼¥×
13975 + °ãÈ¿¤È¤Ê¤Ã¤Æ¤·¤Þ¤¦²Õ½ê¤ò½¤Àµ¡£
13977 +Thu Dec 7 21:35:06 1995 Yanagihara Yoshiaki <yosiaki@bsd2.kbnes.nec.co.jp>
13979 + * jgroff¤Î¥Ù¡¼¥¹¥½¡¼¥¹¤ògroff-1.10¤ËÊѹ¹¡£
13981 +Thu Apr 6 16:56:32 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
13983 + * devdvi/M.proto-NTT: DNP¤Îpk¥Õ¥©¥ó¥È¤Î¥Á¥§¥Ã¥¯¥µ¥àÃͤ¬0¤Ê¤Î¤Ç¡¢¤³
13984 + ¤ì¤Ë¹ç¤ï¤»¤Æchecksum¤ÎÃͤò0¤ËÊѹ¹¡£
13986 +Mon Apr 3 20:36:37 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
13988 + * troff/env.cc (possibly_break_line):
13989 + line¥ê¥¹¥ÈÃæ¤Îkword_space_node¤òÄ´À°¤¹¤ë½èÍý¤Ç¡¢lineÃæ¤Ë¤³¤Î¥Î¡¼¥É
13990 + ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï½èÍý¤ò¥¹¥¥Ã¥×¤¹¤ë¤è¤¦¤Ë¤·¤¿(EUC¥³¡¼¥É¤ò´Þ¤Þ
13991 + ¤Ê¤¤roff¤ò½èÍý¤¹¤ë¾ì¹ç¤Ë¤Ïkword_space_node¤Ï¸½¤ì¤Ê¤¤¤Î¤Ç½èÍý¤¬¹â®
13994 +Mon Apr 3 20:36:37 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
13996 + * troff/env.cc (add_char): hwkern¡¢vlower¤Î½é´ü²½¤Ïdevice½é´ü²½¸å
13997 + ¤Ë°ìÅÙ¤À¤±¹Ô¤¨¤ÐÎɤ¤¤Î¤Çenvironment¥¯¥é¥¹¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ç¤³¤ì¤ò
14000 +Sat Apr 1 17:57:23 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14002 + * troff/input.cc (mount_on_demand): on demand¤Ç¥Þ¥¦¥ó¥È¤µ¤ì¤ë¥Õ¥©
14003 + ¥ó¥È̾¤ò¥Ç¥Ð¥¤¥¹¤´¤È¤ÎDESC¥Õ¥¡¥¤¥ë¤Ç»ØÄê¤Ç¤¤ë¤è¤¦¤ËÊѹ¹¡£
14004 + ¥Ç¥£¥ì¥¯¥Æ¥£¥Öondemand¤Ç»ØÄꤷ¤¿¥Õ¥©¥ó¥È¤¬on demand¤Ç¥Þ¥¦¥ó¥È¤µ¤ì¤ë¡£
14006 +Fri Mar 31 20:23:43 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14008 + * libgroff/font.cc (load): ´Á»ú¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ëÍѤ˥ǥ£¥ì¥¯¥Æ¥£¥Ö
14009 + fixedkanji¤òÄɲᣤ³¤ì¤Ï³Æʸ»ú¤Î¥á¥È¥ê¥Ã¥¯¤¬Á´¤ÆƱ¤¸¤Ç¤¢¤ë»ö¤ò»ØÄê
14010 + ¤¹¤ë¤â¤Î¤Ç¡¢fixedkanji¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ïcharset¤Ïɾ²Á¤µ¤ì¤Ê¤¤
14011 + ¤¿¤á´Á»ú¥Õ¥©¥ó¥È¤Î¥í¡¼¥É¤¬Â®¤¤¡£
14013 +Thu Mar 30 18:20:24 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14015 + * troff: node¼±Ê̤òʸ»úÎóÈæ³Ó¤Ç¹Ô¤Ã¤Æ¤¤¤¿¤¬¹â®²½¤Î¤¿¤á¿ôÃÍÈæ³Ó¤Ë
14018 +Wed Mar 29 20:20:49 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14020 + * troff/input.cc: ´Á»ú¥Õ¥©¥ó¥È(M¤ÈG)¤òon demand¤Ç¥Þ¥¦¥ó¥È¤¹¤ë¤è¤¦
14021 + ¤ËÊѹ¹¡£¤³¤ì¤Ë¤è¤Ã¤Æ´Á»ú¤ò´Þ¤Þ¤Ê¤¤roff¥Õ¥¡¥¤¥ë¤Î½èÍý»þ´Ö¤¬¹â®²½¤µ
14024 +Fri Mar 10 15:34:26 1995 Shigeki Yoshida <shige@theta.iis.u-tokyo.ac.jp>
14026 + * troff/input.cc (process): geqn¤Ç¡¢
14032 + ¤ò½èÍý¤¹¤ë¤È¡¢"illegal token in argument to \Z"¤È¤Ê¤Ã¤Æ¤·¤Þ¤¦¥Ð¥°
14033 + (\Z¥·¡¼¥±¥ó¥¹¤Î°ú¿ô¤ËEUCʸ»ú¤¬Í褿¾ì¹ç¤ÎÂбþϳ¤ì)¤ò½¤Àµ¡£
14035 +Mon Feb 6 11:22:33 1995 Yoshio Takaeda <e50110@sakura.kudpc.kyoto-u.ac.jp>
14037 + * troff/input.cc: ¹ÔƬ¶Ø§ʸ»ú¤ÎEUC¥³¡¼¥É¤Î°ìÉô¤¬ÉÔÀµ¡£
14039 +Mon Jan 30 14:02:54 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14041 + * ¥Ð¡¼¥¸¥ç¥ó0.97¡£
14043 +Fri Dec 10 14:26:14 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
14045 + * devdvi/M.proto: NTT JTeX¤ÈASCIIÆüËܸìTeXξÊý¤Îdvi¥Õ¥¡¥¤¥ë¤ò°·¤¨¤ë¤è¤¦
14046 + M.proto¥Õ¥¡¥¤¥ë¤òÊѹ¹¡£
14048 +Fri Dec 9 14:26:14 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
14050 + * troff/node.cc: boldfont_list[]¤Ë¥Õ¥©¥ó¥È̾ B ¤òÅÐÏ¿¤·¤Æ¤¤¤Ê¤«¤Ã
14051 + ¤¿¤¿¤á¡¢dvi¥Õ¥¡¥¤¥ë¤Ë¥´¥·¥Ã¥¯ÂΤ¬½ÐÎϤµ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£
14053 +Fri Dec 9 14:23:22 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
14055 + * grotty/tty.cc (add_char): EUCʸ»ú¤ËÂФ·¤ÆWCHAR_MODE¤òÀßÄꤷ¤Æ¤¤
14056 + ¤Ê¤«¤Ã¤¿¤¿¤á¡¢tty½ÐÎϤǥ´¥·¥Ã¥¯ÂΤ¬Æó½ÅÂǤÁ¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£
14058 +Fri Dec 9 14:19:33 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
14060 + * devdvi/Makefile.sub: ¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë G ¤Ç¡¢name¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
14061 + `name M'¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£
14063 +Wed Nov 30 13:24:54 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14065 + * ¥Ð¡¼¥¸¥ç¥ó0.96¡£
14067 + * grodvi/dvi.cc: FreeBSD 1.1.5R¤Îstrcmp(3)¤Ç¤Ï°ú¿ô¤Ë¥Ì¥ë¥Ý¥¤¥ó¥¿¤ò
14068 + ÅϤ¹¤È¥³¥¢¥À¥ó¥×¤·¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¤³¤ì¤ò²óÈò¤¹¤ë¥³¡¼¥É¤òÄɲä·¤¿¡£
14070 +Tue Nov 29 13:52:54 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14072 + * troff/input.cc: EUC¤Î¥¹¥Ú¡¼¥¹Ê¸»ú(0xa1a1)¤ÏASCII¤Î¥¹¥Ú¡¼¥¹Ê¸»ú¤È
14073 + ¤·¤Æ½èÍý¤¹¤ë¤è¤¦½¤Àµ¡£
14075 + * devnippon/createM: JISX0208¤Ë¤ª¤¤¤Æʸ»ú¤¬Ì¤ÄêµÁ¤ÎÉôʬ¤Ë¤Ä¤¤¤Æ¤Ï
14076 + ¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤ·¤Ê¤¤¤è¤¦½¤Àµ¡£
14078 +Mon Nov 28 18:15:31 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14080 + * grodvi/dvi.cc: grodvi¤òÆüËܸ첽¤·¤¿¡£
14082 +Fri Nov 25 15:39:05 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14084 + * troff/env.cc: EUCʸ»ú¤Ç»Ï¤Þ¤ë¹Ô¤ËÂФ·¤Æ¶ÑÅù³ä¤êÉÕ¤±¤¬¹Ô¤ï¤ì¤¿¾ì
14085 + ¹ç¡¢¹ÔƬ¤Ë;ʬ¤Ê¶õÇò¤¬Æþ¤ë»ö¤¬¤¢¤Ã¤¿¤Î¤Ç¤³¤ì¤ò½¤Àµ¤·¤¿¡£
14087 +Fri Nov 18 20:19:55 1994 Masubuchi Toshimichi <tmasu@st.rim.or.jp>
14089 + * devnippon/createM.c: createM¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤¬ÉÔÄê¤Ë¤Ê¤ë¤¿¤á¡¢
14090 + make¤¬½ªÎ»¤·¤Æ¤·¤Þ¤¦¡£createM¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤¬0¤Ë¤Ê¤ë¤è¤¦½¤Àµ¡£
14092 + * devnippon/Makefile.sub: PATH´Ä¶ÊÑ¿ô¤Ë¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤¬´Þ¤Þ
14093 + ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢devnippon/M¤òmake¤¹¤ë»þÅÀ¤ÇcreateM¤¬¸«¤Ä¤«¤é¤ºmake
14094 + ¥¨¥é¡¼¤Ë¤Ê¤ë¥Ð¥°¤ò½¤Àµ¡£
14096 +Thu Nov 17 17:11:26 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14098 + * devnippon/createM.c: gets()¤òfgets()¤ËÊѹ¹¡£
14100 +Sat Nov 12 13:38:19 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14102 + * ¥Ð¡¼¥¸¥ç¥ó0.95¡£
14104 + * troff/env.cc: .stt ¥ê¥¯¥¨¥¹¥È¤òÄɲÃ(¥í¡¼¥«¥ë¤Ê¥Þ¥Ë¥å¥¢¥ë½ñ¼°¤Ë¹ç
14105 + ¤ï¤»¤ë¤¿¤á -> ¤³¤Î¥ê¥¯¥¨¥¹¥È¤ÏÈó¸ø³«)¡£
14107 + * troff/input.cc (init_charset_table): ASCII¤Î¹ÔƬ¶Ø§ʸ»ú¤È¤·¤Æ
14108 + ,:;>}¤òÄɲä·¤¿¡£
14110 + * EUC¥Õ¥©¥ó¥È¥Õ¥¡¥¤¥ë¤Ï¡¢make»þ¤Ë¥Ä¡¼¥ë¤Ë¤è¤Ã¤ÆÀ¸À®¤¹¤ë¤è¤¦Êѹ¹¡£
14111 + ¤³¤ì¤Ë¤è¤êpatch¥µ¥¤¥º¤¬¤«¤Ê¤ê¾®¤µ¤¯¤Ê¤Ã¤¿¡£
14113 +Fri Nov 11 20:53:00 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp>
14115 + * troff/env.cc (add_char): <EUCʸ»ú> + <ASCIIʸ»ú>¤Î¾ì¹ç¡¢´Ö¤ËÆþ¤ì
14116 + ¤ë¶õÇò¤Ï¶Ø§¤Ë°ãÈ¿¤·¤Ê¤¤¤«¤®¤ê¥Ö¥ì¡¼¥¯²Äǽ¤Ê¶õÇò¤¬Æþ¤ë¤è¤¦½¤Àµ¤·¤¿¡£
14119 +Tue Oct 25 04:46:09 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14121 + * ¥Ð¡¼¥¸¥ç¥ó0.94¡£
14123 + * libdriver/input.cc (do_file): -Tlatin1¤ÇEUC¤Ç¤Ï¤Ê¤¤Ê¸»ú¥³¡¼¥É¤ò
14124 + EUC¤ÈȽÃǤ·¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£
14126 +Mon Oct 24 07:16:19 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14128 + * troff/node.cc (is_boldfont): FreeBSD 1.1.5¤Ç¡¢¥¼¥íÈÖÃÏ»²¾È¤Î¤¿¤á¥³
14129 + ¥¢¥À¥ó¥×¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£
14131 + * indxbib/dirnamemax.c: FreeBSD 1.1.5¤Ïpathconf()¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ç
14132 + _POSIX_VERSION¤òundef¤·¤¿¡£
14134 + * ¥Ð¡¼¥¸¥ç¥ó0.93¡£
14136 + * geqn¤òÆüËܸ첽¤·¤¿¡£
14138 + * devps/DESC¤Îwcharkern¤òÀßÄꤹ¤ë¤È¹ÔƬ¤Ë¶õÇò¤¬Æþ¤Ã¤Æ¤·¤Þ¤¦¥Ð¥°¤Î
14141 +Sat Oct 22 08:19:15 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14143 + * ¥Ð¡¼¥¸¥ç¥ó0.90¡£
14145 + * xtotroff¤òÆüËܸ첽¡£
14147 +Fri Oct 21 05:33:02 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14149 + * devps/DESC¤Îwcharkern¤òÀßÄꤹ¤ë¤È¹ÔƬ¤Ë¶õÇò¤¬Æþ¤Ã¤Æ¤·¤Þ¤¦»ö¤¬¤¢
14150 + ¤Ã¤¿¤Î¤Ç¡¢¤³¤ì¤ò½¤Àµ¡£
14152 + * pre-release¥Ð¡¼¥¸¥ç¥ó¡£
14154 + * gxditview¤òÆüËܸ첽¤·¤¿(¥Õ¥©¥ó¥È¥á¥È¥ê¥Ã¥¯¤Î¼è¤ê½Ð¤·¤¬¤¤¤¤²Ã¸º)¡£
14156 +Thu Oct 20 05:23:09 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14158 + * ¥Õ¥©¥ó¥ÈÈÖ¹æ3¤Ë¥Ü¡¼¥ë¥ÉÂΰʳ°¤Î¥Õ¥©¥ó¥È¤ò¥Þ¥¦¥ó¥È¤·¤¿¾ì¹ç¡¢´Á»ú¥Õ¥©
14159 + ¥ó¥È¤¬¥´¥·¥Ã¥¯ÂΤˤʤäƤ·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£
14161 +Wed Oct 19 06:48:55 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14163 + * beta¥Ð¡¼¥¸¥ç¥ó¡£
14165 +Tue Oct 18 05:02:59 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14168 + gpic¤òÆüËܸìÂбþ¤·¤¿¡£
14171 + gtbl¤òÆüËܸìÂбþ¤·¤¿¡£
14174 + Times-Bold°Ê³°¤Î¥Ü¡¼¥ë¥ÉÂΤ¬¥«¥ì¥ó¥È¥Õ¥©¥ó¥È¤Î»þ¡¢´Á»ú¥Õ¥©¥ó¥È¤¬¥´
14175 + ¥·¥Ã¥¯¤ËÀÚ¤êÂؤï¤é¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£
14178 + DESC¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Öwcharkern¤òÄɲä·¡¢ASCIIʸ»ú¤ÈEUCʸ»ú¤Î´Ö¤Ë¡¢
14179 + »ØÄꤷ¤¿unit¿ô¤À¤±breakÉÔ²Äǽ¤Ê¶õÇò¤òÆþ¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£
14182 + DESC¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ölowerwchar¤òÄɲä·¡¢ASCIIʸ»ú¤ËÂФ·¤ÆEUCʸ»ú¤ò¡¢
14183 + »ØÄꤷ¤¿unit¿ô¤À¤±²¼¤²¤ë¤è¤¦¤Ë¤·¤¿(ASCIIʸ»ú¤¬Íî¤Á¹þ¤ó¤Ç¸«¤¨¤ë¤¿¤á)¡£
14185 +Fri Oct 14 08:29:06 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp)
14187 + * aplah¥Ð¡¼¥¸¥ç¥ó¡£
14188 --- groff-1.18.1.1.orig/tmac/troffrc
14189 +++ groff-1.18.1.1/tmac/troffrc
14191 .do ds troffrc!X100 X.tmac
14192 .do ds troffrc!X100-12 X.tmac
14193 .do ds troffrc!ascii tty.tmac
14194 +.do ds troffrc!ascii8 tty.tmac
14195 .do ds troffrc!latin1 tty.tmac
14196 +.do ds troffrc!nippon tty.tmac
14197 .do ds troffrc!utf8 tty.tmac
14198 .do ds troffrc!cp1047 tty.tmac
14199 .do ds troffrc!lj4 lj4.tmac
14201 .\" Load hyphenation patterns from `hyphen.us' (in the tmac directory).
14204 +.\" For CJK hack. The hardcoded list of locales is especially nasty, but
14205 +.\" getting the locale charmap requires a troff extension.
14206 +.ie "\V[LANG]"ja_JP.eucJP" .do mso euc-jp.tmac
14207 +.el .ie "\V[LANG]"zh_CN" .do mso gb.tmac
14208 +.el .ie "\V[LANG]"zh_CN.GBK" .do mso gb.tmac
14209 +.el .ie "\V[LANG]"zh_SG" .do mso gb.tmac
14210 +.el .ie "\V[LANG]"zh_SG.GBK" .do mso gb.tmac
14211 +.el .if "\V[LANG]"zh_TW" .do mso big5.tmac
14213 .\" Don't let blank lines creep in here.
14214 --- groff-1.18.1.1.orig/tmac/docj-nroff
14215 +++ groff-1.18.1.1/tmac/docj-nroff
14217 +.\" Copyright (c) 1991 The Regents of the University of California.
14218 +.\" All rights reserved.
14220 +.\" Redistribution and use in source and binary forms, with or without
14221 +.\" modification, are permitted provided that the following conditions
14223 +.\" 1. Redistributions of source code must retain the above copyright
14224 +.\" notice, this list of conditions and the following disclaimer.
14225 +.\" 2. Redistributions in binary form must reproduce the above copyright
14226 +.\" notice, this list of conditions and the following disclaimer in the
14227 +.\" documentation and/or other materials provided with the distribution.
14228 +.\" 3. All advertising materials mentioning features or use of this software
14229 +.\" must display the following acknowledgement:
14230 +.\" This product includes software developed by the University of
14231 +.\" California, Berkeley and its contributors.
14232 +.\" 4. Neither the name of the University nor the names of its contributors
14233 +.\" may be used to endorse or promote products derived from this software
14234 +.\" without specific prior written permission.
14236 +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
14237 +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14238 +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
14239 +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
14240 +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
14241 +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
14242 +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
14243 +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
14244 +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
14245 +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
14248 +.\" @(#)doc-nroff 5.6 (Berkeley) 8/5/91
14250 +.\" tmac.mdoc-nroff
14272 +.ds lB \fR\|[\|\fP
14278 +.ds Pu {\ .\ ,\ ;\ :\ (\ )\ [\ ]}
14299 +.ie \\n(cR .nr Hm 0
14336 +.if !"\\*(cH"Null" \{\
14337 +. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
14338 +. el .as hT \\|(\\|\\*(cH\\|)
14340 +.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
14349 +.if \\n(nl==0:\\n(nl==-1 'bp
14355 +.ie \\n(sW>=\\n(fW \{\
14356 +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
14357 +. el .nr sW \\n(sW/\\n(fW
14362 +.nr sW \w
\a\\*(A\\$1
\a
14363 +.ie \\n(sW>=\\n(fW \{\
14364 +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
14365 +. el .nr sW \\n(sW/\\n(fW
14386 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
14392 +.ie "\\$1"NAME" \{\
14397 +. ie "\\$1"̾Á°" \{\
14402 +. ie "\\$1"̾¾Î" \{\
14414 +. if "\\$1"SEE" .nr nA 1
14415 +. if "\\$1"´ØÏ¢¹àÌÜ" .nr nA 1
14416 +. if "\\$1"FILES" .nr nF 1
14417 +. if "\\$1"¥Õ¥¡¥¤¥ë" .nr nF 1
14418 +. if "\\$1"´ØÏ¢¥Õ¥¡¥¤¥ë" .nr nF 1
14419 +. if "\\$1"STANDARDS" .nr nT 1
14420 +. if "\\$1"½àµò" .nr nT 1
14421 +. if "\\$1"µ¬³Ê" .nr nT 1
14422 +. if "\\$1"SYNOPSIS" .nr nS 1
14423 +. if "\\$1"½ñ¼°" .nr nS 1
14424 +. if "\\$1"DESCRIPTION" \{\
14431 +. if "\\$1"ÀâÌÀ" \{\
14438 +. if "\\$1"²òÀâ" \{\
14445 +. if "\\$1"AUTHORS" .nr nY 1
14446 +. if "\\$1"Ãø¼Ô" .nr nY 1
14447 +. if "\\$1"ºî¼Ô" .nr nY 1
14455 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
14458 +\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
14460 +.in \\n(.iu+\\n(Tiu
14461 +.if "\\$1"SEE" .nr sE 1
14464 --- groff-1.18.1.1.orig/tmac/groff_trace.man
14465 +++ groff-1.18.1.1/tmac/groff_trace.man
14467 A copy of the Free Documentation License is included as a file called
14468 FDL in the main directory of the groff source package.
14471 +A copy of the GNU Free Documentation License is also available in this
14472 +Debian package as /usr/share/doc/groff/copyright.
14475 .\" --------------------------------------------------------------------
14477 --- groff-1.18.1.1.orig/tmac/docj-ditroff
14478 +++ groff-1.18.1.1/tmac/docj-ditroff
14480 +.\" Copyright (c) 1991 The Regents of the University of California.
14481 +.\" All rights reserved.
14483 +.\" Redistribution and use in source and binary forms, with or without
14484 +.\" modification, are permitted provided that the following conditions
14486 +.\" 1. Redistributions of source code must retain the above copyright
14487 +.\" notice, this list of conditions and the following disclaimer.
14488 +.\" 2. Redistributions in binary form must reproduce the above copyright
14489 +.\" notice, this list of conditions and the following disclaimer in the
14490 +.\" documentation and/or other materials provided with the distribution.
14491 +.\" 3. All advertising materials mentioning features or use of this software
14492 +.\" must display the following acknowledgement:
14493 +.\" This product includes software developed by the University of
14494 +.\" California, Berkeley and its contributors.
14495 +.\" 4. Neither the name of the University nor the names of its contributors
14496 +.\" may be used to endorse or promote products derived from this software
14497 +.\" without specific prior written permission.
14499 +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
14500 +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14501 +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
14502 +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
14503 +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
14504 +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
14505 +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
14506 +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
14507 +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
14508 +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
14511 +.\" @(#)doc-ditroff 5.8 (Berkeley) 8/5/91
14513 +.\" tmac.mdoc-ditroff
14514 +.if \n(.g .if !rC .nr C 0
14532 +.ds lP \fR\|(\|\fP\s10
14533 +.ds lp \fR(\fP\s10
14534 +.ds rP \fR\|)\|\fP\s10
14535 +.ds rp \fR)\fP\s10
14536 +.ds lB \fR\^[\^\fP\s10
14537 +.ds rB \fR\^]\fP\s10
14543 +.ds Pu \fR{\ .\ ,\ :\ ;\ (\ )\ [\ ]\ \fR}
14557 +.nr sI \w
\a\fC,
\au*5
14603 +.if !"\\*(cH"Null" \{\
14604 +. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
14605 +. el .as hT \\|(\\|\\*(cH\\|)
14607 +.if "\\*(cH"Null" \{\
14608 +. if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
14630 +.nr sW \w
\a\fC\\$1
\a
14631 +.ie \\n(sW>=\\n(fW \{\
14632 +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
14633 +. el .nr sW \\n(sW/\\n(fW
14636 +. ie \\n(sW>0 .nr sW 1
14641 +.nr sW \w
\a\fC\\*(A\\$1
\a
14642 +.ie \\n(sW>=\\n(fW \{\
14643 +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
14644 +. el .nr sW \\n(sW/\\n(fW
14647 +. ie \\n(sW>0 .nr sW 1
14670 +. if (\\n(aP>0) \{\
14674 +. if (\\n(aP==0) \{\
14675 +. rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
14676 +. rm S1 S2 S3 S4 S5 S6 S7 S8 S9
14700 +.ie "\\$1"NAME" \{\
14705 +. ie "\\$1"̾Á°" \{\
14710 +. ie "\\$1"̾¾Î" \{\
14721 +. if "\\$1"SYNOPSIS" \{\
14725 +. if "\\$1"½ñ¼°" \{\
14729 +. if "\\$1"DESCRIPTION" \{\
14736 +. if "\\$1"ÀâÌÀ" \{\
14743 +. if "\\$1"²òÀâ" \{\
14750 +. if "\\$1"SEE" \{\
14754 +. if "\\$1"´ØÏ¢¹àÌÜ" \{\
14758 +. if "\\$1"FILES" .nr nF 1
14759 +. if "\\$1"¥Õ¥¡¥¤¥ë" .nr nF 1
14760 +. if "\\$1"´ØÏ¢¥Õ¥¡¥¤¥ë" .nr nF 1
14761 +. if "\\$1"STANDARDS" .nr nT 1
14762 +. if "\\$1"½àµò" .nr nT 1
14763 +. if "\\$1"µ¬³Ê" .nr nT 1
14764 +. if "\\$1"AUTHORS" .nr nY 1
14765 +. if "\\$1"Ãø¼Ô" .nr nY 1
14766 +. if "\\$1"ºî¼Ô" .nr nY 1
14767 +. if "\\$1"SEE" .nr sE 1
14768 +. if "\\$1"´ØÏ¢¹àÌÜ" .nr sE 1
14777 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
14780 +\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
14782 +.in \\n(.iu+\\n(Tiu
14785 --- groff-1.18.1.1.orig/tmac/tty.tmac
14786 +++ groff-1.18.1.1/tmac/tty.tmac
14788 .ie '\*(.T'cp1047' \
14789 . do mso cp1047.tmac
14791 -. if '\*(.T'latin1' \
14792 +. if !'\*(.T'ascii' \
14793 . do mso latin1.tmac
14795 .\" If you want the character definitions in tty-char.tmac to be loaded
14796 --- groff-1.18.1.1.orig/tmac/gb.tmac
14797 +++ groff-1.18.1.1/tmac/gb.tmac
14799 +.\" Kinsoku table for the GB2312 encoding of Chinese, recoded from
14800 +.\" kinsoku.el in Emacs 22.0.50.
14801 +.\" Checked by Simon Law, who reckons this is "mostly right". That will
14802 +.\" probably do for now ...
14804 +.cflags 256 ¡¢¡££®£¬¡¤¡¥¡¦¡§¡¨¡©¡ª¡«¡¬¡¡¯¡±£©¡³¡µ¡·¡¹¡»¡½
14805 +.cflags 256 ¡¿£»£º£¿£¡¡À¡Á¡Â¡Ã¡ã¡ä¡å¡æ£¯£Ü£¢£ß£þ£ü¨å
14806 +.cflags 512 ¨Å¨Æ¨Ç¨È¨É¨Ê¨Ë¨Ì¨Í¨Î¨Ï¨Ð¨Ñ¨Ò¨Ó¨Ô¨Õ¨Ö¨×¨Ø¨Ù¨è
14807 +.\" Simon Law supplied these.
14808 +.cflags 512 £¨¡®¡°¡²¡´¡¶¡¸¡º¡¼¡¾
14810 +.\" http://tcl.apache.org/sources/tcl/tools/encoding/gb2312.txt lists U+FF0D
14811 +.\" as FULLWIDTH HYPHEN-MINUS. Is this correct?
14814 --- groff-1.18.1.1.orig/tmac/docj.tmac
14815 +++ groff-1.18.1.1/tmac/docj.tmac
14817 +.\" Copyright (c) 1991 The Regents of the University of California.
14818 +.\" All rights reserved.
14820 +.\" Redistribution and use in source and binary forms, with or without
14821 +.\" modification, are permitted provided that the following conditions
14823 +.\" 1. Redistributions of source code must retain the above copyright
14824 +.\" notice, this list of conditions and the following disclaimer.
14825 +.\" 2. Redistributions in binary form must reproduce the above copyright
14826 +.\" notice, this list of conditions and the following disclaimer in the
14827 +.\" documentation and/or other materials provided with the distribution.
14828 +.\" 3. All advertising materials mentioning features or use of this software
14829 +.\" must display the following acknowledgement:
14830 +.\" This product includes software developed by the University of
14831 +.\" California, Berkeley and its contributors.
14832 +.\" 4. Neither the name of the University nor the names of its contributors
14833 +.\" may be used to endorse or promote products derived from this software
14834 +.\" without specific prior written permission.
14836 +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
14837 +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14838 +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
14839 +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
14840 +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
14841 +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
14842 +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
14843 +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
14844 +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
14845 +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
14848 +.\" @(#)doc 5.8 (Berkeley) 8/5/91
14849 +.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
14850 +.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
14851 +.\" `tmac.doc-common' would be too long); when using groff, the doc-* files
14852 +.\" are loaded using the `mso' request.
14854 +.\" .mdoc-parse - attempt to parse troff request arguments
14862 +.so /usr/share/tmac/\\$1
14876 +.\" NS Db macro - start/stop DEBUG MODE
14877 +.\" NS Db register DEBUG MODE
14878 +.\" NS iN register DEBUG MODE (inline if 1, to stderr if 0 (default))
14882 +. ie \\n(Db==0 \{\
14892 +. if "\\$1"on" \{\
14896 +. if "\\$1"off" \{\
14902 +.\" NS aV macro - parse argument vector (recursive) (.aV arg ... )
14903 +.\" NS fV macro - parse argument vector (recursive) (.fV)
14904 +.\" NS aC register argument counter (aV/fV)
14905 +.\" NS fV register argument counter (must set to \\n(.$ prior to reuqest) (fV)
14906 +.\" NS A[0-9] argument vector (aV/fV)
14907 +.\" NS C[0-9] reg. arg type(1=macro, 2=arg, 3=punct-suf, 4=punct-pre) (aV/fV)
14908 +.\" NS S[0-9] space vector (sV)
14909 +.\" NS aP register argument pointer (aV)
14910 +.\" NS yU local string used for debugging
14911 +.\" NS iI local register (indent for inline debug mode)
14912 +.\" NS mN name of calling request (set in each user requestable macro)
14916 +. if "\\*(mN"Op" .ds A\\n(aC \fR\\$1\fP
14917 +. if "\\*(mN"Ar" .ds A\\n(aC \fR\\$1\fP
14918 +. if "\\*(mN"Fl" .ds A\\n(aC \fR\\$1\fP
14919 +. if "\\*(mN"Cm" .ds A\\n(aC \fR\\$1\fP
14920 +. if "\\*(mN"It" .ds A\\n(aC \fR\\$1\fP
14922 +.el .ds A\\n(aC \\$1
14924 +.nr C\\n(aC \\n(aT
14927 +. if \\n(aT==1 .ds yU Executable
14928 +. if \\n(aT==2 .ds yU String
14929 +. if \\n(aT==3 .ds yU Closing Punctuation or suffix
14930 +. if \\n(aT==4 .ds yU Opening Punctuation or prefix
14931 +. if \\n(iN==1 \{\
14935 +. if \\n(aC==1 \{\
14936 +\&\fBDEBUG(argv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c
14938 +\&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW
14939 +\&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU
14941 +. if \\n(iN==0 \{\
14942 +. if \\n(aC==1 \{\
14943 +. tm DEBUG(argv) MACRO: `.\\*(mN' Line #: \\n(.c
14945 +. tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW
14946 +. tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU
14951 +. ie \\n(dZ==1 \{\
14952 +. if \\n(oM>1 .as b1 \\*(S0
14956 +. if \\n(fC==0 .as b1 \\*(S0
14959 +. ds S0 \\*(S\\n(aC
14961 +. if \\n(iN==1 \{\
14962 +\&MACRO REQUEST: \t.\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
14966 +. if \\n(iN==0 \{\
14967 +.tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
14971 +.el .aV \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
14975 +.if "\\*(A\\n(aC"|" \{\
14976 +. if "\\*(mN"Op" .ds A\\n(aC \fR\\*(A\\n(aC\fP
14977 +. if "\\*(mN"Ar" .ds A\\n(aC \fR\\*(A\\n(aC\fP
14978 +. if "\\*(mN"Fl" .ds A\\n(aC \fR\&\\*(A\\n(aC\fP
14979 +. if "\\*(mN"Cm" .ds A\\n(aC \fR\\*(A\\n(aC\fP
14980 +. if "\\*(mN"It" .ds A\\n(aC \fR\\*(A\\n(aC\fP
14983 +.nr C\\n(aC \\n(aT
14986 +. if \\n(aT==1 .ds yU Executable
14987 +. if \\n(aT==2 .ds yU String
14988 +. if \\n(aT==3 .ds yU Closing Punctuation or suffix
14989 +. if \\n(aT==4 .ds yU Opening Punctuation or prefix
14990 +. if \\n(iN==1 \{\
14994 +. if \\n(aC==1 \{\
14995 +\&\fBDEBUG(fargv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c
14997 +\&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW
14998 +\&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU
15000 +. if \\n(iN==0 \{\
15001 +. if \\n(aC==1 \{\
15002 +. tm DEBUG(fargv) MACRO: `.\\*(mN' Line #: \\n(.c
15004 +. tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW
15005 +. tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU
15010 +. ie \\n(dZ==1 \{\
15011 +. if \\n(oM>1 .as b1 \\*(S0
15015 +. if \\n(fC==0 .as b1 \\*(S0
15018 +. ds S0 \\*(S\\n(aC
15022 +\&\tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
15027 +.tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
15036 +.\" NS aX macro - stuff saved strings into `b1' (used by -diag list)
15039 +.as b1 \&\\*(A\\n(aP
15050 +.\" NS aI macro - append arg to arg vector: .aI [arg] [type] (used by .En only)
15060 +. tm Usage: Too many arguments (maximum of 8 accepted) (#\\n(.c)
15061 +. tm \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
15065 +.\" NS aZ macro - print buffer (pB) and clean up arg vectors (aY)
15070 +.\" NS aY macro - clean up arg vector
15072 +.rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
15073 +.rm A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
15074 +.rm S1 S2 S3 S4 S5 S6 S7 S8 S9
15078 +.\" NS pB macro - test for end of vector (eol) (print b1 buffer or divert)
15081 +. if \\n(oM==1 \{\&\\*(b1
15085 +. if \\n(oM==0 \{\
15090 +. ie \\n(oM==0 \{\&\\*(b1
15095 +. if ((\\n(sM==1)&(\\n(tP==0)) \{\
15102 +.\" NS x1 macro - save buffer and divert if tP flag set
15103 +.\" NS eB diversion string
15104 +.\" NS b2 string save of buffer
15105 +.\" NS lK register count of lines read from input file
15116 +.\" NS x2 macro - end diversion and print
15117 +.\" NS b0 string local temporary
15122 +.ie (\\n(.c-\\n(lK>1) \{\
15123 +. ds b0 \&\\*(eB\\
15124 +. ds b1 \\*(b2\\*(b0\\*(b1
15126 +.el .ds b1 \\*(b2\\*(b1
15131 +.\" NS Fl macro - flags (appends - and prints flags)
15132 +.\" NS cF register save current font
15133 +.\" NS cZ register save current font size
15137 +. ie \\n(.$==0 \{\
15138 +. as b1 \&\|\-\|\fP\s0
15143 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15147 +. ie (\\n(aC-\\n(aP)==0 \{\
15148 +. as b1 \&\|\-\fP\s0
15153 +. ie \\n(C\\n(aP==1 \{\
15154 +. as b1 \&\|\-\fP\s0
15160 +. if \\n(C\\n(aP==3 \{\
15169 +.\" NS fR macro - Fl flag recursion routine (special handling)
15170 +.\" NS jM local register
15171 +.\" NS jN local register
15175 +.nr jM \\n(C\\n(aP
15182 +. ie \\n(jM==2 \{\
15183 +. ie !"\\*(A\\n(aP"\\*(Ba" \{\
15184 +. ie !"\\*(A\\n(aP"\fR|\fP" \{\
15185 +. ie "\\*(A\\n(aP"-" .as b1 \&\|\-\^\-\|
15186 +. el .as b1 \&\|\-\\*(A\\n(aP
15188 +. el .as b1 \&\\*(A\\n(aP
15190 +. el .as b1 \&\\*(A\\n(aP
15192 +. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
15193 +. ie \\n(aC==\\n(aP \{\
15194 +. if \\n(jM==4 .as b1 \&\|\-
15200 +. ie ((\\n(C\\n(aP==3)&(\\n(C\\n(jN==4)) .as b1 \&\|\-
15201 +. el .as b1 \&\\*(S\\n(jN
15202 +. fR \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15208 +.\" NS nR macro - general name recursion routine
15209 +.\" NS jM local register
15210 +.\" NS jN local register
15213 +.nr jM \\n(C\\n(aP
15215 +. as b1 \&\f\\n(cF\s\\n(cZ
15220 +. ie \\n(jM==2 .as b1 \&\\*(A\\n(aP
15221 +. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
15222 +. ie \\n(aC==\\n(aP \{\
15223 +. as b1 \&\f\\n(cF\s\\n(cZ
15228 +. as b1 \&\\*(S\\n(jN
15234 +.\" NS Ar macro - command line `argument' macro
15239 +. ie \\n(.$==0 \{\
15240 +. as b1 file\ ...\fP\s0
15245 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15249 +. ie (\\n(aC-\\n(aP)==0 \{\
15250 +. as b1 \&file\ ...\fP\s0
15255 +. ie \\n(C\\n(aP==1 \{\
15256 +. as b1 \&file\ ...\fP\s0
15262 +. if \\n(C\\n(aP==3 \{\
15263 +. as b1 \&file\ ...
15270 +.\" NS Ad macro - Addresses
15273 +. ie \\n(.$==0 .tm Usage: .Ad address ... \\*(Pu (#\\n(.c)
15276 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15279 +.if \\n(aC>\\n(aP \{\
15287 +.\" NS Cd macro - Config declaration (for section 4 SYNOPSIS) (not callable)
15288 +.\" needs work - not very translatable
15291 +. ie \\n(.$==0 .tm Usage: .Cd Configuration file declaration (#\\n(.c)
15308 +.if \\n(aC>\\n(aP \{\
15314 +. if "\\*(mN"Cd" \{\
15318 +. if \\n(iS==0 .nr iS \\n(Dsu
15330 +.\" NS Cm macro - Interactive command modifier (flag)
15333 +. ie \\n(.$==0 .tm Usage: .Cm Interactive command modifier ... \\*(Pu (#\\n(.c)
15349 +.if \\n(aC>\\n(aP \{\
15357 +.\" NS Dv macro - define variable
15360 +. ie \\n(.$==0 .tm Usage: .Dv define_variable ... \\*(Pu (#\\n(.c)
15363 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15366 +.if \\n(aC>\\n(aP \{\
15374 +.\" NS Em macro - Emphasis
15377 +. ie \\n(.$==0 \{\
15378 +. tm Usage: .Em text ... \\*(Pu (#\\n(.c)
15395 +.if \\n(aC>\\n(aP \{\
15403 +.\" NS Er macro - Errnotype
15406 +. ie \\n(.$==0 .tm Usage: .Er ERRNOTYPE ... \\*(Pu (#\\n(.c)
15409 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15412 +.if \\n(aC>\\n(aP \{\
15420 +.\" NS Ev macro - Environment variable
15423 +. ie \\n(.$==0 .tm Usage: .Ev ENVIRONMENT_VARIABLE ... \\*(Pu (#\\n(.c)
15426 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15429 +.if \\n(aC>\\n(aP \{\
15437 +.\" NS Fd macro - function declaration - not callable (& no err check)
15438 +.\" NS fD register subroutine test (in synopsis only)
15439 +.\" NS fY register subroutine count (in synopsis only) (fortran only)
15440 +.\" NS fZ register also subroutine count (in synopsis only)
15444 +.\" if a variable type was the last thing given, want vertical space
15449 +.\" if a subroutine was the last thing given, want vertical space
15451 +. ie \\n(fD==0 \{\
15461 +\&\\*(fD\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15466 +.\" NS Fr macro - function return value - not callable (at the moment)
15469 +. ie \\n(.$==0 .tm Usage: .Fr Function_return_value... \\*(Pu (#\\n(.c)
15472 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15475 +.if \\n(aC>\\n(aP \{\
15483 +.\" NS Ic macro - Interactive command
15486 +. ie \\n(.$==0 .tm Usage: .Ic Interactive command ... \\*(Pu (#\\n(.c)
15489 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15492 +.if \\n(aC>\\n(aP \{\
15500 +.\" NS Li macro - literals
15503 +. ie \\n(.$==0 .tm Usage .Li argument ... \\*(Pu (#\\n(.c)
15519 +.if \\n(aC>\\n(aP \{\
15527 +.\" NS Or macro - Pipe symbol (OR)
15530 +. ie \\n(.$==0 .tm Usage: .Or ... \\*(Pu (#\\n(.c)
15533 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15536 +.if \\n(aC>\\n(aP \{\
15544 +.\" NS Ms macro - Math symbol
15547 +. ie \\n(.$==0 .tm Usage: .Ms Math symbol ... \\*(Pu (#\\n(.c)
15550 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15553 +.if \\n(aC>\\n(aP \{\
15561 +.\" NS Nm macro - Name of command or page topic
15562 +.\" NS n1 string - save first invocation of .Nm
15563 +.\" NS iS register - indent second command line in a synopsis
15566 +. ie \\n(.$==0 \{\
15567 +. ie "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c)
15568 +. el \&\\*(nM\\*(n1\fP\s0
15586 +. ie \\n(aC==\\n(aP \{\
15587 +. as b1 \&\\*(nM\\*(n1\fP\s0
15593 +. ie \\n(C\\n(aP==1 \{\
15594 +. as b1 \&\\*(n1\fP\s0
15601 +. if "\\*(mN"Nm" \{\
15606 +. if \\n(iS==0 \{\
15608 +. nr iS ((\\n(sWu+1)*\\n(fW)u
15616 +. if "\\*(n1"" .ds n1 \\*(A\\n(aP
15622 +.\" NS Pa macro - Pathname
15625 +. ie \\n(.$==0 \&\\*(pA~\fP\s0
15628 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15631 +.if \\n(aC>\\n(aP \{\
15639 +.\" NS Sy macro - Symbolics
15642 +. ie \\n(.$==0 .tm Usage: .Sy symbolic_text ... \\*(Pu (#\\n(.c)
15658 +.if \\n(aC>\\n(aP \{\
15666 +.\" NS Tn macro - Trade Name Macro
15669 +. ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c)
15672 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15675 +.if \\n(aC>\\n(aP \{\
15676 +. as b1 \\*(tN\\*(tF
15683 +.\" NS nN macro - Trade Name Macro for inside of reference
15686 +. ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c)
15689 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15692 +.if \\n(aC>\\n(aP \{\
15700 +.\" NS Va macro - variable name macro
15703 +. ie \\n(.$==0 .tm Usage: .Va variable_name(s) ... \\*(Pu (#\\n(.c)
15706 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15709 +.if \\n(aC>\\n(aP \{\
15718 +.\" NS No macro - Normal text macro (default text style if mess up)
15722 +. ie \\n(.$==0 .tm Usage: .No must be called with arguments (#\\n(.c)
15725 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15728 +.if \\n(aC>\\n(aP \{\
15730 +. ie \\n(C\\n(aP==1 \{\
15740 +.\"------------------------------------------------------------------------
15741 +.\" NS Op macro - Option Expression
15746 +.\" .ds qL \&\\*(lO
15747 +.\" .ds qR \&\\*(rO
15750 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
15752 +.\" NS Aq macro - Enclose string in angle brackets
15754 +.if \\n(aC==0 .ds mN Aq
15757 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15759 +.\" NS Bq macro - Enclose string in square brackets
15761 +.if \\n(aC==0 .ds mN Bq
15764 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15766 +.\" NS Dq macro - Enclose string in double quotes
15768 +.if \\n(aC==0 .ds mN Dq
15771 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15773 +.\" NS Eq macro - Enclose string in double quotes
15775 +.if \\n(aC==0 .ds mN Eq
15778 +.En \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15780 +.\" NS Pq macro - Enclose string in parenthesis
15782 +.if \\n(aC==0 .ds mN Pq
15785 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15787 +.\" NS Ql macro - Quoted literal is in file mdocj-[dit|n|g]roff (too large
15788 +.\" an if-else to carry along recursively for `if n ...')
15790 +.\" NS Sq macro - Enclose string in single quotes
15792 +.if \\n(aC==0 .ds mN Qq
15795 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15797 +.\" NS Sq macro - Enclose string in single quotes
15799 +.if \\n(aC==0 .ds mN Sq
15802 +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15805 +.\" NS Es macro - Set up strings for .En call
15808 +. ie \\n(.$>2 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15814 +.if \\n(aC>\\n(aP \{\
15816 +. ds qL \\*(A\\n(aP
15818 +. ds qR \\*(A\\n(aP
15819 +. ie \\n(aC>\\n(aP .c\\n(C\\n(aP
15823 +.\" .tm En beg arg(A[\\n(aP])==\\*(A\\n(aP;
15824 +.\" .tm En oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
15825 +.\" NS En macro - Enclose string with given args (eg [ and ] etc)
15826 +.\" NS qL string variable set by calling macro
15827 +.\" NS qR string variable set by calling macro
15828 +.\" NS aJ register (for vR)
15831 +. ie \\n(.$==0 \{\
15832 +. as b1 \&\\*(qL\\*(qR
15837 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15845 +. ie (\\n(aC-\\n(aP)==0 \{\
15850 +. ie \\n(C\\n(aC==3 \{\
15854 +. ds A\\n(aJ \&\\*(qR\\*(A\\n(aJ
15857 +. el .aI \&\\*(qR 3
15859 +. if \\n(C\\n(aP==1 .\\*(A\\n(aP
15860 +. if \\n(C\\n(aP>1 \{\
15867 +.\" NS vR macro - vector routine (for En, trace backwards past trail punct)
15869 +.if \\n(C\\n(aJ==3 \{\
15874 +.\"------------------------------------------------------------------------
15875 +.\" NS Ao macro - Angle open
15877 +.if \\n(aC==0 .ds mN Ao
15879 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15881 +.\" NS Ac macro - Angle close
15883 +.if \\n(aC==0 .ds mN Ac
15885 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15887 +.\" NS Bo macro - Bracket open
15889 +.if \\n(aC==0 .ds mN Bo
15891 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15893 +.\" NS Bc macro - Bracket close
15895 +.if \\n(aC==0 .ds mN Bc
15897 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15899 +.\" NS Do macro - Double Quote open
15901 +.if \\n(aC==0 .ds mN Do
15903 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15905 +.\" NS Dc macro - Double Quote close
15907 +.if \\n(aC==0 .ds mN Dc
15909 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15911 +.\" NS Eo macro - Enclose open
15913 +.if \\n(aC==0 .ds mN Eo
15915 +.eO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15917 +.\" NS Ec macro - Enclose close
15919 +.if \\n(aC==0 .ds mN Ec
15921 +.eC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15923 +.\" NS Oo macro - Option open
15925 +.if \\n(aC==0 .ds mN Oo
15927 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15929 +.\" NS Oc macro - Option close
15931 +.if \\n(aC==0 .ds mN Oc
15933 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15935 +.\" NS Po macro - Parenthesis open
15937 +.if \\n(aC==0 .ds mN Po
15939 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15941 +.\" NS Pc macro - Parenthesis close
15943 +.if \\n(aC==0 .ds mN Pc
15945 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15947 +.\" NS Qo macro - Straight Double Quote open
15949 +.if \\n(aC==0 .ds mN Qo
15951 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15953 +.\" NS Qc macro - Straight Double Quote close
15955 +.if \\n(aC==0 .ds mN Qc
15957 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15959 +.\" NS So macro - Single Quote open
15961 +.if \\n(aC==0 .ds mN So
15963 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15965 +.\" NS Sc macro - Single Quote close
15967 +.if \\n(aC==0 .ds mN Sc
15969 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15971 +.\" NS Xo macro - Extend open (continue)
15973 +.if \\n(aC==0 .ds mN Xo
15976 +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15978 +.\" NS Xe macro - Extend close (end)
15981 +.if \\n(aC==0 .ds mN Xc
15983 +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15985 +.\" NS eO macro - enclose string open
15986 +.\" NS oM register (extension possible)
15989 +.\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ;
15992 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
15997 +. if (\\n(dZ==0)&(\\n(sM==1) \{\
16012 +. if \\n(aC>\\n(aP \{\
16014 +. ie \\n(C\\n(aP==1 .\\*(A\\n(aP
16020 +. if \\n(aC==\\n(aP \{\
16021 +. if \\n(tP==1 \{\
16022 +.\" .tm SETTING Xt!!!
16026 +.\"CHANGED ds S0 \\*(iV
16031 +. if \\n(oM>1 .as b1 \\*(sV
16035 +.\" NS eC macro - enclose string close
16036 +.\" NS aa local register
16039 +.\" tm eC last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ;
16043 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
16046 +. ie "\\*(xB"" \{\
16058 +. ie \\n(aC==\\n(aP \{\
16059 +. ie \\n(oM==0 \{\
16066 +. if \\n(C\\n(aa==2 .as b1 \\*(S\\n(aC
16067 +.\" tm CURRENT arg (aP==\\*(A\\n(aP and ap+1==\\*(A\\n(aa) tP==\\n(tP Xt==\\n(Xt
16070 +.\" tm UNSETTING Xt==\\n(Xt!!!!
16071 +. if \\n(Xt>0 .nr Xt \\n(Xt-1
16072 +.\" tm NOW Xt==\\n(Xt!!!!
16078 +.\"------------------------------------------------------------------------
16079 +.\" NS Pf macro - Prefix (calls .pF)
16081 +.if \\n(aC==0 .ds mN Pf
16083 +.pF \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
16085 +.\" NS pF macro - Prefix (for prefixing open quotes, brackets etc)
16090 +. tm Warning: Missing arguments - prefix .Pf)
16093 +. el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
16096 +. ie (\\n(aC-\\n(aP)>1 \{\
16098 +. as b1 \&\\*(A\\n(aP
16100 +. el .tm Warning: .Pf: trailing prefix (#\\n(.c)
16103 +. ie (\\n(aC-\\n(aP)==0 .aZ
16110 +.\" NS Ns macro - remove space (space remove done by .aV or .fV)
16114 +. ie \\n(.$>0 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
16115 +. el .tm Usage: .Ns must be called with arguments (#\\n(.c)
16122 +. tm Usage: Ap "cannot be first request on a line (no .Ap)" (#\\n(.c)
16127 +.\" NS Hv macro - Hard (unpaddable) Space vector
16128 +.\" NS iV string inter-vector space
16129 +.\" NS sV string inter-argument space
16134 +.\" NS Sv macro - Soft Space vector (troff limitation)
16138 +.\" NS Tv macro - Tab Space vector
16142 +.\" NS Sm macro - Space mode
16143 +.\" NS sM register - default is one (space mode on)
16147 +. ie \\n(.$==0 .tm "Usage: .Sm [off | on]" (#\\n(.c)
16150 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
16155 +. if "\\*(A\\n(aP"on" \{\
16159 +. if "\\*(A\\n(aP"off" \{\
16161 +. rm S0 S1 S2 S3 S4 S5 S6 S7 S8 S9
16164 +. ie \\n(aC>\\n(aP \{\
16170 +.\"------------------------------------------------------------------------
16171 +.\" Size and Argument type macros
16172 +.\" NS aT macro - argument type
16173 +.\" NS aU macro - argument type (same as .aT but uses A[1-9] strings
16174 +.\" NS aT register argument type
16178 +.ie \\n(sW>2:(\A'\\$1'==0) \{\
16182 +. if \\n(sW==1 \{\
16183 +. ie \\n(z\\$1>2 \{\
16188 +. if \\n(sW==2 \{\
16199 +.ie \\n(sW>2:(\A'\\*(A\\$1'==0) .nr aT 2
16201 +. if \\n(sW==1 \{\
16202 +. ie \\n(z\\*(A\\$1>2 \{\
16203 +. nr aT \\n(z\\*(A\\$1
16207 +. if \\n(sW==2 \{\
16208 +. ie (\\n(\\*(A\\$1) \{\
16223 +. if \\n(sW==1 \{\
16224 +. ie \\n(z\\$1>2 \{\
16229 +. if \\n(sW==2 \{\
16240 +.ie \\n(sW>2 .nr aT 2
16242 +. if \\n(sW==1 \{\
16243 +. ie \\n(z\\*(A\\$1>2 \{\
16244 +. nr aT \\n(z\\*(A\\$1
16248 +. if \\n(sW==2 \{\
16249 +. ie (\\n(\\*(A\\$1) \{\
16257 +.\" NS s1 macro - set spacing for class type 1
16258 +.\" NS s2 macro - set spacing for class type 2
16259 +.\" NS s3 macro - set spacing for class type 3
16260 +.\" NS s1 macro - set spacing for class type 1
16261 +.\" NS s2 macro - set spacing for class type 2
16262 +.\" NS s3 macro - set spacing for class type 3
16263 +.\" NS s4 macro - set spacing for class type 4
16264 +.\" NS S[0-9] string spacing
16265 +.\" NS xX local register
16266 +.\" NS aa local register
16268 +.tm MDOC-ERROR: bogus type 0 (can't set space '\\*(A\\n(aC') (#\\n(.c)
16271 +.if \\n(\\*(A\\n(aC==3 \{\
16274 +. ds S\\n(aC \\*(sV
16276 +.if \\n(\\*(A\\n(aC==2 \{\
16278 +.\" this kludge can probably go away, but need to double check first
16279 +. ie "\\*(A\\n(aC"Nb" .ds S\\n(xX \\*(hV
16284 +.ds S\\n(aC \\*(sV
16291 +.ds S\\n(aC \\*(sV
16296 +.\" Class switches (on current argument aP)
16297 +.\" NS c0 macro - catch errors (non-existent class type 0)
16298 +.\" NS c1 macro - call request if type 1
16299 +.\" NS c2 macro - call .No if type 2
16300 +.\" NS c3 macro - call .No if type 3
16301 +.\" NS c4 macro - call .No if type 4
16303 +.tm MDOC-ERROR: bogus class 0 (can't determine '\\*(A\\n(aC') (#\\n(.c)
16320 +.\" NS y1 macro - ignore if class 1
16321 +.\" NS y2 macro - ignore if class 2
16322 +.\" NS y3 macro - append if type 3
16323 +.\" NS y4 macro - append if type 4
16331 +.as b1 \\*(A\\n(aP
16336 +.as b1 \\*(A\\n(aP
16340 +.\"--------------------------------------------------------------------------
16341 +.\" Ns Bf macro - Begin Font Mode (will be begin-mode/end-mode in groff & TeX)
16342 +.\" Ns Ef macro - End Font Mode
16348 +. if "\\$1"Em" \&\\*(eM\c
16349 +. if "\\$1"Li" \&\\*(lI\c
16350 +. if "\\$1"Sy" \&\\*(sY\c
16351 +. if "\\$1"-emphasis" \&\\*(eM\c
16352 +. if "\\$1"-literal" \&\\*(lI\c
16353 +. if "\\$1"-symbolic" \&\\*(sY\c
16355 +.el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c)
16359 +.ie \\n(.$>0 .tm Usage .Ef (does not take arguments) (#\\n(.c)
16360 +.el \&\f\\n(bF\s\\n(bZ
16362 +.\" Ns Bk macro - Begin Keep
16363 +.\" Ns Ek macro - End Keep
16364 +.\" Ns kS string - keep type
16368 +.tm Usage: .Bk [-lines | -words] (#\\n(.c)
16371 +. if !"\\*(kS"" .tm .Bk: nesting keeps not implemented yet. (#\\n(.c)
16372 +. if "\\$1"-lines" .tm .Bd -lines: Not implemented yet. (#\\n(.c)
16373 +. if "\\$1"-words" .Hv
16379 +.ie \\n(.$>0 .tm Usage .Ek (does not take arguments) (#\\n(.c)
16381 +. if "\\*(kS"-lines" .tm .Bd -lines: Not implemented yet. (#\\n(.c)
16382 +. if "\\*(kS"-words" .Sv
16386 +.\" NS Bd macro - Begin Display display-type [offset string]
16387 +.\" NS Ed macro - end Display
16388 +.\" NS O[0-9] registers - stack of indent
16389 +.\" NS d[0-9] registers - display-type stack
16393 +.tm Usage: .Bd [-literal | -filled | -ragged | -unfilled] [-offset [string]] [-compact] (#\\n(.c)
16400 +. if "\\$1"-literal" \{\
16406 +' ta 9n 18n 27n 36n 45n 54n 63n 72n
16409 +' ta 8n 16n 24n 32n 40n 48n 56n 64n 72n
16413 +. if "\\$1"-filled" \{\
16418 +. if "\\$1"-ragged" \{\
16423 +. if "\\$1"-unfilled" \{\
16428 +.\" .tm Here is argc: \\n(.$ and here is iD \\n(iD
16429 +. if ((\\n(iD>=1)&(\\n(.$>\\n(iD)) \{\
16430 +. bV \\$2 \\$3 \\$4
16432 +. if \\n(O\\n(dP>0 'in \\n(.iu+\\n(O\\n(dPu
16433 +. if (\\n(bV==0) \{\
16434 +. if (\\n(nS==0) \{\
16435 +. ie "\\*(d\\n(dP"dR" .sp \\n(dVu
16439 +. if \\n(cR==0 .ne 2v
16444 +.\" NS bV macro - resolve remaining .Bd arguments
16446 +.\" .tm in bV with args: \\$1 \\$2 \\$3
16449 +.if "\\$1"-offset" \{\
16451 +. if "\\*(bY"left" \{\
16455 +. if "\\*(bY"right" \{\
16457 +. nr O\\n(dP (\\n(.l/3)u
16459 +. if "\\*(bY"center" \{\
16461 +. nr O\\n(dP (\\n(.l-\\n(.i)/4u
16463 +. if "\\*(bY"indent" \{\
16465 +. nr O\\n(dP \\n(dIu
16467 +. if "\\*(bY"indent-two" \{\
16469 +. nr O\\n(dP \\n(dIu+\\n(dIu
16471 +. if \\n(iD==1 \{\
16475 +. ie ((\\*(bY>9n)&(\\*(bY<100n)) \{\
16476 +. nr O\\n(dP \\*(bY
16478 +. el .nr O\\n(dP (\\n(sW)*\\n(fWu
16481 +. if \\n(sW==2 .aT \\*(bY
16482 +. ie \\n(aT==1 \{\
16483 +. nr O\\n(dP \\n(\\*(bY
16485 +. el .nr O\\n(dP \\*(bY
16489 +.if "\\$1"-compact" \{\
16492 +.if \\n(iD<\\n(.$ \{\
16493 +. ie "\\*(bY"" \{\
16501 +.\" NS Ed macro - end display
16505 +.if \\n(dP==0 .tm mdoc: Extraneous .Ed
16506 +.if "\\*(d\\n(dP"dL" \{\
16510 +.in \\n(.iu-\\n(O\\n(dPu
16517 +.\"--------------------------------------------------------------------------
16518 +.\" NS Bl macro - begin list (.Bl list-type)
16519 +.\" NS L[0-9] registers - stack of list types
16522 +.tm Usage: .Bl [[-hang | -tag] [-width]] [ -item | -enum | -bullet | -diag] (#\\n(.c)
16537 +. if "\\$1"-hang" \{\
16543 +. if "\\$1"-tag" \{\
16548 +. if "\\$1"-item" \{\
16553 +. if "\\$1"-enum" \{\
16559 +. if "\\$1"-bullet" \{\
16565 +. if "\\$1"-dash" \{\
16571 +. if "\\$1"-hyphen" \{\
16577 +. if "\\$1"-inset" \{\
16582 +. if "\\$1"-diag" \{\
16587 +. if "\\$1"-ohang" \{\
16592 +. if "\\$1"-column" \{\
16596 +. ie \\n(aP==0 \{\
16597 +. tm \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
16598 +. tm Usage: .Bl [[-inset|-tag] -width] [-item|-enum|-bullet|-diag] (#\\n(.c)
16602 +. if (\\n(aP==1)&(\\n(aP<\\n(.$) \{\
16605 +. if "\\*(L\\n(lC"cL" \{\
16609 +. ie \\n(v\\n(lC==1 \{\
16623 +.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC
16628 +. while \ni<100 \{\
16633 +.\" NS lV macro - resolve remaining .Bl arguments
16636 +.if \\n(fV>=\\n(aP \{\
16638 +. if "\\*(A\\n(aP"-compact" \{\
16642 +. if "\\*(A\\n(aP"-width" \{\
16646 +. ds t\\n(lC TagwidtH
16647 +. ds tS \\*(A\\n(aP
16650 +. nr w\\n(lC (\\n(sW)*\\n(fWu
16651 +. if \\n(sW==3 \{\
16653 +. if \A'\\*(tS' .if r num!\\*(tS \{\
16654 +. nr w\\n(lC \\*(tS
16658 +. if (\\*(tS>9n)&(\\*(tS<99n) \{\
16659 +. nr w\\n(lC \\*(tSu
16666 +. ie \\n(aT==1 \{\
16667 +. nr w\\n(lC \\n(\\*(tS
16670 +. nr w\\n(lC \\*(tSu
16674 +. if "\\*(A\\n(aP"-offset" \{\
16677 +. ie "\\*(A\\n(aP"indent" \{\
16678 +. nr o\\n(lC \\n(Dsu
16681 +. ds tS \\*(A\\n(aP
16684 +. nr o\\n(lC (\\n(sW)*\\n(fWu
16686 +. if \A'\\*(tS' .if r num!\\*(tS \{\
16687 +. nr o\\n(lC \\*(tS
16691 +. if (\\*(tS>9n)&(\\*(tS<100n) \{\
16692 +. nr o\\n(lC \\*(tS
16697 +. ie \\n(C\\n(aP==1 .nr o\\n(lC \\n(\\*(tS
16698 +. el .nr o\\n(lC \\*(tS
16702 +. if \\n(iD==0 \{\
16703 +. if "\\*(L\\n(lC"cL" \{\
16705 +. ds A\\n(wV \\*(A\\n(aP
16708 +. if \\n(fV>\\n(aP .lV
16711 +.\" NS El macro - end list
16712 +.\" NS iD local register
16715 +. tm Usage: .El (#\\n(.c)
16720 +. if "\\*(L\\n(lC"cL" \{\
16724 +. if "\\*(L\\n(lC"nU" \{\
16734 +. if "\\*(L\\n(lC"iT" \{\
16735 +' in \\n(.iu-\\n(o\\n(lCu
16741 +. if "\\*(L\\n(lC"oL" \{\
16742 +' in \\n(.iu-\\n(o\\n(lCu
16748 +. if "\\*(L\\n(lC"lL" \{\
16749 +' in \\n(.iu-\\n(o\\n(lCu
16755 +. if \\n(iD==0 \{\
16762 +.\" NS It macro - list item
16763 +.\" NS iD local register
16764 +.\" NS aA save pA font string for section FILES (no underline if nroff)
16766 +.if "\\*(L\\n(lC"" \{\
16767 +. tm Usage .Bl -list-type [-width [string] | -compact | -offset [string]] (#\\n(.c)
16768 +. tm .It \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
16770 +.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC
16786 +. if "\\*(L\\n(lC"mL" \{\
16792 +. if "\\*(L\\n(lC"cL" \{\
16798 +. if "\\*(L\\n(lC"iT" \{\
16803 +. if \\n(iD==0 \{\
16805 +.\" tm ------------------------------------------------------------------------
16806 +.\" tm It list-type==\\*(L\\n(lC, aP==\\n(aP
16807 +.\" tm It beg arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
16811 +. nr tX \\n(C\\n(aP
16812 +. ds tX \\*(A\\n(aP
16813 +. if \\n(nF==1 \{\
16815 +. if n .ds pA \\*(nO
16817 +. ie \\n(C\\n(aP==1 \{\
16824 +.\" tm in It here is b1==\\*(b1
16825 +.\" tm It mid arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
16826 +. ie \\n(Xt==1 .ds xB \&\\*(L\\n(lC
16833 +.\" NS lL macro - .It item of list-type inset
16844 +.\" NS hL macro - .It item of list-type hanging label (as opposed to tagged)
16847 +.nr bb \\n(w\\n(lCu+\\n(lSu
16849 +.ie \w
\a\\*(b1
\au>=(\\n(w\\n(lCu) \&\\*(b1
16850 +.el \&\\*(b1\h'|\\n(bbu'\c
16857 +.\" NS oL macro - .It item of list-type overhanging label
16868 +.\" NS iT macro - .It item of list-type [empty label]
16876 +.\" NS nU macro - Enumerated list
16877 +.\" NS nU register count
16878 +.\" NS hU macro - Hyphen paragraph list (sub bullet list)
16879 +.\" NS bU macro - Bullet paragraph list
16889 +.ds b1 \&\\*(sY\&\(bu\fP
16895 +.ds b1 \&\\*(sY\&\-\fP
16898 +.\" NS uL macro - .It item of list-type enum/bullet/hyphen
16901 +.nr bb \\n(w\\n(lCu+\\n(lSu
16903 +.ie \w
\a\\*(b1
\au>=(\\n(w\\n(lCu) \&\\*(b1
16904 +.el \&\\*(b1\h'|\\n(bbu'\c
16906 +.\" .nr dZ \\n(dZ+1
16912 +.\" NS mL macro - .It item of list-type diagnostic-message
16918 +. ie (\\n(zB-\\n(zA)>1 .Pp
16927 +\&\\*(sY\\*(b1\f\\n(cF\s\\n(cZ\\*(lS\c
16932 +.\" NS tL macro - .It item of list-type "tag"
16934 +.\" tm in tL here is b1==\\*(b1
16937 +.nr bb \\n(w\\n(lCu+\\n(lSu
16939 +.ie (\w
\a\\*(b1
\au)>(\\n(w\\n(lCu) \{\&\\*(b1
16942 +.el \&\\*(b1\h'|\\n(bbu'\c
16944 +. if n .ds pA \\*(aA
16948 +.\" .nr dZ \\n(dZ+1
16953 +.\" NS lW macro - resolve unknown label/tag width (if .Bl [inset | tag] only)
16955 +.if !"TagwidtH"\\*(t\\n(lC" \{\
16956 +. ie \\n(tX==1 \{\
16957 +. ds t\\n(lN \\*(tX
16958 +. nr w\\n(lN \\n(\\*(tX
16962 +. nr w\\n(lN \\n(No
16964 +. if !"\\*(t\\n(lC"\\*(t\\n(lN" .nr tC 1
16967 +.\" NS lX macro - set up vertical spacing (if compact) and offset+indent (all)
16972 +. if \\n(v\\n(lC==0 .sp \\n(dVu
16973 +. in \\n(.iu+\\n(w\\n(lCu+\\n(o\\n(lCu+\\n(lSu
16976 +. ie \\n(v\\n(lC==1 \{\
16983 +.if !\\n(cR .ne 2v
16985 +.\" NS lY macro - set up vertical spacing (if compact) and offset+indent (all)
16990 +. if \\n(v\\n(lC==0 .sp \\n(dVu
16991 +. in \\n(.iu+\\n(o\\n(lCu
16994 +. ie \\n(v\\n(lC==1 \{\
17001 +.if !\\n(cR .ne 2v
17003 +.\" NS tS temporary string
17004 +.\" NS hL macro - hanging list function
17005 +.\" NS tS temporary string
17006 +.\" NS hL macro - hanging list function
17007 +.\" NS lT macro - tagged list function
17008 +.\" NS lE macro - list end function
17009 +.\" NS tX string (initial string)
17010 +.\" NS tX register (initial class)
17011 +.\" NS tC parameter change flag
17012 +.\" NS Xt save current list-type flag
17013 +.\" NS lC register - list type stack counter
17014 +.\" NS tP register tag flag (for diversions)
17015 +.\" NS w[0-9] register tag stack (nested tags)
17016 +.\" NS t[0-9] register tag string stack (nested tags)
17017 +.\" NS o[0-9] register offset stack (nested tags)
17018 +.\" NS v[0-9] register vertical tag break stack
17019 +.\" NS h[0-9] register horizontal tag stack (continuous if 1, break if 0)
17028 +.\" IN lC o[\\n(lC]==\\n(o\\n(lC, w[\\n(lC]==\\n(w\\n(lC,
17029 +.ie \\n(o\\n(lC>0 \{\
17030 +' in \\n(.iu-(\\n(w\\n(lCu)-(\\n(o\\n(lCu)-\\n(lSu
17033 +.el 'in \\n(.iu-\\n(w\\n(lCu-\\n(lSu
17034 +.if \\n(lC<=0 .tm Extraneous .El call (#\\n(.c)
17039 +.\" NS tY macro - set up next block for list
17040 +.\" NS tZ macro - decrement stack
17041 +.\" NS tY register (next possible lC value)
17047 +.ds t\\n(tY \\*(t\\n(lC
17060 +.\" initial values
17067 +.\" NS Xr macro - cross reference (man page only)
17070 +. ie \\n(.$==0 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
17073 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17076 +.if \\n(aC>\\n(aP \{\
17078 +. ie \\n(C\\n(aP==1 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
17080 +. ie \\n(C\\n(aP>2 .y\\n(C\\n(aP
17082 +. as b1 \&\\*(xR\\*(A\\n(aP\fP\s0
17083 +. if \\n(aC>\\n(aP \{\
17085 +. if \\n(C\\n(aP==2 \{\
17086 +. as b1 \&(\\*(A\\n(aP)
17089 +. if \\n(aC>=\\n(aP \{\
17098 +.\" NS Sx macro - cross section reference
17101 +. ie \\n(.$==0 .tm Sx Usage: .Sx Section Header \\*(Pu (#\\n(.c)
17104 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17108 +.if \\n(aC>\\n(aP \{\
17116 +.\" NS cC macro - column-list end-list
17117 +.\" NS eW macro - column indent width
17118 +.\" NS cI register - column indent width
17119 +.\" NS W[1-5] macro - establish tabs for list-type column
17121 +'in \\n(.iu-\\n(o\\n(lCu-\\n(w\\n(lCu
17122 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
17129 +.ta \w
\a\\*(A1
\au
17130 +.nr eW \w
\a\\*(A1
\au
17131 +'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
17134 +.ta \w
\a\\*(A1
\au +\w
\a\\*(A2
\au
17135 +.nr eW \w
\a\\*(A1
\au+\w
\a\\*(A2
\au
17136 +'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
17139 +.ta \w
\a\\*(A1
\au +\w
\a\\*(A2
\au +\w
\a\\*(A3
\au
17140 +.nr eW \w
\a\\*(A1
\au+\w
\a\\*(A2
\au+\w
\a\\*(A3
\au
17141 +'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
17144 +.ta \w
\a\\*(A1
\au +\w
\a\\*(A2
\au +\w
\a\\*(A3
\au +\w
\a\\*(A4
\au
17145 +.nr eW \w
\a\\*(A1
\au+\w
\a\\*(A2
\au +\w
\a\\*(A3
\au +\w
\a\\*(A4
\au
17146 +'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
17149 +.ta \w
\a\\*(A1
\au +\w
\a\\*(A2
\au +\w
\a\\*(A3
\au +\w
\a\\*(A4
\au +\w
\a\\*(A5
\au
17150 +.nr eW \w
\a\\*(A1
\au +\w
\a\\*(A2
\au +\w
\a\\*(A3
\au +\w
\a\\*(A4
\au +\w
\a\\*(A5
\au
17151 +' in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
17153 +.\" This is packed abnormally close, intercol width should be an option
17155 +.ta \w
\a\\*(A1
\au +\w
\a\\*(A2
\au +\w
\a\\*(A3
\au +\w
\a\\*(A4
\au +\w
\a\\*(A5
\au +\w
\a\\*(A6
17156 +.nr eW \w
\a\\*(A1
\au +\w
\a\\*(A2
\au +\w
\a\\*(A3
\au +\w
\a\\*(A4
\au +\w
\a\\*(A5
\au +\w
\a\\*(A6
17157 +' in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
17159 +.\" NS cL macro - column items
17161 +.if \\n(w\\n(lC==0 .nr w\\n(lC \\n(eWu
17164 +' in \\n(.iu+\\n(eWu
17169 +.ie \\n(aC>=\\n(aP \{\
17170 +. if "\\*(A\\n(aP"Ta" \{\
17177 +.el .tm Usage: .It column_string [Ta [column_string ...] ] (#\\n(.c)
17179 +.\" NS Ta macro - append tab (\t)
17183 +. ie \\n(aC>=\\n(aP \{\
17184 +. if "\\*(A\\n(aP"Ta" \{\
17201 +. tm Usage: Ta must follow column entry: e.g. (#\\n(.c)
17202 +. tm .It column_string [Ta [column_string ...] ]
17206 +.\" NS Dl macro - display (one line) literal
17208 +'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
17209 +.in \\n(.iu+\\n(Dsu
17211 +. ie \\n(.$==0 \{\
17212 +. tm Usage: .Dl argument ... (#\\n(.c)
17231 +. tm Usage: .Dl not callable by other macros (#\\n(.c)
17233 +.in \\n(.iu-\\n(Dsu
17236 +.\" NS D1 macro - display (one line)
17238 +'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
17239 +.in \\n(.iu+\\n(Dsu
17241 +. ie \\n(.$==0 \{\
17242 +. tm Usage: .D1 argument ... (#\\n(.c)
17258 +. ie \\n(C\\n(aP==1 .\\*(A\\n(aP
17263 +. tm Usage: .D1 not callable by other macros (#\\n(.c)
17265 +.in \\n(.iu-\\n(Dsu
17267 +.\" NS Ex macro - DEFUNCT
17269 +.tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17272 +.\" NS Ex macro - DEFUNCT
17274 +.tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17277 +.\" NS Vt macro - Variable type (for forcing old style variable declarations)
17278 +.\" this is not done in the same manner as .Ot for fortrash - clean up later
17280 +.\" if a function declaration was the last thing given, want vertical space
17285 +.\" if a subroutine was the last thing given, want vertical space
17287 +. ie \\n(fX==0 \{\
17296 +\\*(fT\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17303 +.\" NS Ft macro - Function type
17325 +\&\\*(fT\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17331 +.\" NS Ot macro - Old Function type (fortran - no newline)
17332 +.\" Ns oT register
17353 +.if \\n(.$==4 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3 \\$4
17354 +.if \\n(.$==3 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3
17355 +.if \\n(.$==2 .as b1 \&\\*(fT\&\\$1 \\$2
17356 +.if \\n(.$==1 .as b1 \&\\*(fT\&\\$1
17360 +.\" NS Fa macro - Function arguments
17363 +. ie \\n(.$==0 .tm Usage: .Fa Function Arguments ... \\*(Pu (#\\n(.c)
17383 +. if \\n(aC>\\n(aP \{\
17395 +.\" NS fC macro - interal .Fa for .FO and .Fc
17397 +.ie \\n(aC>\\n(aP \{\
17399 +.\" . nr aa \\n(aP
17400 +.\" . if \\n(nS>0 \{\
17411 +. as b1 \&\f\\n(cF\s\\n(cZ,\\*(S\\n(aP\\*(fA\\*(A\\n(aP\fP\s0
17412 +.\" . as b1 \&\\,\\*(S\\n(aP\fP\s0\\*(fA\\*(A\\n(aP\fP\s0
17414 +. if \\n(fC==1 \{\
17415 +. as b1 \&\|\\*(fA\\*(A\\n(aP\fP\s0
17424 +.\" NS Fn macro - functions
17425 +.\" NS fY register - dick with old style function declarations (fortran)
17426 +.\" NS fZ register - break a line when more than one function in a synopsis
17430 +. ie \\n(.$==0 .tm Usage: .Fn function_name function_arg(s) ... \\*(Pu (#\\n(.c)
17447 +.\" if there is/has been more than one subroutine declaration
17448 +. if \\n(fY==0 \{\
17455 +. if \\n(fY==1 \{\
17474 +. if \\n(iS==0 \{\
17475 +. nr iS ((8)*\\n(fW)u
17482 +.if \\n(aC>\\n(aP \{\
17486 +. as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp
17487 +. ie \\n(aC>\\n(aP \{\
17502 +.\" NS f1 macro - class switch
17503 +.\" NS f2 macro - handle function arguments
17504 +.\" NS f3 macro - punctuation
17505 +.\" NS f4 macro - write out function
17507 +.as b1 \\*(rp\f\\n(cF\s\\n(cZ
17521 +.as b1 \\*(A\\n(aP
17522 +.ie \\n(aC>\\n(aP \{\
17525 +. if \\n(C\\n(aP==2 \{\
17526 +. as b1 \&\|\f\\n(cF\s\\n(cZ,\\*(S\\n(aa\fP\s0\|
17531 +. as b1 \\*(rp\f\\n(cF\s\\n(cZ
17536 +.as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(A\\n(aP
17537 +.ie \\n(aC>\\n(aP \{\
17543 +.as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(S\\n(aP\\*(A\\n(aP
17544 +.ie \\n(aC>\\n(aP \{\
17553 +. ie \\n(.$==0 .tm Usage: .Fo function_name
17570 +.\" if there is/has been more than one subroutine declaration
17571 +. if \\n(fY==0 \{\
17578 +. if \\n(fY==1 \{\
17597 +. if \\n(iS==0 \{\
17598 +. nr iS ((8)*\\n(fW)u
17605 +.if \\n(aC>\\n(aP \{\
17611 +. as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp
17635 +.ie \\n(aC>\\n(aP \{\
17647 +.\" NS fb macro - if SYNOPSIS, set hard space inbetween function args
17648 +.\" NS fb register - count of words in a function argument
17649 +.\" NS Fb register - counter
17650 +.\" NS Fb string - temporary string
17652 +.\" .tm fB==\\n(fB, Fb==\\n(Fb, 1==\\$1 2==\\$2 3==\\$3 4==\\$4 5==\\$5 6==\\$6
17660 +.if \\n(Fb<\\n(fB \{\
17662 +. fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17665 +.\" NS Fc - Function close - not implemented yet
17666 +.\" NS Fo - Function open - not implemented yet
17668 +.\" Very crude references, stash all reference info into strings (usual
17669 +.\" use of b1 buffer, then b1 contents copied to string of retrievable
17670 +.\" naming convention), print out reference on .Re request and clean up.
17671 +.\" Ordering very limited, no fancy citations, but can do articles, journals
17672 +.\" and books - need to add several missing options (like city etc).
17673 +.\" should be able to grab a refer entry, massage it a wee bit (prefix
17674 +.\" a `.' to the %[A-Z]) and not worry (ha!)
17676 +.\" NS Rs macro - Reference Start
17677 +.\" NS rS register - Reference Start flag
17678 +.\" NS rS string - Reference Start buffer name for next save (of b1 buffer)
17685 +.\" NS Re macro - Reference End
17691 +.\" NS rC macro - reference cleanup
17705 +.rm U1 U2 U3 U4 U5 U6 U7 U8
17706 +.rm uK jK nK oK rK qK tK vK dK pK bK
17708 +.\" NS rZ macro - reference print
17710 +.if \\n(uK \{\&\\*(U1,
17712 +. if (\\n(uK>1 \{\
17719 +. if \\n(Kl==0 \{\
17720 +. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q.
17722 +. el \{\&\\*(eM\\*(tK\\*(nO.
17726 +. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q,
17728 +. el \{\&\\*(eM\\*(tK\\*(nO,
17734 +. if \\n(Kl==0 \&\\*(eM\\*(bK\\*(nO.
17735 +. if \\n(Kl>0 \&\\*(eM\\*(bK\\*(nO,
17739 +. if \\n(Kl==0 \&\\*(eM\\*(jK\\*(nO.
17740 +. if \\n(Kl>0 \&\\*(eM\\*(jK\\*(nO,
17744 +. if \\n(Kl==0 \&\\*(rK.
17745 +. if \\n(Kl>0 \&\\*(rK,
17749 +. if \\n(Kl==0 \&\\*(nK.
17750 +. if \\n(Kl>0 \&\\*(nK,
17754 +. if \\n(Kl==0 \&\\*(vK.
17755 +. if \\n(Kl>0 \&\\*(vK,
17759 +. if \\n(Kl==0 \&\\*(pK.
17760 +. if \\n(Kl>0 \&\\*(pK,
17764 +. if \\n(Kl==0 \&\\*(qK.
17765 +. if \\n(Kl>0 \&\\*(qK,
17769 +. if \\n(Kl==0 \&\\*(dK.
17770 +. if \\n(Kl>0 \&\\*(dK,
17774 +. if \\n(Kl==0 \&\\*(oK.
17775 +. if \\n(Kl>0 \&\\*(oK,
17777 +.if \\n(Kl>0 .tm unresolved reference problem
17779 +.\" NS aK macro - print out reference authors
17782 +.ie (\\n(uK-\\n(aK)==0 \{\&and \\*(U\\n(aK,
17784 +.el \{\&\\*(U\\n(aK,
17788 +.\" NS %A macro - reference author(s)
17789 +.\" NS uK register - reference author(s) counter
17790 +.\" NS U[1-9] strings - reference author(s) names
17793 +. ie \\n(.$==0 .tm Usage: .%A Author_name (#\\n(.c)
17799 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17802 +.if \\n(aC>\\n(aP \{\
17809 +.\" NS %B macro - [reference] Book Name
17810 +.\" NS bK string - Book Name
17811 +.\" NS bK register - Book Name flag
17814 +. ie \\n(.$==0 .tm Usage: .%B Book Name (#\\n(.c)
17835 +.if \\n(aC>\\n(aP \{\
17839 +. ie \\n(rS==0 \{\
17846 +.\" NS %D macro - [reference] Date
17847 +.\" NS dK string - Date String
17848 +.\" NS dK register - Date flag
17851 +. ie \\n(.$==0 .tm Usage: .%D Date (#\\n(.c)
17870 +.if \\n(aC>\\n(aP \{\
17877 +.\" NS %J macro - [reference] Journal Name
17878 +.\" NS jK register - [reference] Journal Name flag
17879 +.\" NS jK string - [reference] Journal Name
17882 +. ie \\n(.$==0 .tm Usage: .%J Journal Name (#\\n(.c)
17901 +.if \\n(aC>\\n(aP \{\
17908 +.\" NS %N macro - [reference] issue number
17909 +.\" NS nK register - [reference] issue number flag
17910 +.\" NS nK string - [reference] issue number
17913 +. ie \\n(.$==0 .tm Usage: .%N issue number (#\\n(.c)
17919 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
17922 +.if \\n(aC>\\n(aP \{\
17929 +.\" NS %O macro - [reference] optional information
17930 +.\" NS oK register - [reference] optional information flag
17931 +.\" NS oK string - [reference] optional information
17934 +. ie \\n(.$==0 .tm Usage: .%O optional information ... \\*(Pu (#\\n(.c)
17953 +.if \\n(aC>\\n(aP \{\
17960 +.\" NS %P macro - [reference] page numbers
17961 +.\" NS pK register - [reference] page number flag
17962 +.\" NS pK string - [reference] page number
17965 +. ie \\n(.$==0 .tm Usage: .%P page numbers ... \\*(Pu (#\\n(.c)
17984 +.if \\n(aC>\\n(aP \{\
17991 +.\" NS %Q macro - Corporate or Foreign Author
17992 +.\" NS qK string - Corporate or Foreign Author
17993 +.\" NS qK register - Corporate or Foreign Author flag
17996 +. ie \\n(.$==0 .tm Usage: .%Q Corporate or Foreign Author (#\\n(.c)
18015 +.if \\n(aC>\\n(aP \{\
18022 +.\" NS %R macro - [reference] report name
18023 +.\" NS rK string - [reference] report name
18024 +.\" NS rK register - [reference] report flag
18027 +. ie \\n(.$==0 .tm Usage: .%R reference report (#\\n(.c)
18046 +.if \\n(aC>\\n(aP \{\
18053 +.\" NS %T macro - reference title
18054 +.\" NS tK string - reference title
18055 +.\" NS tK register - reference title flag
18058 +. ie \\n(.$==0 .tm Usage: .%T (#\\n(.c)
18079 +.if \\n(aC>\\n(aP \{\
18080 +.\" . ie \\n(jS==1 \{\
18081 +.\" . nr cF \\n(.f
18082 +.\" . nr cZ \\n(.s
18083 +.\" . ds qL \&\\*(Lq\\*(rA
18084 +.\" . ds qR \&\\*(Rq\f\\n(cF\s\\n(cZ
18085 +.\" . En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
18091 +. ie \\n(rS==0 \{\
18099 +.\" NS %V macro - reference volume
18100 +.\" NS vK string - reference volume
18101 +.\" NS vK register - reference volume flag
18104 +. ie \\n(.$==0 .tm Usage: .%V Volume , ... \\*(Pu (#\\n(.c)
18110 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
18113 +.if \\n(aC>\\n(aP \{\
18120 +.\" NS rR macro - reference recursion routine
18121 +.\" NS jM local register
18122 +.\" NS jN local register
18125 +.nr jM \\n(C\\n(aP
18127 +.\" . as b1 \&\f\\n(cF\s\\n(cZ
18128 +. ie "\\*(A\\n(aP"Tn" \{\
18132 +. if \\n(aC>8 .tm Usage: \\*(mN - maximum 8 arguments (#\\n(.c)
18139 +. ie \\n(jM==2 .as b1 \&\\*(A\\n(aP
18140 +. el .as b1 \&\\*(A\\n(aP
18141 +.\" . el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
18142 +. ie \\n(aC==\\n(aP \{\
18143 +.\" . as b1 \&\f\\n(cF\s\\n(cZ
18148 +. as b1 \&\\*(S\\n(jN
18154 +.\" NS rD macro - save b1 buffer in to appropriate name
18161 +.\" NS Hf macro - source include header files.
18172 +.ta +9n 18n 27n 36n 45n 54n 63n 72n
18175 +.ta +8n 16n 24n 32n 40n 48n 56n 64n 72n
18184 +.\" NS An macro - author name
18185 +.\" NS aN register
18189 +. ie \\n(aN==1 \{\
18197 +. ie \\n(.$==0 .tm Usage: .An author_name ... \\*(Pu (#\\n(.c)
18200 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
18203 +.if \\n(aC>\\n(aP \{\
18210 +.\" NS Sf macro -defunct
18212 +.tm .Sf defunct, use prefix or Ns
18214 +.ds rV "function returns the value 0 if successful; otherwise the value -1 is returned and the global variable \\*(vAerrno\fP is set to indicate the error.
18215 +.\" Ns Rv macro - return values
18216 +.\" Ns rV string - standard return message
18219 +.tm Usage: .Rv [-std] (#\\n(.c)
18224 +.\" . nr lR \\n(lR+1
18233 +.\" . nr fV \\n(.$-1
18234 +. if "\\$1"-std" \{\
18236 +. if (\\n(cH<2):(\\n(cH>3) .tm Usage: .Rv -std sections 2 and 3 only
18244 --- groff-1.18.1.1.orig/tmac/Makefile.sub
18245 +++ groff-1.18.1.1/tmac/Makefile.sub
18246 @@ -25,15 +25,19 @@
18247 html.tmac www.tmac \
18249 troffrc troffrc-end \
18254 + gb.tmac big5.tmac
18255 SPECIALFILES=an.tmac man.tmac s.tmac ms.tmac
18256 -STRIPFILES=e.tmac doc.tmac doc-old.tmac
18257 -MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms
18258 +STRIPFILES=e.tmac doc.tmac doc-old.tmac docj.tmac
18259 +MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms docj-ditroff docj-nroff
18260 mdocdir=$(tmacdir)/mdoc
18262 stamp-wrap stamp-sed *-wrap man.tmac-sed ms.tmac-sed \
18263 stamp-strip e.tmac-s doc.tmac-s doc-old.tmac-s \
18264 - doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s
18265 + doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s \
18266 + docj.tmac-s docj-ditroff-s docj-nroff-s
18270 --- groff-1.18.1.1.orig/tmac/euc-jp.tmac
18271 +++ groff-1.18.1.1/tmac/euc-jp.tmac
18276 +.cflags 256 ¡¢¡£¡¤¡¥¡¦¡§¡¨¡©¡ª¡Ë¡Í¡Ï¡Ñ¡×¡Ù¡Û¤¡¤£¤¥¤§¤©¤Ã¤ã¤å¤ç¡¼
18277 +.cflags 256 ¥¡¥£¥¥¥§¥©¥Ã¥ã¥å¥ç
18278 +.cflags 512 ¡Ê¡Ì¡Î¡Ð¡Ö¡Ø¡Ú
18280 --- groff-1.18.1.1.orig/tmac/big5.tmac
18281 +++ groff-1.18.1.1/tmac/big5.tmac
18283 +.\" Kinsoku table for the BIG5 encoding of Chinese, recoded from
18284 +.\" kinsoku.el in Emacs 22.0.50.
18285 +.\" Needs review by native zh_TW speaker.
18287 +.cflags 256 ¡B¡C¡A¡D¡G¡F¡H¡I¡Ã¡Ä
18288 +.cflags 256 ¡²Éi¡X¡þ¡U¡L¡¦¡¨¡^
18289 +.cflags 256 ¡f¡b¡r¡n¡v¡z¡j¡Ñ¡×¡Õ¡Ø¡Û¡ñ¢X
18290 +.cflags 256 ¡½¡µ¡¶¡¾¡¿¡°¢E¡÷¡ö¡ô¡ã
18291 +.cflags 512 ¡Ö¡Ù¡ï¡ð¢X¢C¡ì
18292 +.cflags 512 ÛÖ¶yÅV¡D¡¶¡ù£H¢}
18294 +.\" http://tcl.apache.org/sources/tcl/tools/encoding/big5.txt lists U+FF0D
18295 +.\" as FULLWIDTH HYPHEN-MINUS. Is this correct?
18298 --- groff-1.18.1.1.orig/tmac/andocj.tmac
18299 +++ groff-1.18.1.1/tmac/andocj.tmac
18301 +.\" Load either tmac.an or tmac.doc.
18302 +.if !\n(.g .ab These macros require groff.
18313 --- groff-1.18.1.1.orig/aclocal.m4
18314 +++ groff-1.18.1.1/aclocal.m4
18315 @@ -356,6 +356,19 @@
18316 AC_MSG_RESULT(no);AC_MSG_ERROR([header files do not support C++ (if you are using a version of gcc/g++ earlier than 2.5, you should install libg++)]))
18317 AC_LANG_POP(C++)])dnl
18319 +dnl Support Multibyte characters, such as Japanese Code (EUC-JP)
18321 +AC_DEFUN(GROFF_MULTIBYTE,
18322 +[AC_MSG_CHECKING([whether to enable multibyte extension])
18323 +AC_ARG_ENABLE(multibyte, [ --enable-multibyte Enable multibyte extension],
18324 + multibyte=$enableval, multibyte=no)
18325 +if test "x$multibyte" != "xno"; then
18326 + AC_DEFINE(ENABLE_MULTIBYTE, 1,
18327 + [Define if you want to use multibyte extension.])
18329 +AC_MSG_RESULT([$multibyte])
18333 AC_DEFUN(GROFF_TMAC,
18334 [AC_MSG_CHECKING([for prefix of system macro packages])
18335 @@ -415,6 +428,33 @@
18336 AC_MSG_RESULT([$tmac_wrap])
18337 AC_SUBST(tmac_wrap)])dnl
18339 +dnl codeset.m4 from gettext, by Bruno Haible.
18341 +AC_DEFUN(GROFF_LANGINFO_CODESET,
18342 +[AC_CACHE_CHECK([for nl_langinfo and CODESET], groff_cv_langinfo_codeset,
18343 + [AC_TRY_LINK([#include <langinfo.h>],
18344 + [char* cs = nl_langinfo(CODESET);],
18345 + groff_cv_langinfo_codeset=yes,
18346 + groff_cv_langinfo_codeset=no)
18348 + if test $groff_cv_langinfo_codeset = yes; then
18349 + AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
18350 + [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
18355 +AC_DEFUN(GROFF_DVIFORMAT,
18356 +[AC_MSG_CHECKING([japanese dvi file format])
18357 +if test "x$dvi_format" != "xASCII"; then
18362 +AC_MSG_RESULT([$DVIFORMAT])
18363 +AC_SUBST(DVIFORMAT)
18368 [AC_MSG_CHECKING([for existing troff installation])
18369 @@ -481,7 +521,7 @@
18370 AC_DEFINE(IS_EBCDIC_HOST, 1,
18371 [Define if the host's encoding is EBCDIC.]),
18372 groff_cv_ebcdic="no"
18373 - TTYDEVDIRS="font/devascii font/devlatin1"
18374 + TTYDEVDIRS="font/devascii font/devlatin1 font/devascii8 font/devnippon"
18375 OTHERDEVDIRS="font/devlj4 font/devlbp"
18377 AC_SUBST(TTYDEVDIRS)
18378 --- groff-1.18.1.1.orig/configure.ac
18379 +++ groff-1.18.1.1/configure.ac
18383 GROFF_HTML_PROGRAMS
18386 +GROFF_LANGINFO_CODESET
18387 AC_CONFIG_FILES(stamp-h, [echo timestamp > stamp-h])
18388 AC_CONFIG_FILES([Makefile doc/Makefile src/xditview/Imakefile])
18390 --- groff-1.18.1.1.orig/stamp-h
18391 +++ groff-1.18.1.1/stamp-h
18394 --- groff-1.18.1.1.orig/contrib/pic2graph/pic2graph.sh
18395 +++ groff-1.18.1.1/contrib/pic2graph/pic2graph.sh
18397 # We don't have complete option coverage on eqn because this is primarily
18398 # intended as a pic translator; we can live with eqn defaults.
18400 -# $Id: pic2graph.sh,v 1.2 2002/07/17 04:55:46 wlemb Exp $
18401 +# $Id: pic2graph.sh,v 1.5 2003/10/31 19:32:36 wlemb Exp $
18409 - groffpic_opts="-U"
18410 + groffpic_opts="-U";;
18414 @@ -68,16 +68,34 @@
18415 eqndelim="delim $eqndelim"
18418 +# create temporary directory
18420 +for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
18421 + test -z "$d" && continue
18423 + tmp=`(umask 077 && mktemp -d -q "$d/pic2graph-XXXXXX") 2> /dev/null` \
18424 + && test -n "$tmp" && test -d "$tmp" \
18427 + tmp=$d/pic2graph$$-$RANDOM
18428 + (umask 077 && mkdir $tmp) 2> /dev/null \
18431 +if test -z "$tmp"; then
18432 + echo "$0: cannot create temporary directory" >&2
18433 + { (exit 1); exit 1; }
18436 +trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
18439 # 1. Wrap the input in dummy .PS/PE macros (and add possibly null .EQ/.EN)
18440 # 2. Process through eqn and pic to emit troff markup.
18441 # 3. Process through groff to emit Postscript.
18442 # 4. Use convert(1) to crop the PostScript and turn it into a bitmap.
18443 -tmp=/usr/tmp/pic2graph-$$
18444 -trap "rm ${tmp}.*" 0 2 15
18445 (echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") | \
18446 - groff -e -p $groffpic_opts -Tps >${tmp}.ps \
18447 - && convert -crop 0x0 $convert_opts ${tmp}.ps ${tmp}.${format} \
18448 - && cat ${tmp}.${format}
18449 + groff -e -p $groffpic_opts -Tps -P-pletter > $tmp/pic2graph.ps \
18450 + && convert -crop 0x0 $convert_opts $tmp/pic2graph.ps $tmp/pic2graph.$format \
18451 + && cat $tmp/pic2graph.$format
18454 --- groff-1.18.1.1.orig/contrib/mom/groff_mom.man
18455 +++ groff-1.18.1.1/contrib/mom/groff_mom.man
18457 A copy of the Free Documentation License is included as a file called
18458 FDL in the main directory of the groff source package.
18461 +A copy of the GNU Free Documentation License is also available in this
18462 +Debian package as /usr/share/doc/groff/copyright.
18467 --- groff-1.18.1.1.orig/contrib/groffer/groffer.sh
18468 +++ groff-1.18.1.1/contrib/groffer/groffer.sh
18469 @@ -3228,17 +3228,12 @@
18471 if is_not_empty "$d"; then
18472 if obj d is_dir && obj d is_writable; then
18473 - _TMP_DIR="${d}/${_PROGRAM_NAME}${_PROCESS_ID}";
18474 - if obj _TMP_DIR is_dir; then
18475 - rm -f "${_TMP_DIR}"/*;
18476 + _TMP_DIR="$(mktemp -d "${d}/${_PROGRAM_NAME}.XXXXXX")"
18477 + if test $? = 0; then
18480 - mkdir "${_TMP_DIR}";
18481 - if obj _TMP_DIR is_not_dir; then
18490 if obj _TMP_DIR is_not_writable; then
18491 --- groff-1.18.1.1.orig/contrib/eqn2graph/eqn2graph.sh
18492 +++ groff-1.18.1.1/contrib/eqn2graph/eqn2graph.sh
18495 # Thus, we pass -U to groff(1), and everything else to convert(1).
18497 -# $Id: eqn2graph.sh,v 1.2 2002/07/17 04:55:46 wlemb Exp $
18498 +# $Id: eqn2graph.sh,v 1.3 2003/10/28 07:46:23 wlemb Exp $
18502 @@ -58,17 +58,34 @@
18506 +# create temporary directory
18508 +for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
18509 + test -z "$d" && continue
18511 + tmp=`(umask 077 && mktemp -d -q "$d/eqn2graph-XXXXXX") 2> /dev/null` \
18512 + && test -n "$tmp" && test -d "$tmp" \
18515 + tmp=$d/eqn2graph$$-$RANDOM
18516 + (umask 077 && mkdir $tmp) 2> /dev/null && break
18518 +if test -z "$tmp"; then
18519 + echo "$0: cannot create temporary directory" >&2
18520 + { (exit 1); exit 1; }
18523 +trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
18527 # 2. Process through eqn(1) to emit troff markup.
18528 # 3. Process through groff(1) to emit Postscript.
18529 # 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
18530 -tmp=/usr/tmp/eqn2graph-$$
18531 -trap "rm ${tmp}.*" 0 2 15
18533 -(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"${equation}"'$') | \
18534 - groff -e $groff_opts -Tps >${tmp}.ps \
18535 - && convert -crop 0x0 $convert_opts ${tmp}.ps ${tmp}.${format} \
18536 - && cat ${tmp}.${format}
18537 +(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"$equation"'$') | \
18538 + groff -e $groff_opts -Tps -P-pletter > $tmp/eqn2graph.ps \
18539 + && convert -crop 0x0 $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \
18540 + && cat $tmp/eqn2graph.$format
18543 --- groff-1.18.1.1.orig/configure
18544 +++ groff-1.18.1.1/configure
18545 @@ -305,7 +305,7 @@
18546 # include <unistd.h>
18549 -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS groff_top_builddir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX TTYDEVDIRS OTHERDEVDIRS LPR LP LPQ PSPRINT DVIPRINT PERLPATH YACC RANLIB ac_ct_RANLIB INSTALL_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S SH_SCRIPT_SED_CMD CPP EGREP LIBM LIBOBJS BROKEN_SPOOLER_FLAGS PAGE g sys_tmac_prefix tmac_wrap pnmcut pnmcrop pnmtopng gs psselect make_html make_install_html LTLIBOBJS'
18550 +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS groff_top_builddir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX TTYDEVDIRS OTHERDEVDIRS LPR LP LPQ PSPRINT DVIPRINT PERLPATH YACC RANLIB ac_ct_RANLIB INSTALL_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S SH_SCRIPT_SED_CMD CPP EGREP LIBM LIBOBJS BROKEN_SPOOLER_FLAGS PAGE g sys_tmac_prefix tmac_wrap pnmcut pnmcrop pnmtopng gs psselect make_html make_install_html DVIFORMAT LTLIBOBJS'
18553 # Initialize some variables set by options.
18554 @@ -841,6 +841,11 @@
18558 +Optional Features:
18559 + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
18560 + --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
18561 + --enable-multibyte Enable multibyte extension
18563 Some influential environment variables:
18564 CC C compiler command
18565 CFLAGS C compiler flags
18566 @@ -2530,7 +2535,7 @@
18567 echo "$as_me: failed program was:" >&5
18568 cat conftest.$ac_ext >&5
18569 groff_cv_ebcdic="no"
18570 - TTYDEVDIRS="font/devascii font/devlatin1"
18571 + TTYDEVDIRS="font/devascii font/devlatin1 font/devascii8 font/devnippon"
18572 OTHERDEVDIRS="font/devlj4 font/devlbp"
18573 echo "$as_me:$LINENO: result: no" >&5
18574 echo "${ECHO_T}no" >&6
18575 @@ -5859,6 +5864,84 @@
18579 +echo "$as_me:$LINENO: checking whether to enable multibyte extension" >&5
18580 +echo $ECHO_N "checking whether to enable multibyte extension... $ECHO_C" >&6
18581 +# Check whether --enable-multibyte or --disable-multibyte was given.
18582 +if test "${enable_multibyte+set}" = set; then
18583 + enableval="$enable_multibyte"
18584 + multibyte=$enableval
18588 +if test "x$multibyte" != "xno"; then
18590 +cat >>confdefs.h <<\_ACEOF
18591 +#define ENABLE_MULTIBYTE 1
18595 +echo "$as_me:$LINENO: result: $multibyte" >&5
18596 +echo "${ECHO_T}$multibyte" >&6
18598 +echo "$as_me:$LINENO: checking japanese dvi file format" >&5
18599 +echo $ECHO_N "checking japanese dvi file format... $ECHO_C" >&6
18600 +if test "x$dvi_format" != "xASCII"; then
18605 +echo "$as_me:$LINENO: result: $DVIFORMAT" >&5
18606 +echo "${ECHO_T}$DVIFORMAT" >&6
18609 +echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
18610 +echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
18611 +if test "${groff_cv_langinfo_codeset+set}" = set; then
18612 + echo $ECHO_N "(cached) $ECHO_C" >&6
18614 + cat >conftest.$ac_ext <<_ACEOF
18615 +#line $LINENO "configure"
18616 +#include "confdefs.h"
18617 +#include <langinfo.h>
18621 +char* cs = nl_langinfo(CODESET);
18626 +rm -f conftest.$ac_objext conftest$ac_exeext
18627 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18628 + (eval $ac_link) 2>&5
18630 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
18631 + (exit $ac_status); } &&
18632 + { ac_try='test -s conftest$ac_exeext'
18633 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18634 + (eval $ac_try) 2>&5
18636 + echo "$as_me:$LINENO: \$? = $ac_status" >&5
18637 + (exit $ac_status); }; }; then
18638 + groff_cv_langinfo_codeset=yes
18640 + echo "$as_me: failed program was:" >&5
18641 +cat conftest.$ac_ext >&5
18642 +groff_cv_langinfo_codeset=no
18644 +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
18647 +echo "$as_me:$LINENO: result: $groff_cv_langinfo_codeset" >&5
18648 +echo "${ECHO_T}$groff_cv_langinfo_codeset" >&6
18649 + if test $groff_cv_langinfo_codeset = yes; then
18651 +cat >>confdefs.h <<\_ACEOF
18652 +#define HAVE_LANGINFO_CODESET 1
18657 ac_config_files="$ac_config_files stamp-h"
18659 ac_config_files="$ac_config_files Makefile doc/Makefile src/xditview/Imakefile"
18660 @@ -6497,6 +6580,7 @@
18661 s,@psselect@,$psselect,;t t
18662 s,@make_html@,$make_html,;t t
18663 s,@make_install_html@,$make_install_html,;t t
18664 +s,@DVIFORMAT@,$DVIFORMAT,;t t
18665 s,@LTLIBOBJS@,$LTLIBOBJS,;t t
18668 --- groff-1.18.1.1.orig/Makefile.in
18669 +++ groff-1.18.1.1/Makefile.in
18670 @@ -136,7 +136,11 @@
18671 # directory will be always added.
18672 # `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
18673 # current nor in the home directory.
18674 +ifeq (,$(extratmacdirs))
18675 tmacpath=$(systemtmacdir):$(localtmacdir):$(tmacdir)
18677 +tmacpath=$(systemtmacdir):$(localtmacdir):$(tmacdir):$(extratmacdirs)
18680 # `sys_tmac_prefix' is prefix (if any) for system macro packages.
18681 sys_tmac_prefix=@sys_tmac_prefix@
18682 @@ -195,6 +199,9 @@
18684 man7dir=$(manroot)/man$(man7ext)
18686 +# DVI file format.
18687 +DVIFORMAT=@DVIFORMAT@
18689 # The configure script checks whether all necessary utility programs for
18690 # grohtml are available -- only then we can build the HTML documentation.
18691 make_html=@make_html@
18692 @@ -261,6 +268,8 @@
18693 # -DRETSIGTYPE=int if signal handlers return int not void
18694 # -DIS_EBCDIC_HOST if the host's encoding is EBCDIC
18695 # -DPAGEA4 if the the printer's page size is A4
18696 +# -DENABLE_MULTIBYTE enable multibyte extension
18697 +# -DHAVE_LANGINFO_CODESET if you have nl_langinfo(CODESET)
18701 @@ -395,7 +404,8 @@
18702 "PERLPATH=$(PERLPATH)" \
18703 "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
18704 "PURIFY=$(PURIFY)" \
18705 - "PURIFYCCFLAGS=$(PURIFYCCFLAGS)"
18706 + "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" \
18707 + "DVIFORMAT=$(DVIFORMAT)"
18710 INCDIRS=src/include
18711 @@ -437,8 +447,10 @@
18722 @@ -483,7 +495,7 @@
18726 -dodirs=$(ALLDIRS) dot
18727 +dodirs=$(DISTDIRS)
18728 # Default target for subdir_Makefile
18729 subdir=src/roff/troff
18731 --- groff-1.18.1.1.orig/TODO.jp
18732 +++ groff-1.18.1.1/TODO.jp
18741 + G,M -- NTT and/or ASCII
18749 +- command line option to specify input/output encoding
18751 + can we assume wchar code == font code?
18752 + [to simplify indexing]
18753 --- groff-1.18.1.1.orig/mdate.sh
18754 +++ groff-1.18.1.1/mdate.sh
18757 # Print the modification date of $1 `nicely'.
18759 -# Don't want foreign dates.
18762 -LC_ALL=C; export LC_ALL
18766 -if ls -L /dev/null 1>/dev/null 2>&1; then ls -L -l $1; else ls -l $1; fi
18769 - full["Jan"] = "January"; number["Jan"] = 1;
18770 - full["Feb"] = "February"; number["Feb"] = 2;
18771 - full["Mar"] = "March"; number["Mar"] = 3;
18772 - full["Apr"] = "April"; number["Apr"] = 4;
18773 - full["May"] = "May"; number["May"] = 5;
18774 - full["Jun"] = "June"; number["Jun"] = 6;
18775 - full["Jul"] = "July"; number["Jul"] = 7;
18776 - full["Aug"] = "August"; number["Aug"] = 8;
18777 - full["Sep"] = "September"; number["Sep"] = 9;
18778 - full["Oct"] = "October"; number["Oct"] = 10;
18779 - full["Nov"] = "November"; number["Nov"] = 11;
18780 - full["Dec"] = "December"; number["Dec"] = 12;
18789 - if ($(NF-1) ~ /:/) {
18790 - if (number[$(NF-3)] > number[month])
18795 - print $(NF-2), full[$(NF-3)], year
18797 +perl -MPOSIX -le 'print strftime("%d %B %Y", localtime((stat $ARGV[0])[9]))' $1
18798 --- groff-1.18.1.1.orig/man/groff_out.man
18799 +++ groff-1.18.1.1/man/groff_out.man
18801 A copy of the Free Documentation License is included as a file called
18802 FDL in the main directory of the groff source package.
18805 +A copy of the GNU Free Documentation License is also available in this
18806 +Debian package as /usr/share/doc/groff/copyright.
18809 .\" --------------------------------------------------------------------
18811 --- groff-1.18.1.1.orig/man/groff_char.man
18812 +++ groff-1.18.1.1/man/groff_char.man
18814 A copy of the Free Documentation License is included as a file called
18815 FDL in the main directory of the groff source package.
18818 +A copy of the GNU Free Documentation License is also available in this
18819 +Debian package as /usr/share/doc/groff/copyright.
18822 .\" --------------------------------------------------------------------
18824 --- groff-1.18.1.1.orig/man/groff_tmac.man
18825 +++ groff-1.18.1.1/man/groff_tmac.man
18827 A copy of the Free Documentation License is included as a file called
18828 FDL in the main directory of the groff source package.
18831 +A copy of the GNU Free Documentation License is also available in this
18832 +Debian package as /usr/share/doc/groff/copyright.
18835 .\" --------------------------------------------------------------------
18837 --- groff-1.18.1.1.orig/man/roff.man
18838 +++ groff-1.18.1.1/man/roff.man
18840 A copy of the Free Documentation License is included as a file called
18841 FDL in the main directory of the groff source package.
18844 +A copy of the GNU Free Documentation License is also available in this
18845 +Debian package as /usr/share/doc/groff/copyright.
18848 .\" --------------------------------------------------------------------
18850 --- groff-1.18.1.1.orig/man/ditroff.man
18851 +++ groff-1.18.1.1/man/ditroff.man
18853 A copy of the Free Documentation License is included as a file called
18854 FDL in the main directory of the groff source package.
18857 +A copy of the GNU Free Documentation License is also available in this
18858 +Debian package as /usr/share/doc/groff/copyright.
18861 .\" --------------------------------------------------------------------
18863 --- groff-1.18.1.1.orig/man/groff_diff.man
18864 +++ groff-1.18.1.1/man/groff_diff.man
18866 A copy of the Free Documentation License is included as a file called
18867 FDL in the main directory of the groff source package.
18870 +A copy of the GNU Free Documentation License is also available in this
18871 +Debian package as /usr/share/doc/groff/copyright.
18874 .\" --------------------------------------------------------------------
18876 --- groff-1.18.1.1.orig/man/groff.man
18877 +++ groff-1.18.1.1/man/groff.man
18879 A copy of the Free Documentation License is included as a file called
18880 FDL in the main directory of the groff source package.
18883 +A copy of the GNU Free Documentation License is also available in this
18884 +Debian package as /usr/share/doc/groff/copyright.
18887 .\" --------------------------------------------------------------------