diff options
author | cvsdist <cvsdist@fedoraproject.org> | 2004-09-09 05:56:32 +0000 |
---|---|---|
committer | cvsdist <cvsdist@fedoraproject.org> | 2004-09-09 05:56:32 +0000 |
commit | 3568b1c0e2fe653f6724f5baa68bf83a83619bdc (patch) | |
tree | 30f41e37aec16a03b566a61b476091ddced4d919 | |
parent | 752cb86f68b14441db677afc47a740ade8cd5074 (diff) | |
download | groff-3568b1c0e2fe653f6724f5baa68bf83a83619bdc.tar.gz groff-3568b1c0e2fe653f6724f5baa68bf83a83619bdc.tar.xz groff-3568b1c0e2fe653f6724f5baa68bf83a83619bdc.zip |
auto-import changelog data from groff-1.18.1-34.src.rpmgroff-1_18_1-34
Mon Mar 08 2004 Thomas Woerner <twoerner@redhat.com> 1.18.1-34
- new debian groff patch: groff_1.18.1-15.diff
- new fix for debian patch: groff-1.18.1-fix15.patch
- fixed width in devutf8 font M: groff-1.18.1-devutf8.patch
- removed iconv patch
Mon Mar 01 2004 Thomas Woerner <twoerner@redhat.com> 1.18.1-33
- fixed nroff script: convert output to locale charmap
Wed Feb 25 2004 Thomas Woerner <twoerner@redhat.com> 1.18.1-32
- fixed nroff script input (#116596)
Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
Mon Feb 09 2004 Adrian Havill <havill@redhat.com>
- provide I18N version of nroff that accepts --legacy parameter (used by
man-1.5m2-2)
Thu Dec 18 2003 Thomas Woerner <twoerner@redhat.com>
- fixed missing BuildRequires (#110574)
-rw-r--r-- | groff-1.18.1-devutf8.patch | 32 | ||||
-rw-r--r-- | groff-1.18.1-fix15.patch | 27 | ||||
-rw-r--r-- | groff.spec | 41 | ||||
-rw-r--r-- | groff_1.18.1-15.diff | 20101 | ||||
-rw-r--r-- | nroff | 73 |
5 files changed, 20257 insertions, 17 deletions
diff --git a/groff-1.18.1-devutf8.patch b/groff-1.18.1-devutf8.patch index b957f2a..d0109cf 100644 --- a/groff-1.18.1-devutf8.patch +++ b/groff-1.18.1-devutf8.patch @@ -1,14 +1,17 @@ ---- groff-1.18.1/font/devutf8/M.proto.new_utf8 2003-08-06 13:49:19.000000000 +0200 -+++ groff-1.18.1/font/devutf8/M.proto 2003-08-06 13:54:51.000000000 +0200 -@@ -2,5 +2,4 @@ +--- groff-1.18.1/font/devutf8/M.proto.devutf8 2004-03-08 16:25:52.000000000 +0100 ++++ groff-1.18.1/font/devutf8/M.proto 2004-03-08 17:02:40.265336984 +0100 +@@ -1,6 +1,6 @@ + name M internalname 4 - spacewidth 48 +-spacewidth 48 ++spacewidth 24 charset -u2E00..u9FFF 48 0 -uFF00..uFFEF 48 0 -+u0100..uFFFF 48 0 ---- groff-1.18.1/font/devutf8/DESC.proto.new_utf8 2003-08-06 13:49:19.000000000 +0200 -+++ groff-1.18.1/font/devutf8/DESC.proto 2003-08-06 13:53:20.000000000 +0200 ++u0100..u07FF 24 0 ++u0800..uFFFF 48 0 +--- groff-1.18.1/font/devutf8/DESC.proto.devutf8 2004-03-08 16:25:52.000000000 +0100 ++++ groff-1.18.1/font/devutf8/DESC.proto 2004-03-08 16:25:53.000000000 +0100 @@ -3,10 +3,7 @@ vert 40 unitwidth 10 @@ -22,3 +25,18 @@ +fontset - M 0100..FFFF tcommand postpro grotty +--- groff-1.18.1/font/devutf8/Makefile.sub.devutf8 2004-03-08 16:25:52.000000000 +0100 ++++ groff-1.18.1/font/devutf8/Makefile.sub 2004-03-08 17:03:58.858389024 +0100 +@@ -25,11 +25,7 @@ + M: M.proto + @echo Making M + @-rm -f M +- (wcharwidth=`expr $(RES) / $(CPI) \* 2` ; \ +- spacewidth=`expr $(RES) / $(CPI)` ; \ +- sed -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \ +- -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \ +- $(srcdir)/M.proto > $@) ++ @cp M.proto M + + G: M + @echo Making G diff --git a/groff-1.18.1-fix15.patch b/groff-1.18.1-fix15.patch new file mode 100644 index 0000000..5a9fa64 --- /dev/null +++ b/groff-1.18.1-fix15.patch @@ -0,0 +1,27 @@ +--- groff-1.18.1/src/libs/libgroff/encoding.cc.fix15 2004-03-08 16:13:15.825000416 +0100 ++++ groff-1.18.1/src/libs/libgroff/encoding.cc 2004-03-08 16:14:41.451983136 +0100 +@@ -384,21 +384,10 @@ + } + /* otherwise */ + #if HAVE_LANGINFO_CODESET +- charset = nl_langinfo(CODESET); +-#else +- charset = strchr(locale, '.'); +- if (charset) +- ++charset; +- else +- charset = ""; ++ locale = nl_langinfo(CODESET); + #endif +- if (strncmp(locale, "ja", 2) == 0) { +- select_input_encoding_handler(charset); +- select_output_encoding_handler(charset); +- } else if ((!device || strcmp(device, "ascii8") == 0)) { +- select_input_encoding_handler(NULL); +- select_output_encoding_handler(NULL); +- } ++ select_input_encoding_handler(locale); ++ select_output_encoding_handler(locale); + #endif + return; + } @@ -3,35 +3,34 @@ Summary: A document formatting system. Name: groff Version: 1.18.1 -Release: 29 -Copyright: GPL +Release: 34 +License: GPL Group: Applications/Publishing Source0: ftp://ftp.gnu.org/gnu/groff/groff-%{version}.tar.gz -# Japanese sources Source3: mandocj.tar.gz Source4: man-pages-ja-GNU_groff-20000115.tar.gz Source6: hyphen.cs +Source7: nroff Patch1: groff-1.16-safer.patch -Patch3: groff_1.18.1-9.patch +Patch3: groff_1.18.1-15.diff Patch4: groff-1.18-info.patch Patch5: groff-1.18-nohtml.patch Patch6: groff-1.18-pfbtops_cpp.patch Patch7: groff-1.18-gzip.patch -Patch8: groff-1.18.1-multichar.patch Patch9: groff-1.18.1-fixminus.patch -Patch10: groff-1.18.1-iconv.patch Patch11: groff-1.18.1-8bit.patch Patch12: groff-1.18.1-korean.patch Patch13: groff-1.18.1-gzext.patch Patch14: groff-xlibs.patch -Patch15: groff-1.18.1-fix9.patch +Patch15: groff-1.18.1-fix15.patch Patch16: groff-1.18.1-devutf8.patch URL: ftp://ftp.gnu.org/gnu/groff/ Requires: mktemp Prereq: /sbin/install-info Buildroot: %{_tmppath}/%{name}-root Obsoletes: groff-tools -BuildRequires: netpbm-progs, zlib-devel +Provides: nroff-i18n +BuildRequires: netpbm-progs, zlib-devel, XFree86-devel, texinfo %description Groff is a document formatting system. Groff takes standard text and @@ -74,9 +73,7 @@ System display. %patch5 -p1 %patch6 -p1 %patch7 -p1 -#%patch8 -p1 %patch9 -p1 -%patch10 -p1 %patch11 -p1 %patch12 -p1 %patch13 -p1 -b .gzext @@ -146,6 +143,8 @@ find ${RPM_BUILD_ROOT}%{_prefix}/bin ${RPM_BUILD_ROOT}%{_mandir} -type f -o -typ install -m 644 %SOURCE6 $RPM_BUILD_ROOT/usr/share/groff/%version/tmac/hyphen.cs +install -m 755 %SOURCE7 $RPM_BUILD_ROOT/usr/bin/nroff + ln -sf doc.tmac $RPM_BUILD_ROOT/usr/share/groff/%version/tmac/docj.tmac # installed, but not packaged in rpm rm -fr $RPM_BUILD_ROOT/usr/share/doc/groff $RPM_BUILD_ROOT%{_infodir}/dir @@ -186,6 +185,28 @@ fi %endif %changelog +* Mon Mar 8 2004 Thomas Woerner <twoerner@redhat.com> 1.18.1-34 +- new debian groff patch: groff_1.18.1-15.diff +- new fix for debian patch: groff-1.18.1-fix15.patch +- fixed width in devutf8 font M: groff-1.18.1-devutf8.patch +- removed iconv patch + +* Mon Mar 1 2004 Thomas Woerner <twoerner@redhat.com> 1.18.1-33 +- fixed nroff script: convert output to locale charmap + +* Wed Feb 25 2004 Thomas Woerner <twoerner@redhat.com> 1.18.1-32 +- fixed nroff script input (#116596) + +* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com> +- rebuilt + +* Mon Feb 09 2004 Adrian Havill <havill@redhat.com> +- provide I18N version of nroff that accepts --legacy parameter + (used by man-1.5m2-2) + +* Thu Dec 18 2003 Thomas Woerner <twoerner@redhat.com> +- fixed missing BuildRequires (#110574) + * Tue Sep 23 2003 Florian La Roche <Florian.LaRoche@redhat.de> - allow compiling this without XFree86 diff --git a/groff_1.18.1-15.diff b/groff_1.18.1-15.diff new file mode 100644 index 0000000..fef5c2a --- /dev/null +++ b/groff_1.18.1-15.diff @@ -0,0 +1,20101 @@ +--- groff-1.18.1.orig/src/include/config.hin ++++ groff-1.18.1/src/include/config.hin +@@ -1,84 +1,96 @@ +-/* src/include/config.hin. Generated automatically from configure.ac by autoheader. */ ++/* src/include/config.hin. Generated from configure.ac by autoheader. */ + + /* Define if your C++ doesn't understand `delete []'. */ + #undef ARRAY_DELETE_NEEDS_SIZE + ++/* Define if you want to use multibyte extension. */ ++#undef ENABLE_MULTIBYTE ++ + /* Define if you have a C++ <limits.h>. */ + #undef HAVE_CC_LIMITS_H + + /* Define if you have a C++ <osfcn.h>. */ + #undef HAVE_CC_OSFCN_H + +-/* Define if you have the <dirent.h> header file. */ ++/* Define to 1 if you have the <dirent.h> header file. */ + #undef HAVE_DIRENT_H + +-/* Define if you have the `fmod' function. */ ++/* Define to 1 if you have the `fmod' function. */ + #undef HAVE_FMOD + +-/* Define if you have the `getcwd' function. */ ++/* Define to 1 if you have the `getcwd' function. */ + #undef HAVE_GETCWD + +-/* Define if you have the `getpagesize' function. */ ++/* Define to 1 if you have the `getpagesize' function. */ + #undef HAVE_GETPAGESIZE + +-/* Define if you have the `gettimeofday' function. */ ++/* Define to 1 if you have the `gettimeofday' function. */ + #undef HAVE_GETTIMEOFDAY + +-/* Define if you have the <limits.h> header file. */ ++/* Define to 1 if you have the <inttypes.h> header file. */ ++#undef HAVE_INTTYPES_H ++ ++/* Define to 1 if you have the `isatty' function. */ ++#undef HAVE_ISATTY ++ ++/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ ++#undef HAVE_LANGINFO_CODESET ++ ++/* Define to 1 if you have the <limits.h> header file. */ + #undef HAVE_LIMITS_H + +-/* Define if you have the <math.h> header file. */ ++/* Define to 1 if you have the <math.h> header file. */ + #undef HAVE_MATH_H + ++/* Define to 1 if you have the <memory.h> header file. */ ++#undef HAVE_MEMORY_H ++ + /* Define if you have mkstemp(). */ + #undef HAVE_MKSTEMP + +-/* Define if you have a working `mmap' system call. */ ++/* Define to 1 if you have a working `mmap' system call. */ + #undef HAVE_MMAP + +-/* Define if you have the `putenv' function. */ ++/* Define to 1 if you have the `putenv' function. */ + #undef HAVE_PUTENV + +-/* Define if you have the `rename' function. */ ++/* Define to 1 if you have the `rename' function. */ + #undef HAVE_RENAME + +-/* Define if you have the `snprintf' function. */ ++/* Define to 1 if you have the `snprintf' function. */ + #undef HAVE_SNPRINTF + +-/* Define if you have the `isatty' function. */ +-#undef HAVE_ISATTY +- +-/* Define if you have the <stdint.h> header file. */ ++/* Define to 1 if you have the <stdint.h> header file. */ + #undef HAVE_STDINT_H + +-/* Define if you have the <stdlib.h> header file. */ ++/* Define to 1 if you have the <stdlib.h> header file. */ + #undef HAVE_STDLIB_H + +-/* Define if you have the `strcasecmp' function. */ ++/* Define to 1 if you have the `strcasecmp' function. */ + #undef HAVE_STRCASECMP + +-/* Define if you have the `strerror' function. */ ++/* Define to 1 if you have the `strerror' function. */ + #undef HAVE_STRERROR + +-/* Define if you have the <strings.h> header file. */ ++/* Define to 1 if you have the <strings.h> header file. */ + #undef HAVE_STRINGS_H + +-/* Define if you have the <string.h> header file. */ ++/* Define to 1 if you have the <string.h> header file. */ + #undef HAVE_STRING_H + +-/* Define if you have the `strncasecmp' function. */ ++/* Define to 1 if you have the `strncasecmp' function. */ + #undef HAVE_STRNCASECMP + +-/* Define if you have the `strsep' function. */ ++/* Define to 1 if you have the `strsep' function. */ + #undef HAVE_STRSEP + +-/* Define if you have the `strtol' function. */ ++/* Define to 1 if you have the `strtol' function. */ + #undef HAVE_STRTOL + + /* Define if <math.h> defines struct exception. */ + #undef HAVE_STRUCT_EXCEPTION + +-/* Define if you have the <sys/dir.h> header file. */ ++/* Define to 1 if you have the <sys/dir.h> header file. */ + #undef HAVE_SYS_DIR_H + + /* Define if you have sys_errlist in <errno.h> or in <stdio.h>. */ +@@ -87,10 +99,16 @@ + /* Define if you have sysnerr in <errno.h> or <stdio.h>. */ + #undef HAVE_SYS_NERR + +-/* Define if you have the <sys/time.h> header file. */ ++/* Define to 1 if you have the <sys/stat.h> header file. */ ++#undef HAVE_SYS_STAT_H ++ ++/* Define to 1 if you have the <sys/time.h> header file. */ + #undef HAVE_SYS_TIME_H + +-/* Define if you have the <unistd.h> header file. */ ++/* Define to 1 if you have the <sys/types.h> header file. */ ++#undef HAVE_SYS_TYPES_H ++ ++/* Define to 1 if you have the <unistd.h> header file. */ + #undef HAVE_UNISTD_H + + /* Define if the host's encoding is EBCDIC. */ +@@ -120,6 +138,21 @@ + /* Define if your C++ doesn't declare strncasecmp(). */ + #undef NEED_DECLARATION_STRNCASECMP + ++/* Define to the address where bug reports for this package should be sent. */ ++#undef PACKAGE_BUGREPORT ++ ++/* Define to the full name of this package. */ ++#undef PACKAGE_NAME ++ ++/* Define to the full name and version of this package. */ ++#undef PACKAGE_STRING ++ ++/* Define to the one symbol short name of this package. */ ++#undef PACKAGE_TARNAME ++ ++/* Define to the version of this package. */ ++#undef PACKAGE_VERSION ++ + /* Define if the printer's page size is A4. */ + #undef PAGEA4 + +@@ -129,7 +162,10 @@ + /* Define if srand() returns void not int. */ + #undef RET_TYPE_SRAND_IS_VOID + +-/* Define if `sys_siglist' is declared by <signal.h> or <unistd.h>. */ ++/* Define to 1 if you have the ANSI C header files. */ ++#undef STDC_HEADERS ++ ++/* Define to 1 if `sys_siglist' is declared by <signal.h> or <unistd.h>. */ + #undef SYS_SIGLIST_DECLARED + + /* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */ +--- groff-1.18.1.orig/src/include/device.h ++++ groff-1.18.1/src/include/device.h +@@ -18,4 +18,9 @@ + with groff; see the file COPYING. If not, write to the Free Software + Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + ++#ifndef _DEVICE_H ++#define _DEVICE_H ++ + extern const char *device; ++ ++#endif /* _DEVICE_H */ +--- groff-1.18.1.orig/src/include/driver.h ++++ groff-1.18.1/src/include/driver.h +@@ -27,6 +27,7 @@ + #include <errno.h> + #include <assert.h> + #include <math.h> ++#include "encoding.h" // XXX: ukai + #include "errarg.h" + #include "error.h" + #include "font.h" +--- groff-1.18.1.orig/src/include/font.h ++++ groff-1.18.1/src/include/font.h +@@ -18,11 +18,17 @@ + with groff; see the file COPYING. If not, write to the Free Software + Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + ++#include "encoding.h" ++ + typedef void (*FONT_COMMAND_HANDLER)(const char *, const char *, + const char *, int); + + struct font_kern_list; + struct font_char_metric; ++#ifdef ENABLE_MULTIBYTE ++struct fontset_list; ++struct font_wchar_metric; ++#endif + struct font_widths_cache; + + class font { +@@ -53,6 +59,9 @@ + const char *get_special_device_encoding(int index); + const char *get_name(); + const char *get_internal_name(); ++#ifdef ENABLE_MULTIBYTE ++ const char *get_subfont_name(int index); ++#endif + + static int scan_papersize(const char *, const char **, double *, double *); + +@@ -62,6 +71,9 @@ + static int load_desc(); + static int name_to_index(const char *); + static int number_to_index(int); ++#ifdef ENABLE_MULTIBYTE ++ static int wchar_index(wchar); ++#endif + static FONT_COMMAND_HANDLER + set_unknown_desc_command_handler(FONT_COMMAND_HANDLER); + +@@ -76,6 +88,11 @@ + static int spare2; + static int sizescale; + static int tcommand; ++#ifdef ENABLE_MULTIBYTE ++ // XXX: should be in charinfo or font_wchar_metric? ++ static int lowerwchar; ++ static int wcharkern; ++#endif + static int pass_filenames; + static int use_charnames_in_special; + +@@ -83,13 +100,27 @@ + static const char **style_table; + static const char *family; + static int *sizes; ++#ifdef ENABLE_MULTIBYTE ++ // fontsets - sub font list ++ static fontset_list *fontsets; ++ // get fontset for `wc' in current font `fname' ++ static int get_fontset_font(const char *fname, wchar wc); ++ // is the fontno's font load on demand? ++ static int is_on_demand(int fontno); ++#endif + private: + unsigned ligatures; + font_kern_list **kern_hash_table; + int space_width; +- short *ch_index; ++ short *ch_index; /* XXX: this is used unless font_wchar_metric. */ + int nindices; + font_char_metric *ch; ++#ifdef ENABLE_MULTIBYTE ++ // font metric for wchar ++ font_wchar_metric *wch; ++ // get font metric for wchar indexed by c ++ font_wchar_metric *get_font_wchar_metric(int c); ++#endif + int ch_used; + int ch_size; + int special; +--- groff-1.18.1.orig/src/include/lib.h ++++ groff-1.18.1/src/include/lib.h +@@ -88,8 +88,15 @@ + + extern char invalid_char_table[]; + ++#include "encoding.h" /* XXX: ukai */ ++ + inline int invalid_input_char(int c) + { ++#ifdef ENABLE_MULTIBYTE ++ if (input_encoding->is_wchar_byte(c)) ++ return 0; ++ else ++#endif + return c >= 0 && invalid_char_table[c]; + } + +--- groff-1.18.1.orig/src/include/printer.h ++++ groff-1.18.1/src/include/printer.h +@@ -38,6 +38,8 @@ + + #include "color.h" + ++#include "encoding.h" ++ + struct environment { + int fontno; + int size; +@@ -63,6 +65,9 @@ + printer(); + virtual ~printer(); + void load_font(int i, const char *name); ++#ifdef ENABLE_MULTIBYTE ++ void set_wchar_char(wchar c, char *s, int i0, int len, const environment *env, int *widthp = 0); ++#endif + void set_ascii_char(unsigned char c, const environment *env, + int *widthp = 0); + void set_special_char(const char *nm, const environment *env, +--- groff-1.18.1.orig/src/include/encoding.h ++++ groff-1.18.1/src/include/encoding.h +@@ -0,0 +1,175 @@ ++// -*- C++ -*- ++/* Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++This file is part of groff. ++ ++groff is free software; you can redistribute it and/or modify it under ++the terms of the GNU General Public License as published by the Free ++Software Foundation; either version 2, or (at your option) any later ++version. ++ ++groff is distributed in the hope that it will be useful, but WITHOUT ANY ++WARRANTY; without even the implied warranty of MERCHANTABILITY or ++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ ++ ++#ifndef ENCODING_H ++#define ENCODING_H ++ ++#include <config.h> ++ ++#ifdef ENABLE_MULTIBYTE ++typedef int wchar; // negative is used for charcode & index ++#else ++typedef char wchar; ++#endif ++ ++#include <stdio.h> ++ ++#ifdef __cplusplus ++class encoding_istream { ++public: ++ encoding_istream() {}; ++ virtual ~encoding_istream() {}; ++ virtual int getbyte() = 0; ++ virtual int peekbyte() = 0; ++ virtual void ungetbyte(int ch) = 0; ++}; ++ ++class encoding_istream_str: public encoding_istream { ++private: ++ const unsigned char *s; ++ int *i; ++ encoding_istream_str() {}; ++public: ++ encoding_istream_str(const unsigned char *s0, int *i0) : s(s0), i(i0) {}; ++ ~encoding_istream_str() {}; ++ inline int getbyte() { return s[(*i)++]; }; ++ inline int peekbyte() { return s[(*i)]; }; ++ inline void ungetbyte(int ch) { --(*i); }; ++}; ++ ++class encoding_istream_fp: public encoding_istream { ++private: ++ FILE *fp; ++public: ++ encoding_istream_fp(FILE *fp0) : fp(fp0) {}; ++ ~encoding_istream_fp() {}; ++ inline int getbyte() { return fgetc(fp); }; ++ inline int peekbyte() { int ch = fgetc(fp); ungetc(ch, fp); return ch; }; ++ inline void ungetbyte(int ch) { ungetc(ch, fp); }; ++}; ++ ++class encoding_ostream { ++public: ++ encoding_ostream() {}; ++ virtual ~encoding_ostream() {}; ++ virtual void putbyte(unsigned char ch) = 0; ++}; ++ ++class encoding_ostream_str: public encoding_ostream { ++private: ++ unsigned char *s; ++ int *i; ++ int len; ++ encoding_ostream_str() {}; ++public: ++ encoding_ostream_str(unsigned char *s0, int *i0, int max) : s(s0), i(i0), len(max) {}; ++ ~encoding_ostream_str() {}; ++ inline void putbyte(unsigned char ch) { ++ if (*i < len) ++ s[(*i)++] = ch; ++ } ++}; ++ ++class encoding_ostream_fp: public encoding_ostream { ++private: ++ FILE *fp; ++ const char *format; ++public: ++ encoding_ostream_fp(FILE *ofp, const char *fmt = "%c") : fp(ofp), format(fmt) {}; ++ ~encoding_ostream_fp() {}; ++ inline void putbyte(unsigned char ch) { ++ fprintf(fp, format, ch); ++ } ++}; ++ ++class encoding_handler { ++public: ++ encoding_handler() {}; ++ virtual ~encoding_handler() {}; ++ ++ // name of this encoding_handler ++ virtual const char *name() { return ""; }; ++ ++ // check if this byte is byte in multibyte character in this encoding? ++ virtual int is_wchar_byte(unsigned char c) { return 0; }; ++ ++ // make new wchar from c0 (beginning of multibytes) and rest from `in' ++ virtual wchar make_wchar(unsigned char c0, encoding_istream& in) { ++ return wchar(c0); ++ } ++ // make new wchar from c0 (beginning of multibytes) and rest from `fp' ++ virtual wchar make_wchar(unsigned char c0, FILE *fp) { ++ encoding_istream_fp in(fp); ++ return make_wchar(c0, in); ++ } ++ // make new wchar from c0 (beginning of multibtyes) and rest from ++ // s[*i], *i will be changed to point the byte of next character. ++ virtual wchar make_wchar(unsigned char c0, const unsigned char *s, int *i) { ++ encoding_istream_str in(s, i); ++ return make_wchar(c0, in); ++ } ++ ++ // put wchar to outputstream ++ // returns number of bytes written ++ virtual int put_wchar(wchar wc, encoding_ostream& eos) { ++ eos.putbyte((unsigned char)wc); ++ return 1; ++ } ++ // put wchar to `fp' using `fmt' ++ // returns number of bytes written ++ virtual int put_wchar(wchar wc, FILE *fp, const char *fmt = "%c") { ++ encoding_ostream_fp out(fp, fmt); ++ return put_wchar(wc, out); ++ } ++ // put wchar to s[*i] (until maxlen) ++ // *i will be changed to point the byte of next character. ++ virtual int put_wchar(wchar wc, unsigned char *s, int *i, int maxlen) { ++ encoding_ostream_str out(s, i, maxlen); ++ return put_wchar(wc, out); ++ } ++ ++ // maximum number of bytes of multibyte character in this encoding ++ virtual int max_wchar_len() { return 1; }; ++ ++}; ++ ++encoding_handler* select_input_encoding_handler(const char* encoding_name); ++encoding_handler* select_output_encoding_handler(const char* encoding_name); ++extern encoding_handler* input_encoding; ++extern encoding_handler* output_encoding; ++void init_encoding_handler(); ++ ++// check if wc is wchar? ++int is_wchar_code(wchar wc); ++ ++// check if wc is wchar & can be represented in single byte? ++int is_wchar_singlebyte(wchar wc); ++ ++// get singlebyte representation of wchar (if is_wchar_singlebyte(wc)) ++unsigned char wchar_singlebyte(wchar wc); ++ ++// get actual wide character code ++int wchar_code(wchar wc); ++ ++// make wchar from wide character code ++int make_wchar(int w); ++ ++#endif ++ ++#endif /* ENCODING_H */ +--- groff-1.18.1.orig/src/include/config.h ++++ groff-1.18.1/src/include/config.h +@@ -0,0 +1,187 @@ ++/* src/include/config.h. Generated by configure. */ ++/* src/include/config.hin. Generated from configure.ac by autoheader. */ ++ ++/* Define if your C++ doesn't understand `delete []'. */ ++/* #undef ARRAY_DELETE_NEEDS_SIZE */ ++ ++/* Define if you want to use multibyte extension. */ ++#define ENABLE_MULTIBYTE 1 ++ ++/* Define if you have a C++ <limits.h>. */ ++#define HAVE_CC_LIMITS_H 1 ++ ++/* Define if you have a C++ <osfcn.h>. */ ++/* #undef HAVE_CC_OSFCN_H */ ++ ++/* Define to 1 if you have the <dirent.h> header file. */ ++#define HAVE_DIRENT_H 1 ++ ++/* Define to 1 if you have the `fmod' function. */ ++#define HAVE_FMOD 1 ++ ++/* Define to 1 if you have the `getcwd' function. */ ++#define HAVE_GETCWD 1 ++ ++/* Define to 1 if you have the `getpagesize' function. */ ++#define HAVE_GETPAGESIZE 1 ++ ++/* Define to 1 if you have the `gettimeofday' function. */ ++#define HAVE_GETTIMEOFDAY 1 ++ ++/* Define to 1 if you have the <inttypes.h> header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define to 1 if you have the `isatty' function. */ ++#define HAVE_ISATTY 1 ++ ++/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ ++#define HAVE_LANGINFO_CODESET 1 ++ ++/* Define to 1 if you have the <limits.h> header file. */ ++#define HAVE_LIMITS_H 1 ++ ++/* Define to 1 if you have the <math.h> header file. */ ++#define HAVE_MATH_H 1 ++ ++/* Define to 1 if you have the <memory.h> header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define if you have mkstemp(). */ ++#define HAVE_MKSTEMP 1 ++ ++/* Define to 1 if you have a working `mmap' system call. */ ++#define HAVE_MMAP 1 ++ ++/* Define to 1 if you have the `putenv' function. */ ++#define HAVE_PUTENV 1 ++ ++/* Define to 1 if you have the `rename' function. */ ++#define HAVE_RENAME 1 ++ ++/* Define to 1 if you have the `snprintf' function. */ ++#define HAVE_SNPRINTF 1 ++ ++/* Define to 1 if you have the <stdint.h> header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the <stdlib.h> header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the `strcasecmp' function. */ ++#define HAVE_STRCASECMP 1 ++ ++/* Define to 1 if you have the `strerror' function. */ ++#define HAVE_STRERROR 1 ++ ++/* Define to 1 if you have the <strings.h> header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the <string.h> header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the `strncasecmp' function. */ ++#define HAVE_STRNCASECMP 1 ++ ++/* Define to 1 if you have the `strsep' function. */ ++#define HAVE_STRSEP 1 ++ ++/* Define to 1 if you have the `strtol' function. */ ++#define HAVE_STRTOL 1 ++ ++/* Define if <math.h> defines struct exception. */ ++#define HAVE_STRUCT_EXCEPTION 1 ++ ++/* Define to 1 if you have the <sys/dir.h> header file. */ ++#define HAVE_SYS_DIR_H 1 ++ ++/* Define if you have sys_errlist in <errno.h> or in <stdio.h>. */ ++#define HAVE_SYS_ERRLIST 1 ++ ++/* Define if you have sysnerr in <errno.h> or <stdio.h>. */ ++#define HAVE_SYS_NERR 1 ++ ++/* Define to 1 if you have the <sys/stat.h> header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the <sys/time.h> header file. */ ++#define HAVE_SYS_TIME_H 1 ++ ++/* Define to 1 if you have the <sys/types.h> header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the <unistd.h> header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define if the host's encoding is EBCDIC. */ ++/* #undef IS_EBCDIC_HOST */ ++ ++/* Define if localtime() takes a long * not a time_t *. */ ++/* #undef LONG_FOR_TIME_T */ ++ ++/* Define if your C++ doesn't declare gettimeofday(). */ ++/* #undef NEED_DECLARATION_GETTIMEOFDAY */ ++ ++/* Define if your C++ doesn't declare hypot(). */ ++/* #undef NEED_DECLARATION_HYPOT */ ++ ++/* Define if your C++ doesn't declare pclose(). */ ++/* #undef NEED_DECLARATION_PCLOSE */ ++ ++/* Define if your C++ doesn't declare popen(). */ ++/* #undef NEED_DECLARATION_POPEN */ ++ ++/* Define if your C++ doesn't declare putenv(). */ ++/* #undef NEED_DECLARATION_PUTENV */ ++ ++/* Define if your C++ doesn't declare strcasecmp(). */ ++/* #undef NEED_DECLARATION_STRCASECMP */ ++ ++/* Define if your C++ doesn't declare strncasecmp(). */ ++/* #undef NEED_DECLARATION_STRNCASECMP */ ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "" ++ ++/* Define if the printer's page size is A4. */ ++#define PAGEA4 1 ++ ++/* Define as the return type of signal handlers (`int' or `void'). */ ++#define RETSIGTYPE void ++ ++/* Define if srand() returns void not int. */ ++#define RET_TYPE_SRAND_IS_VOID 1 ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Define to 1 if `sys_siglist' is declared by <signal.h> or <unistd.h>. */ ++#define SYS_SIGLIST_DECLARED 1 ++ ++/* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */ ++/* #undef TRADITIONAL_CPP */ ++ ++/* Define if the 0200 bit of the status returned by wait() indicates whether a ++ core image was produced for a process that was terminated by a signal. */ ++/* #undef WCOREFLAG */ ++ ++/* Define if -D_POSIX_SOURCE is necessary. */ ++/* #undef _POSIX_SOURCE */ ++ ++/* Define if you have ISC 3.x or 4.x. */ ++/* #undef _SYSV3 */ ++ ++/* Define uintmax_t to `unsigned long' or `unsigned long long' if <inttypes.h> ++ does not exist. */ ++/* #undef uintmax_t */ +--- groff-1.18.1.orig/src/libs/libgroff/Makefile.sub ++++ groff-1.18.1/src/libs/libgroff/Makefile.sub +@@ -6,6 +6,7 @@ + color.$(OBJEXT) \ + cset.$(OBJEXT) \ + device.$(OBJEXT) \ ++ encoding.$(OBJEXT) \ + errarg.$(OBJEXT) \ + error.$(OBJEXT) \ + fatal.$(OBJEXT) \ +@@ -45,6 +46,7 @@ + $(srcdir)/color.cc \ + $(srcdir)/cset.cc \ + $(srcdir)/device.cc \ ++ $(srcdir)/encoding.cc \ + $(srcdir)/errarg.cc \ + $(srcdir)/error.cc \ + $(srcdir)/fatal.cc \ +--- groff-1.18.1.orig/src/libs/libgroff/font.cc ++++ groff-1.18.1/src/libs/libgroff/font.cc +@@ -25,6 +25,7 @@ + #include <assert.h> + #include <math.h> + #include <stdlib.h> ++#include "encoding.h" // XXX: ukai + #include "errarg.h" + #include "error.h" + #include "cset.h" +@@ -43,8 +44,39 @@ + int italic_correction; + int subscript_correction; + char *special_device_coding; ++#ifdef ENABLE_MULTIBYTE ++ char *subfont_name; ++#endif + }; + ++#ifdef ENABLE_MULTIBYTE ++struct fontset_list { ++ struct fontset_list *next; ++ char *primary_font_name; ++ int fontset_font; ++ wchar start_code; ++ wchar end_code; ++ int on_demand; ++}; ++ ++fontset_list *font::fontsets = NULL; ++ ++struct font_wchar_metric { ++ struct font_wchar_metric *next; ++ char type; ++ int start_code; ++ int end_code; ++ int width; ++ int height; ++ int depth; ++ int pre_math_space; ++ int italic_correction; ++ int subscript_correction; ++ char *special_device_coding; ++ char *subfont_name; ++}; ++#endif ++ + struct font_kern_list { + int i1; + int i2; +@@ -149,7 +181,11 @@ + + font::font(const char *s) + : ligatures(0), kern_hash_table(0), space_width(0), ch_index(0), nindices(0), +- ch(0), ch_used(0), ch_size(0), special(0), widths_cache(0) ++ ch(0), ++#ifdef ENABLE_MULTIBYTE ++ wch(0), ++#endif ++ ch_used(0), ch_size(0), special(0), widths_cache(0) + { + name = new char[strlen(s) + 1]; + strcpy(name, s); +@@ -183,6 +219,17 @@ + widths_cache = widths_cache->next; + delete tem; + } ++#ifdef ENABLE_MULTIBYTE ++ struct font_wchar_metric *wcp, *nwcp; ++ for (wcp = wch; wcp != NULL; wcp = nwcp) { ++ nwcp = wcp->next; ++ if (wcp->special_device_coding) ++ delete [] wcp->special_device_coding; ++ if (wcp->subfont_name) ++ delete [] wcp->subfont_name; ++ delete wcp; ++ } ++#endif + } + + static int scale_round(int n, int x, int y) +@@ -244,6 +291,11 @@ + + int font::contains(int c) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) ++ return 1; ++#endif + return c >= 0 && c < nindices && ch_index[c] >= 0; + } + +@@ -266,8 +318,31 @@ + a_delete width; + } + ++#ifdef ENABLE_MULTIBYTE ++struct font_wchar_metric * ++font::get_font_wchar_metric(int c) ++{ ++ /* XXX: c is font index, not char code... */ ++ /* XXX: we assume wchar_code == font index code for wchars */ ++ /* XXX: does really code conflicts with index? */ ++ struct font_wchar_metric *wcp; ++ for (wcp = wch; wcp != NULL; wcp = wcp->next) { ++ if (wcp->start_code <= wchar_code(c) && wchar_code(c) <= wcp->end_code) { ++ return wcp; ++ } ++ } ++ return NULL; ++} ++#endif ++ + int font::get_width(int c, int point_size) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return scale(wcp->width, point_size); ++ } ++#endif + assert(c >= 0 && c < nindices); + int i = ch_index[c]; + assert(i >= 0); +@@ -299,30 +374,60 @@ + + int font::get_height(int c, int point_size) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return scale(wcp->height, point_size); ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return scale(ch[ch_index[c]].height, point_size); + } + + int font::get_depth(int c, int point_size) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return scale(wcp->depth, point_size); ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return scale(ch[ch_index[c]].depth, point_size); + } + + int font::get_italic_correction(int c, int point_size) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return scale(wcp->italic_correction, point_size); ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return scale(ch[ch_index[c]].italic_correction, point_size); + } + + int font::get_left_italic_correction(int c, int point_size) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return scale(wcp->pre_math_space, point_size); ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return scale(ch[ch_index[c]].pre_math_space, point_size); + } + + int font::get_subscript_correction(int c, int point_size) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return scale(wcp->subscript_correction, point_size); ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return scale(ch[ch_index[c]].subscript_correction, point_size); + } +@@ -371,12 +476,24 @@ + + int font::get_character_type(int c) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return wcp->type; ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return ch[ch_index[c]].type; + } + + int font::get_code(int c) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) { ++ return c; ++ } ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return ch[ch_index[c]].code; + } +@@ -393,10 +510,26 @@ + + const char *font::get_special_device_encoding(int c) + { ++#ifdef ENABLE_MULTIBYTE ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) ++ return wcp->special_device_coding; ++#endif + assert(c >= 0 && c < nindices && ch_index[c] >= 0); + return( ch[ch_index[c]].special_device_coding ); + } + ++#ifdef ENABLE_MULTIBYTE ++const char *font::get_subfont_name(int c) ++{ ++ font_wchar_metric *wcp = get_font_wchar_metric(c); ++ if (wcp != NULL) ++ return wcp->subfont_name; ++ assert(c >= 0 && c < nindices && ch_index[c] >= 0); ++ return ch[ch_index[c]].subfont_name; ++} ++#endif ++ + void font::alloc_ch_index(int index) + { + if (nindices == 0) { +@@ -554,9 +687,11 @@ + return 0; + } + ++ + // If the font can't be found, then if not_found is non-NULL, it will be set + // to 1 otherwise a message will be printed. + ++ + int font::load(int *not_found) + { + char *path; +@@ -570,7 +705,7 @@ + } + text_file t(fp, path); + t.skip_comments = 1; +- char *p; ++ char *p = NULL; + for (;;) { + if (!t.next()) { + t.error("missing charset command"); +@@ -681,6 +816,9 @@ + } + else if (strcmp(command, "charset") == 0) { + had_charset = 1; ++#ifdef ENABLE_MULTIBYTE ++ int had_range = 0; ++#endif + int last_index = -1; + for (;;) { + if (!t.next()) { +@@ -695,6 +833,11 @@ + command = nm; + break; + } ++#ifdef ENABLE_MULTIBYTE ++ int start_code = 0; ++ int end_code = 0; ++ int nrange = sscanf(nm, "u%X..u%X", &start_code, &end_code); ++#endif + if (p[0] == '"') { + if (last_index == -1) { + t.error("first charset entry is duplicate"); +@@ -711,7 +854,64 @@ + } + copy_entry(index, last_index); + } ++#ifdef ENABLE_MULTIBYTE ++ else if (nrange == 2) { ++ had_range = 1; ++ font_wchar_metric *wcp = new font_wchar_metric; ++ wcp->start_code = start_code; ++ wcp->end_code = end_code; ++ wcp->height = 0; ++ wcp->depth = 0; ++ wcp->pre_math_space = 0; ++ wcp->italic_correction = 0; ++ wcp->subscript_correction = 0; ++ int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d", ++ &wcp->width, &wcp->height, &wcp->depth, ++ &wcp->italic_correction, ++ &wcp->pre_math_space, ++ &wcp->subscript_correction); ++ if (nparms < 1) { ++ t.error("bad width for `%1'", nm); ++ return 0; ++ } ++ p = strtok(0, WS); ++ if (p == 0) { ++ t.error("missing character type for `%1'", nm); ++ return 0; ++ } ++ int type; ++ if (sscanf(p, "%d", &type) != 1) { ++ t.error("bad character type for `%1'", nm); ++ return 0; ++ } ++ if (type < 0 || type > 255) { ++ t.error("character type `%1' out of range", type); ++ return 0; ++ } ++ wcp->type = type; ++ ++ p = strtok(0, WS); ++ if ((p == 0) || (strcmp(p, "--") == 0)) { ++ wcp->subfont_name = NULL; ++ } else { ++ wcp->subfont_name = new char[strlen(p) + 1]; ++ strcpy(wcp->subfont_name, p); ++ } ++ ++ p = strtok(0, WS); ++ if ((p == NULL) || (strcmp(p, "--") == 0)) { ++ wcp->special_device_coding = NULL; ++ } else { ++ wcp->special_device_coding = new char[strlen(p) + 1]; ++ strcpy(wcp->special_device_coding, p); ++ } ++ wcp->next = wch; ++ wch = wcp; ++ p = NULL; ++ } ++#endif + else { ++ + font_char_metric metric; + metric.height = 0; + metric.depth = 0; +@@ -747,6 +947,16 @@ + t.error("missing code for `%1'", nm); + return 0; + } ++#ifdef ENABLE_MULTIBYTE ++ char *subp = strchr(p, ':'); ++ if (subp) { ++ *subp++ = '\0'; ++ metric.subfont_name = new char[strlen(subp) + 1]; ++ strcpy(metric.subfont_name, subp); ++ } else { ++ metric.subfont_name = NULL; ++ } ++#endif + char *ptr; + metric.code = (int)strtol(p, &ptr, 0); + if (metric.code == 0 && ptr == p) { +@@ -777,7 +987,11 @@ + } + } + } ++#ifdef ENABLE_MULTIBYTE ++ if (!had_range && last_index == -1) { ++#else + if (last_index == -1) { ++#endif + t.error("I didn't seem to find any characters"); + return 0; + } +@@ -811,6 +1025,11 @@ + { "biggestfont", &font::biggestfont }, + { "spare2", &font::spare2 }, + { "sizescale", &font::sizescale } ++#ifdef ENABLE_MULTIBYTE ++ , ++ { "lowerwchar", &font::lowerwchar }, ++ { "wcharkern", &font::wcharkern } ++#endif + }; + + int font::load_desc() +@@ -981,6 +1200,67 @@ + tcommand = 1; + else if (strcmp("use_charnames_in_special", p) == 0) + use_charnames_in_special = 1; ++#ifdef ENABLE_MULTIBYTE ++ else if (strcmp("fontset", p) == 0) { ++ /* fontset <primary-fontname> <fontname> <code>..<code> [ondemand] */ ++ p = strtok(0, WS); ++ if (p == NULL) { ++ t.error("no primary font for fontset"); ++ return 0; ++ } ++ char *pfont = NULL; ++ if (strcmp(p, "-") != 0) { ++ pfont = new char[strlen(p)+1]; ++ strcpy(pfont, p); ++ } ++ p = strtok(0, WS); ++ if (p == NULL) { ++ t.error("no fontset font for `%1'", ++ pfont ? pfont : "-"); ++ return 0; ++ } ++ int fontset_font = 0; ++ for (int i = 0; i < nfonts; i++) { ++ if (strcmp(p, font_name_table[i]) == 0) { ++ fontset_font = i; ++ break; ++ } ++ } ++ if (fontset_font == nfonts) { ++ t.error("fontset font `%1' for font `%2' not defined", ++ p, pfont ? pfont : "-"); ++ return 0; ++ } ++ p = strtok(0, WS); ++ if (p == NULL) { ++ t.error("no range for fontset font `%1' for font `%2'", ++ font_name_table[fontset_font], ++ pfont ? pfont : "-"); ++ return 0; ++ } ++ wchar start_code = 0; ++ wchar end_code = 0; ++ int nparms = sscanf(p, "%x..%x", &start_code, &end_code); ++ if (nparms != 2) { ++ t.error("invalid range format `%1'", p); ++ return 0; ++ } ++ p = strtok(0, WS); ++ int on_demand = 0; ++ if (p != NULL && strcmp(p, "ondemand") == 0) { ++ on_demand = 1; ++ } ++ /* XXX */ ++ fontset_list *fl = new fontset_list; ++ fl->primary_font_name = pfont; ++ fl->fontset_font = fontset_font; ++ fl->start_code = start_code; ++ fl->end_code = end_code; ++ fl->on_demand = on_demand; ++ fl->next = fontsets; ++ fontsets = fl; ++ } ++#endif + else if (strcmp("charset", p) == 0) + break; + else if (unknown_desc_command_handler) { +@@ -1020,6 +1300,39 @@ + return 1; + } + ++#ifdef ENABLE_MULTIBYTE ++int ++font::get_fontset_font(const char *fname, wchar wc) { ++ fontset_list *fl; ++ int avail_fontno = -1; ++ wc = wchar_code(wc); ++ for (fl = fontsets; fl != NULL; fl = fl->next) { ++ if (fl->primary_font_name == NULL) { ++ if (fl->start_code <= wc && wc <= fl->end_code) { ++ avail_fontno = fl->fontset_font; ++ } ++ } ++ else if (fname && strcmp(fl->primary_font_name, fname) == 0) { ++ if (fl->start_code <= wc && wc <= fl->end_code) { ++ return fl->fontset_font; ++ } ++ } ++ } ++ return avail_fontno; ++} ++ ++int ++font::is_on_demand(int fontno) { ++ fontset_list *fl; ++ for (fl = fontsets; fl != NULL; fl = fl->next) { ++ if (fl->fontset_font == fontno) { ++ return fl->on_demand; ++ } ++ } ++ return 0; ++} ++#endif ++ + void font::handle_unknown_font_command(const char *, const char *, + const char *, int) + { +--- groff-1.18.1.orig/src/libs/libgroff/fontfile.cc ++++ groff-1.18.1/src/libs/libgroff/fontfile.cc +@@ -24,6 +24,7 @@ + #include <assert.h> + #include <stdlib.h> + #include <errno.h> ++#include "encoding.h" // XXX: ukai + #include "font.h" + #include "searchpath.h" + #include "device.h" +@@ -36,6 +37,10 @@ + int font::res = 0; + int font::hor = 1; + int font::vert = 1; ++#ifdef ENABLE_MULTIBYTE ++int font::lowerwchar = 0; ++int font::wcharkern = 0; ++#endif + int font::unitwidth = 0; + int font::paperwidth = 0; + int font::paperlength = 0; +--- groff-1.18.1.orig/src/libs/libgroff/nametoindex.cc ++++ groff-1.18.1/src/libs/libgroff/nametoindex.cc +@@ -24,6 +24,7 @@ + #include <ctype.h> + #include <assert.h> + #include <stdlib.h> ++#include "encoding.h" // XXX: ukai + #include "errarg.h" + #include "error.h" + #include "font.h" +@@ -37,6 +38,9 @@ + character_indexer(); + ~character_indexer(); + int ascii_char_index(unsigned char); ++#ifdef ENABLE_MULTIBYTE ++ int wchar_index(wchar); ++#endif + int named_char_index(const char *); + int numbered_char_index(int); + private: +@@ -68,6 +72,13 @@ + return ascii_index[c]; + } + ++#ifdef ENABLE_MULTIBYTE ++int character_indexer::wchar_index(wchar wc) ++{ ++ return wc; /* XXX: wchar code == index */ ++} ++#endif ++ + int character_indexer::numbered_char_index(int n) + { + if (n >= 0 && n < NSMALL) { +@@ -103,6 +114,30 @@ + int font::name_to_index(const char *s) + { + assert(s != 0 && s[0] != '\0' && s[0] != ' '); ++#ifdef ENABLE_MULTIBYTE ++ { ++ int i = 1; ++ wchar wc = input_encoding->make_wchar(s[0], (const unsigned char *)s, &i); ++ /* XXX ++ * if wchar can be represented in single byte (<256), ++ * it should be the same as char<wc>. ++ */ ++ if (is_wchar_singlebyte(wc)) { ++ return indexer.ascii_char_index(wchar_singlebyte(wc)); ++ } ++ if (is_wchar_code(wc)) { ++ return indexer.wchar_index(wc); ++ } ++ /* XXX: uA1A1 and \xa1a1 are synonyms */ ++ if (s[0] == 'u') { ++ char *res; ++ long n = strtol(s + 1, &res, 16); ++ if (res != s + 1 && *res == '\0') { ++ return indexer.wchar_index(n); ++ } ++ } ++ } ++#endif + if (s[1] == '\0') + return indexer.ascii_char_index(s[0]); + /* char128 and \200 are synonyms */ +@@ -115,3 +150,9 @@ + return indexer.named_char_index(s); + } + ++#ifdef ENABLE_MULTIBYTE ++int font::wchar_index(wchar wc) ++{ ++ return indexer.wchar_index(wc); ++} ++#endif +--- groff-1.18.1.orig/src/libs/libgroff/searchpath.cc ++++ groff-1.18.1/src/libs/libgroff/searchpath.cc +@@ -19,6 +19,7 @@ + with groff; see the file COPYING. If not, write to the Free Software + Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + ++#include "encoding.h" + #include "lib.h" + + #include <stdlib.h> +--- groff-1.18.1.orig/src/libs/libgroff/tmpfile.cc ++++ groff-1.18.1/src/libs/libgroff/tmpfile.cc +@@ -24,6 +24,7 @@ + #include <errno.h> + #include <stdlib.h> + ++#include "encoding.h" + #include "posix.h" + #include "errarg.h" + #include "error.h" +--- groff-1.18.1.orig/src/libs/libgroff/encoding.cc ++++ groff-1.18.1/src/libs/libgroff/encoding.cc +@@ -0,0 +1,440 @@ ++// -*- C++ -*- ++/* Copyright (C) 2001 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++This file is part of groff. ++ ++groff is free software; you can redistribute it and/or modify it under ++the terms of the GNU General Public License as published by the Free ++Software Foundation; either version 2, or (at your option) any later ++version. ++ ++groff is distributed in the hope that it will be useful, but WITHOUT ANY ++WARRANTY; without even the implied warranty of MERCHANTABILITY or ++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ ++ ++#include "encoding.h" ++#include "device.h" ++ ++#include <string.h> ++#ifdef ENABLE_MULTIBYTE ++#include <locale.h> ++#include <wchar.h> ++#ifdef HAVE_LANGINFO_CODESET ++#include <langinfo.h> ++#else ++#include <stdlib.h> ++#endif ++#endif ++ ++class ascii8_handler : public encoding_handler { ++ // encoding handler for 8bit ascii ++ // no multibyte support ++public: ++ ascii8_handler() {} ++ ~ascii8_handler() {} ++ ++ const char *name() { return "C"; }; /* ??? */ ++ ++ inline int is_wchar_byte(unsigned char c) { return 0; } ++ inline wchar make_wchar(unsigned char c0, encoding_istream& eis) { ++ return wchar(c0); ++ } ++ inline int put_wchar(wchar wc, encoding_ostream& eos) { ++ eos.putbyte((unsigned char)wchar_code(wc)); ++ return 1; ++ } ++ inline int max_wchar_len() { return 1; }; ++ ++}; ++ ++#ifdef ENABLE_MULTIBYTE ++class utf8_handler: public encoding_handler { ++public: ++ utf8_handler() { } ++ ~utf8_handler() { } ++ ++ const char *name() { return "UTF-8"; }; ++ ++ inline int is_wchar_byte(unsigned char c) { ++ return (c >= 0x80); ++ } ++ ++ /* ++ 0000 0000-0000 007F 0xxxxxxx ++ 0000 0080-0000 07FF 110xxxxx 10xxxxxx ++ 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx ++ ++ 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx ++ 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx ++ 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx ++ */ ++ ++ inline wchar make_wchar(unsigned char c0, encoding_istream& eis) { ++ wchar wc = 0; ++ int count = 0; ++ if (! is_wchar_byte(c0)) { ++ return c0; ++ } ++ if ((c0 & 0xFC) == 0xFC) { ++ wc = c0 & 0x01; ++ count = 5; ++ } else if ((c0 & 0xF8) == 0xF8) { ++ wc = c0 & 0x03; ++ count = 4; ++ } else if ((c0 & 0xF0) == 0xF0) { ++ wc = c0 & 0x07; ++ count = 3; ++ } else if ((c0 & 0xE0) == 0xE0) { ++ wc = c0 & 0x0F; ++ count = 2; ++ } else if ((c0 & 0xC0) == 0xC0) { ++ wc = c0 & 0x1F; ++ count = 1; ++ } ++ for (; count > 0; count--) { ++ wc <<= 6; ++ int c1 = eis.getbyte(); ++ if (! is_wchar_byte(c1)) { ++ /* illegal utf8 sequence? */ ++ } ++ wc |= (c1 & 0x3F); ++ } ++ return -wc; // XXX: negative ++ } ++ ++ inline int put_wchar(wchar wc, encoding_ostream& eos) { ++ int count = 0; ++ if (! is_wchar_code(wc)) { ++ eos.putbyte(wc); ++ return 1; ++ } ++ wc = -wc; // XXX: negative -> character code ++ ++ if (wc < 0x800) { ++ count = 1; eos.putbyte((wc >> 6) | 0xC0); ++ } else if (wc < 0x10000) { ++ count = 2; eos.putbyte((wc >> 12) | 0xE0); ++ } else if (wc < 0x200000) { ++ count = 3; eos.putbyte((wc >> 18) | 0xF0); ++ } else if (wc < 0x4000000) { ++ count = 4; eos.putbyte((wc >> 24) | 0xf8); ++ } else if (wc <= 0x7fffffff) { ++ count = 5; eos.putbyte((wc >> 30) | 0xFC); ++ } ++ for (int i = 0; i < count; i++) { ++ eos.putbyte(((wc >> 6 * (count - i - 1)) & 0x3f) | 0x80); ++ } ++ return count; ++ } ++ inline int max_wchar_len() { return 6; }; /* XXX 3?*/ ++ ++}; ++ ++#define USE_ICONV ++#ifdef USE_ICONV ++#include <iconv.h> ++#include <errno.h> ++ ++class iconv_handler : public encoding_handler { ++private: ++ iconv_t icd, ocd; ++ const char *encoding_name; ++ static iconv_handler *ih_header; ++ ++public: ++ iconv_handler *next; ++ ++ static iconv_handler *new_iconv_handler(const char *ename) { ++ iconv_handler *ip; ++ // if already created, use it. ++ for (ip = ih_header; ip != NULL; ip = ip->next) { ++ if (strcmp(ip->name(), ename) == 0) { ++ return ip; ++ } ++ } ++ // not found, create new one. ++ ip = new iconv_handler(ename); ++ ip->next = ih_header; ++ ih_header = ip; ++ return ip; ++ } ++ iconv_handler(const char *ename) : encoding_name(ename) { ++ // internal code is UCS-2BE ++ icd = iconv_open("UCS-2BE", encoding_name); ++ ocd = iconv_open(encoding_name, "UCS-2BE"); ++ }; ++ ~iconv_handler() {}; ++ ++ const char *name() { return encoding_name; }; ++ ++ inline int is_wchar_byte(unsigned char c) { ++ return (c >= 0x80); /* ??? */ ++ } ++ ++ inline wchar make_wchar(unsigned char c0, encoding_istream& eis) { ++ wchar wc = 0; ++ char inbuf[8], outbuf[8]; ++ char *inp, *outp; ++ size_t inbytesleft, outbytesleft; ++ int i = 0; ++ ++ if (! is_wchar_byte(c0)) { ++ return c0; ++ } ++ for (inbuf[i++] = c0; ;inbuf[i++] = eis.getbyte()) { ++ inbytesleft = i; ++ outbytesleft = sizeof(outbuf); ++ inp = inbuf; ++ outp = outbuf; ++ size_t r = iconv(icd, &inp, &inbytesleft, &outp, &outbytesleft); ++ if (r == (size_t)-1) { ++ if (errno == EILSEQ) { ++ /* illegal sequence? */ ++ return '?'; ++ } else if (errno == EINVAL) { ++ /* incomplete sequence? */ ++ continue; ++ } else if (errno == E2BIG) { ++ /* no room to output? */ ++ return '?'; ++ } ++ } ++ /* ok */ ++ /* UCS-2 is 2 bytes */ ++ wc = ((outbuf[0] & 0x0ff) << 8) | (outbuf[1] & 0x0ff); ++ return -wc; // XXX: negative ++ } ++ } ++ ++ ++ inline int put_wchar(wchar wc, encoding_ostream& eos) { ++ char inbuf[4], outbuf[4]; ++ char *inp, *outp; ++ size_t inbytesleft, outbytesleft; ++ ++ if (!is_wchar_code(wc)) { ++ eos.putbyte(wc & 0x0ff); ++ return 1; ++ } ++ wc = -wc; // XXX: negative -> character code ++ ++ inbuf[0] = (wc >> 8) & 0x0ff; ++ inbuf[1] = (wc >> 0) & 0x0ff; ++ inbuf[2] = 0; ++ inbytesleft = 2; ++ outbytesleft = 4; ++ inp = inbuf; ++ outp = outbuf; ++ size_t r = iconv(ocd, &inp, &inbytesleft, &outp, &outbytesleft); ++ if (r == (size_t)-1) { ++ if (errno == EILSEQ) { ++ /* illegal sequence? */; ++ } else if (errno == EINVAL) { ++ /* incomplete sequence? */; ++ } else if (errno == E2BIG) { ++ /* no room to output? */; ++ } ++ eos.putbyte('?'); ++ return 1; ++ } ++ char *op = outbuf; ++ int n = 0; ++ for (; op < outp; op++, n++) { ++ eos.putbyte(*op & 0x0ff); ++ } ++ return outp - outbuf; ++ } ++ inline int max_wchar_len() { return 6; }; /* XXX */ ++ ++}; ++#else ++class euc_handler : public encoding_handler { ++ static const int WCTABLE_OFFSET = 0xa1; ++ static const int WCTABLE_SIZE = 94; ++ static const int EUCMASK = 0x8080; ++ ++public: ++ euc_handler() {} ++ ~euc_handler() {}; ++ ++ const char *name() { return "EUC-JP"; }; ++ ++ inline int is_wchar_byte(unsigned char c) { ++ return (c >= 0xa1 && c <= 0xfe); ++ } ++ ++ inline wchar make_wchar(unsigned char c0, encoding_istream& eis) { ++ wchar wc; ++ if (! is_wchar_byte(c0)) { ++ return c0; ++ } ++ int c1 = eis.peekbyte(); ++ if (! is_wchar_byte(c1)) { ++ eis.ungetbyte(c1); ++ return c0; ++ } ++ c1 = eis.getbyte(); ++ wc = (c0 & 0xff) << 8; ++ wc |= (c1 & 0xff); ++ ++ if (wc == 0xa1a1) ++ return ' '; ++ return -wc; ++ } ++ ++ inline int put_wchar(wchar wc, encoding_ostream& eos) { ++ if (is_wchar_code(wc)) { ++ wc = -wc; ++ eos.putbyte((wc >> 8) & 0x0ff); ++ eos.putbyte((wc >> 0) & 0x0ff); ++ return 2; ++ } else { ++ eos.putbyte(wc & 0x0ff); ++ return 1; ++ } ++ } ++ inline int max_wchar_len() { return 2; }; /* XXX */ ++}; ++#endif /* USE_ICONV */ ++#endif ++ ++static ascii8_handler ascii8; ++#ifdef ENABLE_MULTIBYTE ++static utf8_handler utf8; ++#ifdef USE_ICONV ++iconv_handler *iconv_handler::ih_header = NULL; ++#else ++static euc_handler eucjp; ++#endif ++#endif ++ ++encoding_handler *input_encoding = &ascii8; ++encoding_handler *output_encoding = &ascii8; ++ ++static void ++new_encoding_handler(encoding_handler **eptr, const char *encoding_name) ++{ ++ if (!encoding_name) { ++ *eptr = &ascii8; ++ return; ++ } ++#ifdef ENABLE_MULTIBYTE ++ if (strcmp(encoding_name, "UTF-8") == 0) { ++ *eptr = &utf8; ++ return; ++ } ++#ifdef USE_ICONV ++ if (strcmp(encoding_name, "C") != 0) { ++ *eptr = iconv_handler::new_iconv_handler(encoding_name); ++ return; ++ } ++#else ++ // printf("encoding request: [%s]\n", encoding_name); ++ if (strcmp(encoding_name, "EUC-JP") == 0) { ++ // printf("encoding: [EUC-JP]\n"); ++ *eptr = &eucjp; ++ return; ++ } ++#endif ++#endif ++ // default ++ *eptr = &ascii8; ++ return; ++} ++ ++encoding_handler * ++select_input_encoding_handler(const char *encoding_name) ++{ ++ new_encoding_handler(&input_encoding, encoding_name); ++ return input_encoding; ++} ++ ++encoding_handler * ++select_output_encoding_handler(const char *encoding_name) ++{ ++ new_encoding_handler(&output_encoding, encoding_name); ++ return output_encoding; ++} ++ ++void ++init_encoding_handler() ++{ ++#ifdef ENABLE_MULTIBYTE ++ const char *locale, *charset; ++ // groff 1 defines ISO-8859-1 as the input encoding, so this is required ++ // for compatibility. groff 2 will define UTF-8 (or possibly officially ++ // allow it to be switchable?) ++ select_input_encoding_handler("ISO-8859-1"); ++ select_output_encoding_handler("C"); ++ ++ locale = setlocale(LC_ALL, ""); ++ if (locale == NULL || ++ strcmp(locale, "C") == 0 || strcmp(locale, "POSIX") == 0) { ++ return; ++ } ++ /* check LC_CTYPE is C or POSIX */ ++ locale = setlocale(LC_CTYPE, NULL); ++ if (strcmp(locale, "C") == 0 || strcmp(locale, "POSIX") == 0) { ++ return; ++ } ++ /* otherwise */ ++#if HAVE_LANGINFO_CODESET ++ charset = nl_langinfo(CODESET); ++#else ++ charset = strchr(locale, '.'); ++ if (charset) ++ ++charset; ++ else ++ charset = ""; ++#endif ++ if (strncmp(locale, "ja", 2) == 0) { ++ select_input_encoding_handler(charset); ++ select_output_encoding_handler(charset); ++ } else if ((!device || strcmp(device, "ascii8") == 0)) { ++ select_input_encoding_handler(NULL); ++ select_output_encoding_handler(NULL); ++ } ++#endif ++ return; ++} ++ ++int ++is_wchar_code(wchar wc) ++{ ++ return (wc < 0); ++} ++ ++int ++is_wchar_singlebyte(wchar wc) ++{ ++ return ((-256 < wc) && (wc < 0)); ++} ++ ++unsigned char ++wchar_singlebyte(wchar wc) ++{ ++ if (wc >= 0) ++ return (unsigned char)wc; ++ else ++ return (unsigned char)-wc; ++} ++ ++int ++wchar_code(wchar wc) ++{ ++ if (wc >= 0) ++ return wc; ++ else ++ return -wc; ++} ++ ++int ++make_wchar(int w) ++{ ++ return -w; ++} +--- groff-1.18.1.orig/src/libs/libdriver/input.cc ++++ groff-1.18.1/src/libs/libdriver/input.cc +@@ -250,6 +250,7 @@ + + #include "driver.h" + #include "device.h" ++#include "encoding.h" + + #include <stdlib.h> + #include <errno.h> +@@ -1439,6 +1440,19 @@ + char *subcmd_str = get_string_arg(); + char subcmd = subcmd_str[0]; + switch (subcmd) { ++#ifdef ENABLE_MULTIBYTE ++ case 'e': // x encoding: select encoding ++ { ++ char *str_arg = get_string_arg(); ++ if (str_arg == 0) ++ warning("empty argument for `x encoding' command"); ++ else { ++ select_input_encoding_handler(str_arg); ++ delete str_arg; ++ } ++ break; ++ } ++#endif + case 'f': // x font: mount font + { + IntArg n = get_integer_arg(); +@@ -1517,7 +1531,7 @@ + return stopped; + } + +- ++//////////////////////////////////////////////////////////////// + /********************************************************************** + exported part (by driver.h) + **********************************************************************/ +@@ -1625,6 +1639,18 @@ + if (str_arg[0] != 'i') + fatal("the third command must be `x init'"); + delete str_arg; ++#ifdef ENABLE_MULTIBYTE ++ Char c = get_char(); ++ while (is_space_or_tab(c) && c != Char('\n') && c != Char(EOF)) ++ c = get_char(); ++ unget_char(c); ++ if (c != Char('\n') && c != Char(EOF)) { ++ const char *tmp_encoding = get_string_arg(); ++ if (tmp_encoding && *tmp_encoding) ++ select_input_encoding_handler(tmp_encoding); ++ delete tmp_encoding; ++ } ++#endif + skip_line_x(); + } + +@@ -1763,6 +1789,18 @@ + size_t i = 0; + while ((c = str_arg[i++]) != '\0') { + EnvInt w; ++#ifdef ENABLE_MULTIBYTE ++ if (input_encoding->is_wchar_byte(c)) { ++ int i0 = i - 1; ++ wchar wc = input_encoding->make_wchar(c, (const unsigned char *)str_arg, (int *)&i); ++ if (is_wchar_code(wc)) { ++ /* XXX: singlebyte check? */ ++ pr->set_wchar_char(wc, str_arg, i0, i - i0, current_env, &w); ++ } else { ++ pr->set_ascii_char((unsigned char) c, current_env, &w); ++ } ++ } else ++#endif + pr->set_ascii_char((unsigned char) c, current_env, &w); + current_env->hpos += w; + } +--- groff-1.18.1.orig/src/libs/libdriver/printer.cc ++++ groff-1.18.1/src/libs/libdriver/printer.cc +@@ -27,6 +27,7 @@ + */ + + #include "driver.h" ++#include "encoding.h" + + printer *pr = 0; + +@@ -138,6 +139,24 @@ + } + } + ++#ifdef ENABLE_MULTIBYTE ++void printer::set_wchar_char(wchar c, char *s, int i0, int len, const environment *env, int *widthp) ++{ ++ unsigned char *buf = new unsigned char[len+1]; ++ memset(buf, 0, len+1); ++ memcpy(buf, s+i0, len); ++ font *f; ++ int w; ++ int i = set_char_and_width((const char *)buf, env, &w, &f); ++ if (i != -1) { ++ set_char(c, f, env, w, (const char *)buf); ++ if (widthp) ++ *widthp = w; ++ } ++ delete [] buf; ++} ++#endif ++ + void printer::set_special_char(const char *nm, const environment *env, + int *widthp) + { +--- groff-1.18.1.orig/src/roff/groff/groff.cc ++++ groff-1.18.1/src/roff/groff/groff.cc +@@ -107,6 +107,7 @@ + program_name = argv[0]; + static char stderr_buf[BUFSIZ]; + setbuf(stderr, stderr_buf); ++ init_encoding_handler(); + assert(NCOMMANDS <= MAX_COMMANDS); + string Pargs, Largs, Fargs; + int vflag = 0; +--- groff-1.18.1.orig/src/roff/groff/groff.man ++++ groff-1.18.1/src/roff/groff/groff.man +@@ -118,7 +118,7 @@ + .c -------------------------------------------------------------------- + .c ShortOpt ([char [punct]]) + .c +-.c `-c' somwhere in the text ++.c `-c' somewhere in the text + .c second arg is punctuation + .c + .de ShortOpt +@@ -130,7 +130,7 @@ + .c -------------------------------------------------------------------- + .c LongOpt ([name [punct]]) + .c +-.c `--name' somwhere in the text ++.c `--name' somewhere in the text + .c second arg is punctuation + .c + .de LongOpt +@@ -314,7 +314,7 @@ + .B groff + program allows to control the whole + .I groff +-system by comand line options. ++system by command line options. + . + This is a great simplification in comparison to the classical case (which + uses pipes only). +@@ -610,7 +610,7 @@ + . + . + .\" -------------------------------------------------------------------- +-.SS Tranparent Options ++.SS Transparent Options + .\" -------------------------------------------------------------------- + . + The following options are transparently handed over to the formatter +@@ -695,7 +695,7 @@ + is much easier than + .IR "classical roff" . + . +-This section gives an overview of the parts that consitute the groff ++This section gives an overview of the parts that constitute the groff + system. + . + It complements +@@ -948,6 +948,10 @@ + Text output using the EBCDIC code page IBM cp1047 (e.g. OS/390 Unix). + . + .TP ++.B nippon ++Text output using the Japanese-EUC character set. ++. ++.TP + .B dvi + TeX DVI format. + . +@@ -956,6 +960,12 @@ + HTML output. + . + .TP ++.B ascii8 ++For typewriter-like devices. Unlike ++.BR ascii , ++this device is 8 bit clean. This device is intended to be used ++for codesets other than ASCII and ISO-8859-1. ++.TP + .B latin1 + Text output using the ISO Latin-1 (ISO 8859-1) character set; see + .BR iso_8859_1 (7). +@@ -1031,7 +1041,7 @@ + . + .P + Today, most printing or drawing hardware is handled by the operating +-system, by device drivers, or by software interfaces, usally accepting ++system, by device drivers, or by software interfaces, usually accepting + PostScript. + . + Consequently, there isn't an urgent need for more hardware device +--- groff-1.18.1.orig/src/roff/troff/charinfo.h ++++ groff-1.18.1/src/roff/troff/charinfo.h +@@ -29,9 +29,16 @@ + macro *mac; + unsigned char special_translation; + unsigned char hyphenation_code; ++#ifdef ENABLE_MULTIBYTE ++ unsigned short flags; ++#else + unsigned char flags; ++#endif + unsigned char ascii_code; + unsigned char asciify_code; ++#ifdef ENABLE_MULTIBYTE ++ wchar wchar_code; ++#endif + char not_found; + char transparent_translate; // non-zero means translation applies + // to transparent throughput +@@ -47,6 +54,11 @@ + OVERLAPS_VERTICALLY = 16, + TRANSPARENT = 32, + NUMBERED = 64 ++#ifdef ENABLE_MULTIBYTE ++ , ++ DONT_BREAK_BEFORE = 0x100, // 256, pre kinsoku ++ DONT_BREAK_AFTER = 0x200 // 512, post kinsoku ++#endif + }; + enum { + TRANSLATE_NONE, +@@ -74,7 +86,11 @@ + int get_translation_input(); + charinfo *get_translation(int = 0); + void set_translation(charinfo *, int, int); ++#ifdef ENABLE_MULTIBYTE ++ void set_flags(unsigned short); ++#else + void set_flags(unsigned char); ++#endif + void set_special_translation(int, int); + int get_special_translation(int = 0); + macro *set_macro(macro *, int = 0); +@@ -84,6 +100,12 @@ + int get_number(); + int numbered(); + int is_fallback(); ++#ifdef ENABLE_MULTIBYTE ++ wchar get_wchar_code(); ++ void set_wchar_code(wchar); ++ int cannot_break_before(); // pre kinsoku ++ int cannot_break_after(); // post kinsoku ++#endif + symbol *get_symbol(); + }; + +@@ -131,6 +153,18 @@ + return fallback; + } + ++#ifdef ENABLE_MULTIBYTE ++inline int charinfo::cannot_break_before() ++{ ++ return flags & DONT_BREAK_BEFORE; ++} ++ ++inline int charinfo::cannot_break_after() ++{ ++ return flags & DONT_BREAK_AFTER; ++} ++#endif ++ + inline charinfo *charinfo::get_translation(int transparent_throughput) + { + return (transparent_throughput && !transparent_translate +@@ -153,7 +187,18 @@ + return (translate_input ? asciify_code : 0); + } + ++#ifdef ENABLE_MULTIBYTE ++inline wchar charinfo::get_wchar_code() ++{ ++ return wchar_code; ++} ++#endif ++ ++#ifdef ENABLE_MULTIBYTE ++inline void charinfo::set_flags(unsigned short c) ++#else + inline void charinfo::set_flags(unsigned char c) ++#endif + { + flags = c; + } +--- groff-1.18.1.orig/src/roff/troff/env.cc ++++ groff-1.18.1/src/roff/troff/env.cc +@@ -32,6 +32,7 @@ + #include "charinfo.h" + #include "macropath.h" + #include "input.h" ++#include "font.h" // ENABLE_MULTIBYTE only? + #include <math.h> + + symbol default_family("T"); +@@ -264,6 +265,13 @@ + void environment::add_char(charinfo *ci) + { + int s; ++#ifdef ENABLE_MULTIBYTE ++ int fontno = get_font(); // current font # ++ int fontset_font = get_fontset_fontno(fontno, ci->get_wchar_code()); ++ if (fontno >= 0 && fontno != fontset_font) { ++ change_curfont(fontset_font); ++ } ++#endif + if (interrupted) + ; + // don't allow fields in dummy environments +@@ -286,11 +294,95 @@ + else { + if (line == 0) + start_line(); ++#ifdef ENABLE_MULTIBYTE ++ /* ++ * XXX: NEED REWRITE TO BE MORE GENERIC ++ * This code is based on jgroff ++ * about kerning between ASCII and EUC-JP ++ */ ++ if (!ci->get_wchar_code()) { ++ /* ++ * This node is a ASCII character node. ++ */ ++ if (!pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) { ++ /* ++ * Insert a little space node between EUC and ASCII. ++ */ ++ word_space_node *ws; ++ ++ if (ci->ends_sentence() || ci->transparent() || ci->cannot_break_before()) ++ ws = new unbreakable_space_node(hwkern.to_units(), get_fill_color()); ++ else ++ ws = new word_space_node(hwkern.to_units(), ++ get_fill_color(), ++ new width_list(env_space_width(this), ++ env_sentence_space_width(this))); ++ curenv->add_node(ws); ++ } ++ pre_char_is_ascii = 1; ++ pre_wchar_cannot_break_after = 0; ++ } else { ++ /* ++ * This node is a EUC charcater node. ++ */ ++ if (!pre_char_is_ascii && line->get_node_type() == NODE_NEWLINE_SPACE) { ++ /* ++ * remove a newline-node. ++ */ ++ node *ns_node = line; ++ line = line->next; ++ width_total -= ns_node->width(); ++ space_total -= ns_node->nspaces(); ++ delete ns_node; ++ } ++ ++ if (!pre_wchar_cannot_break_after && !ci->cannot_break_before()) { ++ /* ++ * add a zero-width-space-node before EUC charcater node. ++ */ ++ add_node(new kword_space_node(get_fill_color())); ++ met_with_kword_space = 1; ++ } ++ pre_wchar_cannot_break_after = ci->cannot_break_after(); ++ ++ if (pre_char_is_ascii && enable_wcharkern && !hwkern.is_zero()) { ++ /* ++ * Insert a little space node between ASCII and EUC. ++ */ ++ unbreakable_space_node *ws = ++ new unbreakable_space_node(hwkern.to_units(), get_fill_color()); ++ curenv->add_node(ws); ++ } ++ pre_char_is_ascii = 0; ++ ++ if (!vlower.is_zero()) { ++ /* ++ * Lower a EUC charcater node. ++ */ ++ curenv->add_node(new vmotion_node(vlower.to_units(), ++ get_fill_color())); // lower ++ } ++ } ++#endif + if (ci != hyphen_indicator_char) + line = line->add_char(ci, this, &width_total, &space_total); + else + line = line->add_discretionary_hyphen(); ++#ifdef ENABLE_MULTIBYTE ++ enable_wcharkern = 1; ++ if (!vlower.is_zero() && ci->get_wchar_code()) { ++ /* ++ * Raise a EUC charcater node. ++ */ ++ curenv->add_node(new vmotion_node(-vlower.to_units(), ++ get_fill_color())); // raise ++ } ++#endif + } ++#ifdef ENABLE_MULTIBYTE ++ if (fontset_font >= 0 && fontno != fontset_font) ++ change_curfont(fontno); /* restore saved font # */ ++#endif + } + + node *environment::make_char_node(charinfo *ci) +@@ -394,7 +486,11 @@ + width_total += x; + return; + } ++#ifdef ENABLE_MULTIBYTE ++ add_node(new newline_space_node(x, get_fill_color())); // This node may be removed ++#else + add_node(new word_space_node(x, get_fill_color(), w)); ++#endif + possibly_break_line(0, spread_flag); + spread_flag = 0; + } +@@ -480,6 +576,35 @@ + warning(WARN_FONT, "bad font number"); + } + ++#ifdef ENABLE_MULTIBYTE ++void environment::change_curfont(symbol nm) ++{ ++ int n = symbol_fontno(nm); ++ if (n < 0) { ++ n = next_available_font_position(); ++ if (!mount_font(n, nm)) ++ return; ++ } ++ fontno = n; ++} ++ ++void environment::change_curfont(int n) ++{ ++ if (is_good_fontno(n)) ++ fontno = n; ++ else ++ error("bad font number"); ++} ++ ++void environment::set_encoding(symbol enc) ++{ ++ if (enc.is_null() || enc.is_empty()) ++ return; ++ select_input_encoding_handler(enc.contents()); ++ select_output_encoding_handler(enc.contents()); ++} ++#endif /* ENABLE_MULTIBYTE */ ++ + void environment::set_family(symbol fam) + { + if (interrupted) +@@ -649,6 +774,16 @@ + control_char('.'), + no_break_control_char('\''), + hyphen_indicator_char(0) ++#ifdef ENABLE_MULTIBYTE ++ , ++ stretch_threshold(0), ++ pre_wchar_cannot_break_after(0), ++ pre_char_is_ascii(-1), ++ enable_wcharkern(0), ++ met_with_kword_space(0), ++ hwkern(font::wcharkern), ++ vlower(font::lowerwchar) ++#endif + { + prev_family = family = lookup_family(default_family); + prev_fontno = fontno = 1; +@@ -739,6 +874,16 @@ + control_char(e->control_char), + no_break_control_char(e->no_break_control_char), + hyphen_indicator_char(e->hyphen_indicator_char) ++#ifdef ENABLE_MULTIBYTE ++ , ++ stretch_threshold(e->stretch_threshold), ++ pre_wchar_cannot_break_after(0), ++ pre_char_is_ascii(-1), ++ enable_wcharkern(0), ++ met_with_kword_space(0), ++ hwkern(font::wcharkern), ++ vlower(font::lowerwchar) ++#endif + { + } + +@@ -1781,6 +1926,9 @@ + target_text_length = line_length - saved_indent; + width_total = H0; + space_total = 0; ++#ifdef ENABLE_MULTIBYTE ++ enable_wcharkern = 0; ++#endif + } + + hunits environment::get_hyphenation_space() +@@ -1819,6 +1967,23 @@ + skip_line(); + } + ++#ifdef ENABLE_MULTIBYTE ++void stretch_threshold_request() ++{ ++ int n; ++ if (has_arg() && get_integer(&n)) { ++ if (n < 0 || n > 100) { ++ warning(WARN_RANGE, "stretch threshold value %1 out of range", n); ++ } else { ++ curenv->stretch_threshold = n; ++ } ++ } else { ++ curenv->stretch_threshold = 0; ++ } ++ skip_line(); ++} ++#endif ++ + breakpoint *environment::choose_breakpoint() + { + hunits x = width_total; +@@ -2014,6 +2179,30 @@ + // When a macro follows a paragraph in fill mode, the + // current line should not be empty. + || (width_total - line->width()) > target_text_length)) { ++#ifdef ENABLE_MULTIBYTE ++ if (met_with_kword_space) { ++ node *linep = line; ++ node *prep = 0; ++ while (linep->next) { ++ if (linep->next->get_node_type() == NODE_GLYPH) ++ prep = 0; ++ else if (linep->next->get_node_type() == NODE_KWORD_SPACE) ++ prep = linep; ++ linep = linep->next; ++ } ++ if (prep) { ++ /* ++ * delete a kword_space_node which is in the top of line. ++ */ ++ linep = prep->next; ++ prep->next = linep->next; ++ width_total -= linep->width(); ++ space_total -= linep->nspaces(); ++ delete linep; ++ } ++ met_with_kword_space = 0; ++ } ++#endif + hyphenate_line(start_here); + breakpoint *bp = choose_breakpoint(); + if (bp == 0) +@@ -2026,6 +2215,15 @@ + bp->nd->split(bp->index, &pre, &post); + *ndp = post; + hunits extra_space_width = H0; ++#ifdef ENABLE_MULTIBYTE ++ int sv_adjust_mode = adjust_mode; ++ if (stretch_threshold) { ++ int ratio = bp->width * 100 / target_text_length; ++ if (ratio < stretch_threshold) { ++ adjust_mode = ADJUST_LEFT; ++ } ++ } ++#endif + switch(adjust_mode) { + case ADJUST_BOTH: + if (bp->nspaces != 0) +@@ -2041,6 +2239,9 @@ + saved_indent += target_text_length - bp->width; + break; + } ++#ifdef ENABLE_MULTIBYTE ++ adjust_mode = sv_adjust_mode; ++#endif + distribute_space(pre, bp->nspaces, extra_space_width); + hunits output_width = bp->width + extra_space_width; + input_line_start -= output_width; +@@ -3237,6 +3438,9 @@ + init_request("hys", hyphenation_space_request); + init_request("hym", hyphenation_margin_request); + init_request("pvs", post_vertical_spacing); ++#ifdef ENABLE_MULTIBYTE ++ init_request("stt", stretch_threshold_request); ++#endif + init_int_env_reg(".f", get_font); + init_int_env_reg(".b", get_bold); + init_hunits_env_reg(".i", get_indent); +--- groff-1.18.1.orig/src/roff/troff/env.h ++++ groff-1.18.1/src/roff/troff/env.h +@@ -213,6 +213,15 @@ + unsigned char control_char; + unsigned char no_break_control_char; + charinfo *hyphen_indicator_char; ++#ifdef ENABLE_MULTIBYTE ++ int stretch_threshold; ++ int pre_wchar_cannot_break_after; ++ int pre_char_is_ascii; ++ int enable_wcharkern; ++ int met_with_kword_space; ++ hunits hwkern; ++ vunits vlower; ++#endif + + environment(symbol); + environment(const environment *); // for temporary environment +@@ -279,6 +288,10 @@ + void wrap_up_tab(); + void set_font(int); + void set_font(symbol); ++#ifdef ENABLE_MULTIBYTE ++ void change_curfont(int); ++ void change_curfont(symbol); ++#endif + void set_family(symbol); + void set_size(int); + void set_char_height(int); +@@ -309,6 +322,9 @@ + const char *get_point_size_string(); + const char *get_requested_point_size_string(); + void output_pending_lines(); ++#ifdef ENABLE_MULTIBYTE ++ void set_encoding(symbol); ++#endif + + friend void title_length(); + friend void space_size(); +@@ -347,6 +363,9 @@ + #ifdef WIDOW_CONTROL + friend void widow_control_request(); + #endif /* WIDOW_CONTROL */ ++#ifdef ENABLE_MULTIBYTE ++ friend void stretch_threshold_request(); ++#endif + + friend void do_divert(int append, int boxing); + }; +--- groff-1.18.1.orig/src/roff/troff/input.cc ++++ groff-1.18.1/src/roff/troff/input.cc +@@ -35,6 +35,7 @@ + #include "macropath.h" + #include "defs.h" + #include "input.h" ++#include "encoding.h" // XXX: ukai + + // Needed for getpid() and isatty() + #include "posix.h" +@@ -89,6 +90,11 @@ + charinfo *charset_table[256]; + unsigned char hpf_code_table[256]; + ++#ifdef ENABLE_MULTIBYTE ++charinfo *wcharset_table_entry(wchar wc); ++ ++#endif /* ENABLE_MULTIBYTE */ ++ + static int warning_mask = DEFAULT_WARNING_MASK; + static int inhibit_errors = 0; + static int ignoring = 0; +@@ -148,6 +154,20 @@ + input_iterator *make_temp_iterator(const char *); + const char *input_char_description(int); + ++#ifdef ENABLE_MULTIBYTE ++static void ++select_encoding() ++{ ++ symbol e = get_long_name(1); ++ if (e.is_null()) { ++ skip_line(); ++ return; ++ } ++ curenv->set_encoding(e); ++ skip_line(); ++ ++} ++#endif + + void set_escape_char() + { +@@ -1524,6 +1544,19 @@ + type = TOKEN_NEWLINE; + } + ++#ifdef ENABLE_MULTIBYTE ++class encoding_istream_input : public encoding_istream { ++private: ++ node **np; ++public: ++ encoding_istream_input(node **n) : np(n) {}; ++ ~encoding_istream_input() {}; ++ int getbyte() { return input_stack::get(np); }; ++ int peekbyte() { return input_stack::peek(); }; ++ void ungetbyte(int ch) { return; }; ++}; ++#endif ++ + void token::next() + { + if (nd) { +@@ -1533,6 +1566,10 @@ + units x; + for (;;) { + node *n; ++#ifdef ENABLE_MULTIBYTE ++ encoding_istream_input einput(&n); ++#endif ++ + int cc = input_stack::get(&n); + if (cc != escape_char || escape_char == 0) { + handle_normal_char: +@@ -1686,8 +1723,22 @@ + } + return; + default: ++#ifdef ENABLE_MULTIBYTE ++ wc = input_encoding->make_wchar(cc, einput); ++ if (is_wchar_code(wc)) { ++ type = TOKEN_WCHAR; ++ c = 0; ++ } else if (wc == ' ') { ++ type = TOKEN_SPACE; ++ c = cc; ++ } else { ++ type = TOKEN_CHAR; ++ c = cc; ++ } ++#else + type = TOKEN_CHAR; + c = cc; ++#endif + return; + } + } +@@ -2057,6 +2108,10 @@ + switch(type) { + case TOKEN_CHAR: + return c == t.c; ++#ifdef ENABLE_MULTIBYTE ++ case TOKEN_WCHAR: ++ return wc == t.wc; ++#endif + case TOKEN_SPECIAL: + return nm == t.nm; + case TOKEN_NUMBERED_CHAR: +@@ -2563,6 +2618,27 @@ + } + break; + } ++#ifdef ENABLE_MULTIBYTE ++ case token::TOKEN_WCHAR: ++ { ++ wchar wch = tok.wc; ++ ++ if (possibly_handle_first_page_transition()) ++ ; ++ else { ++ for (;;) { ++ curenv->add_char(wcharset_table_entry(wch)); ++ tok.next(); ++ if (tok.type != token::TOKEN_WCHAR) ++ break; ++ wch = tok.wc; ++ } ++ suppress_next = 1; ++ bol = 0; ++ } ++ break; ++ } ++#endif /* ENABLE_MULTIBYTE */ + case token::TOKEN_TRANSPARENT: + { + if (bol) { +@@ -6018,6 +6094,10 @@ + { + if (type == TOKEN_CHAR) + return charset_table[c]; ++#ifdef ENABLE_MULTIBYTE ++ if (type == TOKEN_WCHAR) ++ return wcharset_table_entry(wc); ++#endif + if (type == TOKEN_SPECIAL) + return get_charinfo(nm); + if (type == TOKEN_NUMBERED_CHAR) +@@ -6070,6 +6150,11 @@ + case TOKEN_CHAR: + *pp = (*pp)->add_char(charset_table[c], curenv, &w, &s); + break; ++#ifdef ENABLE_MULTIBYTE ++ case TOKEN_WCHAR: ++ *pp = (*pp)->add_char(wcharset_table_entry(wc), curenv, &w, &s); ++ break; ++#endif + case TOKEN_DUMMY: + n = new dummy_node; + break; +@@ -6142,6 +6227,11 @@ + case TOKEN_CHAR: + curenv->add_char(charset_table[c]); + break; ++#ifdef ENABLE_MULTIBYTE ++ case TOKEN_WCHAR: ++ curenv->add_char(wcharset_table_entry(wc)); ++ break; ++#endif + case TOKEN_DUMMY: + curenv->add_node(new dummy_node); + break; +@@ -6900,6 +6990,7 @@ + if (!safer_flag) + mac_path = ¯o_path; + set_string(".T", device); ++ init_encoding_handler(); + init_charset_table(); + init_hpf_code_table(); + if (!font::load_desc()) +@@ -6924,6 +7015,9 @@ + // In the DESC file a font name of 0 (zero) means leave this + // position empty. + if (strcmp(font::font_name_table[i], "0") != 0) ++#ifdef ENABLE_MULTIBYTE ++ if (!font::is_on_demand(i)) ++#endif + mount_font(j, symbol(font::font_name_table[i])); + curdiv = topdiv = new top_level_diversion; + if (nflag) +@@ -7081,6 +7175,9 @@ + init_request("ecs", save_escape_char); + init_request("el", else_request); + init_request("em", end_macro); ++#ifdef ENABLE_MULTIBYTE ++ init_request("encoding", select_encoding); ++#endif + init_request("eo", escape_off); + init_request("ex", exit_request); + init_request("fchar", define_fallback_character); +@@ -7533,12 +7630,92 @@ + + dictionary charinfo_dictionary(501); + ++#ifdef ENABLE_MULTIBYTE ++struct charinfo_list { ++ struct charinfo_list *next; ++ charinfo *ci; ++} *wcharset_table = NULL; ++ ++/* XXX: use more efficient method? */ ++static charinfo* ++lookup_wcharset_table(wchar wc) ++{ ++ struct charinfo_list *cl; ++ for (cl = wcharset_table; cl; cl = cl->next) { ++ if (cl->ci && cl->ci->get_wchar_code() == wc) ++ return cl->ci; ++ } ++ return NULL; ++} ++ ++static void ++add_wcharset_table(charinfo *ci) ++{ ++ struct charinfo_list *cl = new struct charinfo_list; ++ cl->next = wcharset_table; ++ cl->ci = ci; ++ wcharset_table = cl; ++} ++ ++charinfo *wcharset_table_entry(wchar wc) ++{ ++ if (! is_wchar_code(wc)) ++ return NULL; ++ charinfo *cp = lookup_wcharset_table(wc); ++ if (cp == NULL) { ++ int i = wchar_code(wc); ++ char buf[16]; ++ if (i > 0x100) ++ sprintf(buf, "u%04X", i); ++ else { ++ cp = get_charinfo_by_number(i); ++ if (cp != NULL) ++ return cp; ++ sprintf(buf, "char%d", i); // ??? ++ } ++ symbol nm = symbol(buf); ++ cp = new charinfo(nm); ++ (void)charinfo_dictionary.lookup(nm, cp); ++ cp->set_wchar_code(wc); ++ add_wcharset_table(cp); ++ } ++ return cp; ++} ++ ++static charinfo * ++wchar_charinfo(symbol nm) ++{ ++ const char *p = nm.contents(); ++ if (*p != 'u') { ++ return NULL; ++ } ++ char *pp; ++ wchar wc = make_wchar(strtol(p + 1, &pp, 16)); ++ if (pp < p + 5) ++ return NULL; ++ charinfo *cp = lookup_wcharset_table(wc); ++ if (cp) ++ return cp; ++ /* create on demand */ ++ cp = new charinfo(nm); ++ cp->set_wchar_code(wc); ++ add_wcharset_table(cp); ++ return cp; ++} ++#endif ++ + charinfo *get_charinfo(symbol nm) + { + void *p = charinfo_dictionary.lookup(nm); + if (p != 0) + return (charinfo *)p; ++#ifdef ENABLE_MULTIBYTE ++ charinfo *cp = wchar_charinfo(nm); ++ if (cp == NULL) ++ cp = new charinfo(nm); ++#else + charinfo *cp = new charinfo(nm); ++#endif + (void)charinfo_dictionary.lookup(nm, cp); + return cp; + } +@@ -7548,6 +7725,9 @@ + charinfo::charinfo(symbol s) + : translation(0), mac(0), special_translation(TRANSLATE_NONE), + hyphenation_code(0), flags(0), ascii_code(0), asciify_code(0), ++#ifdef ENABLE_MULTIBYTE ++ wchar_code(0), ++#endif + not_found(0), transparent_translate(1), translate_input(0), + fallback(0), nm(s) + { +@@ -7592,6 +7772,14 @@ + asciify_code = c; + } + ++#ifdef ENABLE_MULTIBYTE ++void charinfo::set_wchar_code(wchar wc) ++{ ++ wchar_code = wc; ++ index = wc; /* XXX: wchar code == index */ ++} ++#endif ++ + macro *charinfo::set_macro(macro *m, int f) + { + macro *tem = mac; +@@ -7647,6 +7835,13 @@ + int font::name_to_index(const char *nm) + { + charinfo *ci; ++#ifdef ENABLE_MULTIBYTE ++ int i = 1; ++ wchar wc = input_encoding->make_wchar(nm[0], (const unsigned char *)nm, &i); ++ if (is_wchar_code(wc)) { ++ ci = wcharset_table_entry(wc); ++ } else ++#endif + if (nm[1] == 0) + ci = charset_table[nm[0] & 0xff]; + else if (nm[0] == '\\' && nm[2] == 0) +@@ -7663,3 +7858,10 @@ + { + return get_charinfo_by_number(n)->get_index(); + } ++ ++#ifdef ENABLE_MULTIBYTE ++int font::wchar_index(wchar wc) ++{ ++ return(wcharset_table_entry(wc)->get_index()); ++} ++#endif +--- groff-1.18.1.orig/src/roff/troff/node.cc ++++ groff-1.18.1/src/roff/troff/node.cc +@@ -38,6 +38,7 @@ + #include "input.h" + #include "div.h" + #include "geometry.h" ++#include "encoding.h" + + #include "nonposix.h" + +@@ -745,8 +746,15 @@ + int current_font_number; + symbol *font_position; + int nfont_positions; ++#ifdef ENABLE_MULTIBYTE ++ const char *current_encoding; ++#endif + enum { TBUF_SIZE = 256 }; ++#ifdef ENABLE_MULTIBYTE ++ wchar tbuf[TBUF_SIZE]; ++#else + char tbuf[TBUF_SIZE]; ++#endif + int tbuf_len; + int tbuf_kern; + int begun_page; +@@ -756,6 +764,9 @@ + void put(int i); + void put(unsigned int i); + void put(const char *s); ++#ifdef ENABLE_MULTIBYTE ++ void putw(const wchar wc); ++#endif + void set_font(tfont *tf); + void flush_tbuf(); + public: +@@ -799,6 +810,13 @@ + putc(c, fp); + } + ++#ifdef ENABLE_MULTIBYTE ++inline void troff_output_file::putw(wchar wc) ++{ ++ output_encoding->put_wchar(wc, fp); ++} ++#endif ++ + inline void troff_output_file::put(unsigned char c) + { + putc(c, fp); +@@ -956,7 +974,11 @@ + check_output_limits(hpos, vpos - current_size); + + for (int i = 0; i < tbuf_len; i++) ++#ifdef ENABLE_MULTIBYTE ++ putw(tbuf[i]); ++#else + put(tbuf[i]); ++#endif + put('\n'); + tbuf_len = 0; + } +@@ -988,7 +1010,13 @@ + flush_tbuf(); + set_font(tf); + } ++#ifdef ENABLE_MULTIBYTE ++ wchar c = ci->get_wchar_code(); ++ if (c == '\0') ++ c = ci->get_ascii_code(); ++#else + char c = ci->get_ascii_code(); ++#endif + if (c == '\0') { + flush_tbuf(); + do_motion(); +@@ -1014,7 +1042,8 @@ + } + else if (tcommand_flag) { + if (tbuf_len > 0 && hpos == output_hpos && vpos == output_vpos +- && gcol == current_glyph_color && fcol == current_fill_color ++ && (!gcol || gcol == current_glyph_color) ++ && (!fcol || fcol == current_fill_color) + && kk == tbuf_kern + && tbuf_len < TBUF_SIZE) { + check_charinfo(tf, ci); +@@ -1039,17 +1068,26 @@ + check_charinfo(tf, ci); + // check_output_limits(output_hpos, output_vpos); + if (vpos == output_vpos +- && gcol == current_glyph_color && fcol == current_fill_color ++ && (!gcol || gcol == current_glyph_color) ++ && (!fcol || fcol == current_fill_color) + && n > 0 && n < 100 && !force_motion) { + put(char(n/10 + '0')); + put(char(n%10 + '0')); ++#ifdef ENABLE_MULTIBYTE ++ putw(c); ++#else + put(c); ++#endif + output_hpos = hpos; + } + else { + do_motion(); + put('c'); ++#ifdef ENABLE_MULTIBYTE ++ putw(c); ++#else + put(c); ++#endif + } + hpos += w.to_units() + kk; + } +@@ -1063,7 +1101,13 @@ + return; + if (tf != current_tfont) + set_font(tf); ++#ifdef ENABLE_MULTIBYTE ++ wchar c = ci->get_wchar_code(); ++ if (c == '\0') ++ c = ci->get_ascii_code(); ++#else + char c = ci->get_ascii_code(); ++#endif + if (c == '\0') { + do_motion(); + glyph_color(gcol); +@@ -1087,11 +1131,16 @@ + else { + int n = hpos - output_hpos; + if (vpos == output_vpos +- && gcol == current_glyph_color && fcol == current_fill_color ++ && (!gcol || gcol == current_glyph_color) ++ && (!fcol || fcol == current_fill_color) + && n > 0 && n < 100) { + put(char(n/10 + '0')); + put(char(n%10 + '0')); ++#ifdef ENABLE_MULTIBYTE ++ putw(c); ++#else + put(c); ++#endif + output_hpos = hpos; + } + else { +@@ -1099,13 +1148,26 @@ + glyph_color(gcol); + fill_color(fcol); + put('c'); ++#ifdef ENABLE_MULTIBYTE ++ putw(c); ++#else + put(c); ++#endif + } + } + } + + void troff_output_file::set_font(tfont *tf) + { ++#ifdef ENABLE_MULTIBYTE ++ /* XXX */ ++ if (current_encoding != output_encoding->name()) { ++ put("x encoding "); ++ put(output_encoding->name()); ++ put('\n'); ++ current_encoding = output_encoding->name(); ++ } ++#endif + if (current_tfont == tf) + return; + int n = tf->get_input_position(); +@@ -1162,7 +1224,7 @@ + + void troff_output_file::fill_color(color *col) + { +- if ((current_fill_color == col) || !color_flag) ++ if (!col || current_fill_color == col || !color_flag) + return; + flush_tbuf(); + put("DF"); +@@ -1210,7 +1272,7 @@ + + void troff_output_file::glyph_color(color *col) + { +- if ((current_glyph_color == col) || !color_flag) ++ if (!col || current_glyph_color == col || !color_flag) + return; + flush_tbuf(); + put("m"); +@@ -1497,7 +1559,17 @@ + put(' '); + put(vresolution); + put('\n'); ++#ifdef ENABLE_MULTIBYTE ++ current_encoding = output_encoding->name(); ++ put("x init"); ++ if (current_encoding && *current_encoding != '\0') { ++ put(' '); ++ put(current_encoding); ++ } ++ put('\n'); ++#else + put("x init\n"); ++#endif + } + + /* output_file */ +@@ -1777,6 +1849,9 @@ + int same(node *); + const char *type(); + int force_tprint(); ++#ifdef ENABLE_MULTIBYTE ++ node_type get_node_type(); ++#endif + }; + + glyph_node *glyph_node::free_list = 0; +@@ -1802,6 +1877,9 @@ + int same(node *); + const char *type(); + int force_tprint(); ++#ifdef ENABLE_MULTIBYTE ++ node_type get_node_type(); ++#endif + }; + + class kern_pair_node : public node { +@@ -5225,6 +5303,55 @@ + return 0; + } + ++#ifdef ENABLE_MULTIBYTE ++kword_space_node::kword_space_node(color *c, node *x) : word_space_node(0, c, new width_list(0, 0), x) ++{} ++ ++node *kword_space_node::copy() ++{ ++ return new kword_space_node(col); ++} ++newline_space_node::newline_space_node(hunits d, color *c, node *x) : word_space_node(d, c, new width_list(0, 0), x) ++{} ++ ++node *newline_space_node::copy() ++{ ++ return new newline_space_node(n, col); ++} ++ ++const char *kword_space_node::type() ++{ ++ return "kword_space_node"; ++} ++const char *newline_space_node::type() ++{ ++ return "newline_space_node"; ++} ++ ++node_type node::get_node_type() ++{ ++ return NODE_ANOTHER; ++} ++node_type glyph_node::get_node_type() ++{ ++ return NODE_GLYPH; ++} ++ ++node_type ligature_node::get_node_type() ++{ ++ return NODE_ANOTHER; ++} ++ ++node_type kword_space_node::get_node_type() ++{ ++ return NODE_KWORD_SPACE; ++} ++node_type newline_space_node::get_node_type() ++{ ++ return NODE_NEWLINE_SPACE; ++} ++#endif ++ + int unbreakable_space_node::same(node *nd) + { + return n == ((unbreakable_space_node *)nd)->n +@@ -5625,6 +5752,28 @@ + return 0; + } + ++#ifdef ENABLE_MULTIBYTE ++int get_fontset_fontno(int n, wchar wc) ++{ ++ if (n >= 0 && n < font_table_size && font_table[n] != 0) { ++ /* XXX: external_name should be used? */ ++ int fn = font::get_fontset_font(font_table[n]->get_name().contents(), wc); ++ if (fn >= 0) { ++ symbol nm(font::font_name_table[fn]); ++ int nn = symbol_fontno(nm); ++ if (nn < 0) { ++ nn = next_available_font_position(); ++ if (!mount_font(nn, nm)) { ++ return -1; /* XXX */ ++ } ++ } ++ return nn; ++ } ++ } ++ return n; ++} ++#endif ++ + hunits env_digit_width(environment *env) + { + node *n = make_glyph_node(charset_table['0'], env); +--- groff-1.18.1.orig/src/roff/troff/node.h ++++ groff-1.18.1/src/roff/troff/node.h +@@ -20,6 +20,8 @@ + Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + ++#include "config.h" ++ + struct hyphen_list { + unsigned char hyphen; + unsigned char breakable; +@@ -31,6 +33,9 @@ + void hyphenate(hyphen_list *, unsigned); + + enum hyphenation_type { HYPHEN_MIDDLE, HYPHEN_BOUNDARY, HYPHEN_INHIBIT }; ++#ifdef ENABLE_MULTIBYTE ++enum node_type {NODE_GLYPH, NODE_KWORD_SPACE, NODE_NEWLINE_SPACE, NODE_ANOTHER}; ++#endif + + class ascii_output_file; + +@@ -106,6 +111,9 @@ + + virtual int same(node *) = 0; + virtual const char *type() = 0; ++#ifdef ENABLE_MULTIBYTE ++ virtual node_type get_node_type(); ++#endif + }; + + inline node::node() +@@ -212,6 +220,24 @@ + int force_tprint(); + }; + ++#ifdef ENABLE_MULTIBYTE ++class kword_space_node : public word_space_node { ++public: ++ kword_space_node(color *, node * = 0); ++ node *copy(); ++ const char *type(); ++ node_type get_node_type(); ++}; ++ ++class newline_space_node : public word_space_node { ++public: ++ newline_space_node(hunits, color *, node * = 0); ++ node *copy(); ++ const char *type(); ++ node_type get_node_type(); ++}; ++#endif ++ + class unbreakable_space_node : public word_space_node { + unbreakable_space_node(hunits, int, color *, node * = 0); + public: +@@ -538,6 +564,9 @@ + node *copy_node_list(node *); + + int get_bold_fontno(int f); ++#ifdef ENABLE_MULTIBYTE ++int get_fontset_fontno(int f, wchar wc); ++#endif + + inline hyphen_list::hyphen_list(unsigned char code, hyphen_list *p) + : hyphen(0), breakable(0), hyphenation_code(code), next(p) +@@ -595,3 +624,4 @@ + + font_family *lookup_family(symbol); + symbol get_font_name(int, environment *); ++ +--- groff-1.18.1.orig/src/roff/troff/token.h ++++ groff-1.18.1/src/roff/troff/token.h +@@ -28,12 +28,18 @@ + symbol nm; + node *nd; + unsigned char c; ++#ifdef ENABLE_MULTIBYTE ++ wchar wc; ++#endif + int val; + units dim; + enum token_type { + TOKEN_BACKSPACE, + TOKEN_BEGIN_TRAP, + TOKEN_CHAR, // a normal printing character ++#ifdef ENABLE_MULTIBYTE ++ TOKEN_WCHAR, // a multibyte character ++#endif + TOKEN_DUMMY, // \& + TOKEN_EMPTY, // this is the initial value + TOKEN_END_TRAP, +--- groff-1.18.1.orig/src/roff/troff/troff.h ++++ groff-1.18.1/src/roff/troff/troff.h +@@ -28,6 +28,7 @@ + #include <stdlib.h> + #include <errno.h> + ++#include "encoding.h" + #include "assert.h" + #include "color.h" + #include "device.h" +--- groff-1.18.1.orig/src/roff/nroff/nroff.man ++++ groff-1.18.1/src/roff/nroff/nroff.man +@@ -53,8 +53,10 @@ + command using groff. + Only + .BR ascii , ++.BR ascii8 , + .BR latin1 , + .BR utf8 , ++.BR nippon , + and + .B cp1047 + are valid arguments for the +--- groff-1.18.1.orig/src/roff/nroff/nroff.sh ++++ groff-1.18.1/src/roff/nroff/nroff.sh +@@ -12,6 +12,8 @@ + T=-Tlatin1 ;; + IBM-1047) + T=-Tcp1047 ;; ++ EUC-JP) ++ T=-Tnippon ;; + *) + case "${LC_ALL-${LC_CTYPE-${LANG}}}" in + *.UTF-8) +@@ -20,6 +22,8 @@ + T=-Tlatin1 ;; + *.IBM-1047) + T=-Tcp1047 ;; ++ ja_JP.ujis | ja_JP.eucJP) ++ T=-Tnippon ;; + *) + case "$LESSCHARSET" in + utf-8) +@@ -28,8 +32,10 @@ + T=-Tlatin1 ;; + cp1047) + T=-Tcp1047 ;; ++ japanese) ++ T=-Tnippon ;; + *) +- T=-Tascii ;; ++ T=-Tascii8 ;; + esac ;; + esac ;; + esac +@@ -52,7 +58,7 @@ + exit 1 ;; + -[iptSUC] | -[mrno]*) + opts="$opts $1" ;; +- -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047) ++ -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047 | -Tascii8 | -Tnippon) + T=$1 ;; + -T*) + # ignore other devices +--- groff-1.18.1.orig/src/preproc/eqn/eqn.y ++++ groff-1.18.1/src/preproc/eqn/eqn.y +@@ -21,6 +21,7 @@ + #include <string.h> + #include <stdlib.h> + ++#include "encoding.h" /* XXX */ + #include "lib.h" + #include "box.h" + extern int non_empty_flag; +--- groff-1.18.1.orig/src/preproc/eqn/lex.cc ++++ groff-1.18.1/src/preproc/eqn/lex.cc +@@ -23,6 +23,7 @@ + #include "eqn_tab.h" + #include "stringclass.h" + #include "ptable.h" ++#include "encoding.h" + + struct definition { + char is_macro; +@@ -375,6 +376,11 @@ + lex_error("invalid input character code %1", c); + else { + line += char(c); ++#ifdef ENABLE_MULTIBYTE ++ if (input_encoding->is_wchar_byte(c)) { ++ line += char(getc(fp)); ++ } ++#endif + if (c == '\n') + break; + } +--- groff-1.18.1.orig/src/preproc/eqn/main.cc ++++ groff-1.18.1/src/preproc/eqn/main.cc +@@ -258,6 +258,7 @@ + program_name = argv[0]; + static char stderr_buf[BUFSIZ]; + setbuf(stderr, stderr_buf); ++ init_encoding_handler(); + int opt; + int load_startup_file = 1; + static const struct option long_options[] = { +--- groff-1.18.1.orig/src/preproc/eqn/text.cc ++++ groff-1.18.1/src/preproc/eqn/text.cc +@@ -21,13 +21,20 @@ + #include "eqn.h" + #include "pbox.h" + #include "ptable.h" ++#include "encoding.h" + + class char_box : public simple_box { + unsigned char c; ++#ifdef ENABLE_MULTIBYTE ++ wchar wc; ++#endif + char next_is_italic; + char prev_is_italic; + public: + char_box(unsigned char); ++#ifdef ENABLE_MULTIBYTE ++ char_box(unsigned char, wchar); ++#endif + void debug_print(); + void output(); + int is_char(); +@@ -165,11 +172,22 @@ + } + + char_box::char_box(unsigned char cc) +-: c(cc), next_is_italic(0), prev_is_italic(0) ++: c(cc), ++#ifdef ENABLE_MULTIBYTE ++ wc(cc), ++#endif ++ next_is_italic(0), prev_is_italic(0) + { + spacing_type = char_table[c].spacing_type; + } + ++#ifdef ENABLE_MULTIBYTE ++char_box::char_box(unsigned char cc, wchar wc) ++: c(cc), wc(wc), next_is_italic(0), prev_is_italic(0) ++{ ++} ++#endif ++ + void char_box::hint(unsigned flags) + { + if (flags & HINT_PREV_IS_ITALIC) +@@ -188,7 +206,11 @@ + if (c == '\\') + fputs("\\e", stdout); + else ++#ifdef ENABLE_MULTIBYTE ++ output_encoding->put_wchar(wc, stdout); ++#else + putchar(c); ++#endif + if (!next_is_italic) + fputs("\\/", stdout); + else +@@ -497,6 +519,14 @@ + break; + default: + normal_char: ++#ifdef ENABLE_MULTIBYTE ++ if (input_encoding->is_wchar_byte(c)) { ++ int i = 1; ++ wchar wc = input_encoding->make_wchar(c, (unsigned char *)s, &i); ++ b = new char_box('A', wc); // char_info of wc is same the 'A'. ++ s += i; ++ } else ++#endif + b = new char_box(c); + break; + } +--- groff-1.18.1.orig/src/preproc/html/pre-html.cc ++++ groff-1.18.1/src/preproc/html/pre-html.cc +@@ -63,6 +63,10 @@ + #define DEFAULT_IMAGE_RES 100 // number of pixels per inch resolution + #define IMAGE_BOARDER_PIXELS 0 + #define INLINE_LEADER_CHAR '\\' ++#define A4_LENGTH 841890 // taken from devps/Makefile.sub ++#define LETTER_LENGTH 792000 // taken from devps/Makefile.sub ++#define A4_OFFSET 0 ++#define LETTER_OFFSET 50 // 50/72 of an inch + + #define TRANSPARENT "-background white -transparent white" + #define MIN_ALPHA_BITS 0 +@@ -104,6 +108,7 @@ + static char *macroset_template= NULL; // image template passed to troff by -D + static int troff_arg = 0; // troff arg index + static char *image_dir = NULL; // user specified image directory ++static char *gsPaper = NULL; // the paper size that gs must use + static int textAlphaBits = MAX_ALPHA_BITS; + static int graphicAlphaBits = MAX_ALPHA_BITS; + static char *antiAlias = NULL; // antialias arguments we pass to gs. +@@ -211,6 +216,54 @@ + } + + /* ++ * get_papersize - returns an integer determining the paper length from ++ * devps/DESC ++ */ ++ ++static int get_papersize (void) ++{ ++ char *pathp; ++ FILE *f; ++ int res; ++ f = font_path.open_file("devps/DESC", &pathp); ++ if (f == 0) ++ fatal("can't open devps/DESC"); ++ while (get_line(f)) { ++ int n = sscanf(linebuf, "paperlength %d", &res); ++ if (n >= 1) { ++ fclose(f); ++ return res; ++ } ++ if (!strncmp(linebuf, "papersize", 9)) { ++ double length; ++ char *p = linebuf + 9; ++ while (*p == ' ' || *p == '\t') ++ p++; ++ for (p = strtok(p, " \t"); p; p = strtok(0, " \t")) { ++ if (font::scan_papersize(p, 0, &length, 0)) { ++ fclose(f); ++ return int(length * postscriptRes + 0.5); ++ } ++ } ++ fatal("bad argument to `papersize' keyword in devps/DESC"); ++ } ++ } ++ fatal("can't find `papersize' or `paperlength' keyword in devps/DESC"); ++ return 0; ++} ++ ++/* ++ * determine_vertical_offset - works out the default vertical offset from ++ * the page length ++ */ ++ ++static void determine_vertical_offset (void) ++{ ++ vertical_offset = ((A4_LENGTH-get_papersize())*72)/postscriptRes; ++ gsPaper = "-sPAPERSIZE=a4"; ++} ++ ++/* + * html_system - a wrapper for system() + */ + +@@ -1469,6 +1522,7 @@ + int ok=1; + + postscriptRes = get_resolution(); ++ determine_vertical_offset(); + i = scanArguments(argc, argv); + setupAntiAlias(); + checkImageDir(); +--- groff-1.18.1.orig/src/devices/grops/ps.cc ++++ groff-1.18.1/src/devices/grops/ps.cc +@@ -24,6 +24,7 @@ + #include "cset.h" + #include "nonposix.h" + #include "paper.h" ++#include "encoding.h" + + #include "ps.h" + #include <time.h> +@@ -193,12 +194,23 @@ + return *this; + } + ++#ifdef ENABLE_MULTIBYTE ++ps_output &ps_output::put_string(const wchar *s, int n) ++#else + ps_output &ps_output::put_string(const char *s, int n) ++#endif + { + int len = 0; + int i; + for (i = 0; i < n; i++) { ++#ifdef ENABLE_MULTIBYTE ++ wchar wc = s[i]; ++ char c = 0; ++ if (is_wchar_singlebyte(wc)) ++ c = wchar_singlebyte(wc); ++#else + char c = s[i]; ++#endif + if (is_ascii(c) && csprint(c)) { + if (c == '(' || c == ')' || c == '\\') + len += 2; +@@ -224,8 +236,13 @@ + putc('\n', fp); + col = 0; + } ++#ifdef ENABLE_MULTIBYTE ++ int nb = output_encoding->put_wchar(s[i], fp, "%02x"); ++ col += nb * 2; ++#else + fprintf(fp, "%02x", s[i] & 0377); + col += 2; ++#endif + } + putc('>', fp); + col++; +@@ -396,6 +413,9 @@ + int encoding_index; + char *encoding; + char *reencoded_name; ++#ifdef ENABLE_MULTIBYTE ++ char *encodingname; ++#endif + ~ps_font(); + void handle_unknown_font_command(const char *command, const char *arg, + const char *filename, int lineno); +@@ -414,6 +434,9 @@ + + ps_font::ps_font(const char *nm) + : font(nm), encoding_index(-1), encoding(0), reencoded_name(0) ++#ifdef ENABLE_MULTIBYTE ++ , encodingname(0) ++#endif + { + } + +@@ -421,6 +444,9 @@ + { + a_delete encoding; + a_delete reencoded_name; ++#ifdef ENABLE_MULTIBYTE ++ a_delete encodingname; ++#endif + } + + void ps_font::handle_unknown_font_command(const char *command, const char *arg, +@@ -433,6 +459,15 @@ + else + encoding = strsave(arg); + } ++#ifdef ENABLE_MULTIBYTE ++ if (strcmp(command, "encodingname") == 0) { ++ if (arg == 0) ++ error_with_file_and_line(filename, lineno, ++ "`encodingname' command requires an argument"); ++ else ++ encodingname = strsave(arg); ++ } ++#endif + } + + static void handle_unknown_desc_command(const char *command, const char *arg, +@@ -487,7 +522,11 @@ + int paper_length; + int equalise_spaces; + enum { SBUF_SIZE = 256 }; ++#ifdef ENABLE_MULTIBYTE ++ wchar sbuf[SBUF_SIZE]; ++#else + char sbuf[SBUF_SIZE]; ++#endif + int sbuf_len; + int sbuf_start_hpos; + int sbuf_vpos; +@@ -606,7 +645,11 @@ + { + if (i == space_char_index || invis_count > 0) + return; ++#ifdef ENABLE_MULTIBYTE ++ wchar code = f->get_code(i); ++#else + unsigned char code = f->get_code(i); ++#endif + style sty(f, env->size, env->height, env->slant); + if (sty.slant != 0) { + if (sty.slant > 80 || sty.slant < -80) { +@@ -763,6 +806,14 @@ + if (sty == defined_styles[i]) { + sprintf(buf, "F%d", i); + out.put_symbol(buf); ++#ifdef ENABLE_MULTIBYTE ++ char *encodingname = ((ps_font *)sty.f)->encodingname; ++ if (encodingname != 0) { ++ select_output_encoding_handler(encodingname); ++ } else { ++ select_output_encoding_handler("LATIN1"); ++ } ++#endif + return; + } + if (ndefined_styles >= MAX_DEFINED_STYLES) +@@ -772,6 +823,14 @@ + const char *psname = sty.f->get_internal_name(); + if (psname == 0) + fatal("no internalname specified for font `%1'", sty.f->get_name()); ++#ifdef ENABLE_MULTIBYTE ++ char *encodingname = ((ps_font *)sty.f)->encodingname; ++ if (encodingname != 0) { ++ select_output_encoding_handler(encodingname); ++ } else { ++ select_output_encoding_handler("LATIN1"); ++ } ++#endif + char *encoding = ((ps_font *)sty.f)->encoding; + if (encoding != 0) { + char *s = ((ps_font *)sty.f)->reencoded_name; +@@ -1555,6 +1614,7 @@ + string env; + static char stderr_buf[BUFSIZ]; + setbuf(stderr, stderr_buf); ++ init_encoding_handler(); + int c; + static const struct option long_options[] = { + { "help", no_argument, 0, CHAR_MAX + 1 }, +--- groff-1.18.1.orig/src/devices/grops/ps.h ++++ groff-1.18.1/src/devices/grops/ps.h +@@ -18,10 +18,16 @@ + with groff; see the file COPYING. If not, write to the Free Software + Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + ++#include "encoding.h" // XXX ++ + class ps_output { + public: + ps_output(FILE *, int max_line_length); ++#ifdef ENABLE_MULTIBYTE ++ ps_output &put_string(const wchar *, int); ++#else + ps_output &put_string(const char *, int); ++#endif + ps_output &put_number(int); + ps_output &put_fix_number(int); + ps_output &put_float(double); +--- groff-1.18.1.orig/src/devices/grotty/grotty.man ++++ groff-1.18.1/src/devices/grotty/grotty.man +@@ -50,7 +50,9 @@ + command + with a + .BR \-Tascii , +-.B \-Tlatin1 ++.BR \-Tascii8 , ++.BR \-Tlatin1 , ++.B \-Tnippon + or + .B \-Tutf8 + option on ASCII based systems, and with +@@ -235,8 +237,10 @@ + .I name + is the name of the device, usually + .BR ascii , ++.BR ascii8 , + .BR latin1 , + .BR utf8 , ++.B nippon + or + .BR cp1047 . + .TP +@@ -315,10 +319,20 @@ + device. + . + .TP ++.B @FONTDIR@/devascii8/DESC ++Device description file for ++.B ascii8 ++device. ++.TP + .B @FONTDIR@/devlatin1/DESC + Device description file for + .B latin1 + device. ++.TP ++.B @FONTDIR@/devnippon/DESC ++Device description file for ++.B nippon ++device. + . + .TP + .BI @FONTDIR@/devlatin1/ F +--- groff-1.18.1.orig/src/devices/grotty/tty.cc ++++ groff-1.18.1/src/devices/grotty/tty.cc +@@ -20,6 +20,7 @@ + + #include "driver.h" + #include "device.h" ++#include "encoding.h" + + extern "C" const char *Version_string; + +@@ -51,8 +52,18 @@ + HDRAW_MODE = 0x08, + CU_MODE = 0x10, + COLOR_CHANGE = 0x20 ++#ifdef ENABLE_MULTIBYTE ++ , WCHAR_MODE = 0x100 ++#endif + }; + ++#ifdef ENABLE_MULTIBYTE ++# ifdef putchar ++# undef putchar ++# endif ++#define putchar(wc) output_encoding->put_wchar((wc), stdout) ++#endif ++ + // Mode to use for bold-underlining. + static unsigned char bold_underline_mode = BOLD_MODE|UNDERLINE_MODE; + +@@ -89,6 +100,7 @@ + static tty_font *load_tty_font(const char *); + }; + ++ + tty_font *tty_font::load_tty_font(const char *s) + { + tty_font *f = new tty_font(s); +@@ -98,8 +110,26 @@ + } + const char *num = f->get_internal_name(); + long n; ++#ifdef ENABLE_MULTIBYTE ++ if (num != 0) { ++ n = strtol(num, 0, 0); ++ switch (n) { ++ case 1: ++ f->mode = int(UNDERLINE_MODE); ++ break; ++ case 2: ++ case 5: ++ f->mode = int(BOLD_MODE); ++ break; ++ case 3: ++ f->mode = int(BOLD_MODE|UNDERLINE_MODE); ++ break; ++ } ++ } ++#else + if (num != 0 && (n = strtol(num, 0, 0)) != 0) + f->mode = int(n & (BOLD_MODE|UNDERLINE_MODE)); ++#endif + if (!underline_flag) + f->mode &= ~UNDERLINE_MODE; + if (!bold_flag) +@@ -135,6 +165,9 @@ + short hpos; + unsigned int code; + unsigned char mode; ++#ifdef ENABLE_MULTIBYTE ++ short cols; ++#endif + unsigned char back_color_idx; + unsigned char fore_color_idx; + void *operator new(size_t); +@@ -184,7 +217,7 @@ + void make_underline(); + void make_bold(unsigned int); + unsigned char color_to_idx(color *col); +- void add_char(unsigned int, int, int, color *, color *, unsigned char); ++ void add_char(unsigned int, int, int, color *, color *, font *, unsigned char); + public: + tty_printer(const char *device); + ~tty_printer(); +@@ -193,7 +226,7 @@ + void special(char *arg, const environment *env, char type); + void change_color(const environment *env); + void change_fill_color(const environment *env); +- void put_char(unsigned int); ++ int put_char(unsigned int); + void put_color(unsigned char, int); + void begin_page(int) { } + void end_page(int page_length); +@@ -203,6 +236,10 @@ + tty_printer::tty_printer(const char *device) : cached_v(0) + { + is_utf8 = !strcmp(device, "utf8"); ++#ifdef ENABLE_MULTIBYTE ++ if (is_utf8) ++ select_output_encoding_handler("UTF-8"); ++#endif + tty_colors[0].set_rgb(0, // black + 0, + 0); +@@ -242,8 +279,18 @@ + void tty_printer::make_underline() + { + if (old_drawing_scheme) { ++#if 0 /* def ENABLE_MULTIBYTE XXX: not necessary? */ ++ if ((p->mode & WCHAR_MODE)) { ++ putchar('_'); putchar('_'); ++ putchar('\b'); putchar('\b'); ++ } else { ++ putchar('_'); ++ putchar('\b'); ++ } ++#else + putchar('_'); + putchar('\b'); ++#endif + } + else { + if (!is_underline) { +@@ -285,17 +332,25 @@ + void tty_printer::set_char(int i, font *f, const environment *env, + int w, const char *name) + { ++#ifdef ENABLE_MULTIBYTE ++ if (is_wchar_code(i)) { ++ add_char(wchar_code(i), env->hpos, env->vpos, env->col, env->fill, ++ f, ((tty_font *)f)->get_mode()); ++ return; ++ } ++#endif + if (w != font::hor) + fatal("width of character not equal to horizontal resolution"); + add_char(f->get_code(i), + env->hpos, env->vpos, + env->col, env->fill, +- ((tty_font *)f)->get_mode()); ++ f, ((tty_font *)f)->get_mode()); + } + + void tty_printer::add_char(unsigned int c, + int h, int v, + color *fore, color *back, ++ font *curfont, + unsigned char mode) + { + #if 0 +@@ -338,6 +393,16 @@ + g->code = c; + g->fore_color_idx = color_to_idx(fore); + g->back_color_idx = color_to_idx(back); ++#ifdef ENABLE_MULTIBYTE ++ if (is_wchar_code(c)) ++ mode |= WCHAR_MODE; ++ if (curfont && curfont->contains(c)) { ++ int gw0 = curfont->get_space_width(font::unitwidth); ++ int gw = curfont->get_width(c, font::unitwidth); ++ g->cols = gw/gw0; ++ } else ++ g->cols = 1; /* XXX */ ++#endif + g->mode = mode; + + // The list will be reversed later. After reversal, it must be in +@@ -357,7 +422,7 @@ + void tty_printer::special(char *arg, const environment *env, char type) + { + if (type == 'u') { +- add_char(*arg - '0', env->hpos, env->vpos, env->col, env->fill, CU_MODE); ++ add_char(*arg - '0', env->hpos, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), CU_MODE); + return; + } + if (type != 'p') +@@ -395,12 +460,12 @@ + + void tty_printer::change_color(const environment *env) + { +- add_char(0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE); ++ add_char(0, env->hpos, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), COLOR_CHANGE); + } + + void tty_printer::change_fill_color(const environment *env) + { +- add_char(0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE); ++ add_char(0, env->hpos, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), COLOR_CHANGE); + } + + void tty_printer::draw(int code, int *p, int np, const environment *env) +@@ -420,7 +485,7 @@ + len = -len; + } + while (len >= 0) { +- add_char('|', env->hpos, v, env->col, env->fill, VDRAW_MODE); ++ add_char('|', env->hpos, v, env->col, env->fill, get_font_from_index(env->fontno), VDRAW_MODE); + len -= font::vert; + v += font::vert; + } +@@ -434,18 +499,24 @@ + len = -len; + } + while (len >= 0) { +- add_char('-', h, env->vpos, env->col, env->fill, HDRAW_MODE); ++ add_char('-', h, env->vpos, env->col, env->fill, get_font_from_index(env->fontno), HDRAW_MODE); + len -= font::hor; + h += font::hor; + } + } + } + +-void tty_printer::put_char(unsigned int wc) ++int tty_printer::put_char(unsigned int wc) + { ++#ifdef ENABLE_MULTIBYTE ++ if (wc >= 0x80) { ++ return output_encoding->put_wchar(make_wchar(wc), stdout); ++ } ++#else + if (is_utf8 && wc >= 0x80) { + char buf[6 + 1]; + int count; ++ int len; + char *p = buf; + if (wc < 0x800) + count = 1, *p = (unsigned char)((wc >> 6) | 0xc0); +@@ -458,14 +529,18 @@ + else if (wc <= 0x7fffffff) + count = 5, *p = (unsigned char)((wc >> 30) | 0xfC); + else +- return; ++ return 0; ++ len = count; + do *++p = (unsigned char)(((wc >> (6 * --count)) & 0x3f) | 0x80); + while (count > 0); + *++p = '\0'; + putstring(buf); ++ return len; + } ++#endif + else + putchar(wc); ++ return 1; + } + + void tty_printer::put_color(unsigned char color_index, int back) +@@ -629,7 +704,11 @@ + } + } + put_char(p->code); ++#ifdef ENABLE_MULTIBYTE ++ hpos += p->cols; ++#else + hpos++; ++#endif + } + if (!old_drawing_scheme + && (is_bold || is_underline +@@ -667,6 +746,7 @@ + if (getenv("GROFF_NO_SGR")) + old_drawing_scheme = 1; + setbuf(stderr, stderr_buf); ++ init_encoding_handler(); + int c; + static const struct option long_options[] = { + { "help", no_argument, 0, CHAR_MAX + 1 }, +--- groff-1.18.1.orig/src/devices/grodvi/dvi.cc ++++ groff-1.18.1/src/devices/grodvi/dvi.cc +@@ -21,6 +21,7 @@ + + #include "driver.h" + #include "nonposix.h" ++#include "encoding.h" + + extern "C" const char *Version_string; + +@@ -104,6 +105,9 @@ + struct output_font { + dvi_font *f; + int point_size; ++#ifdef ENABLE_MULTIBYTE ++ const char *sf; // subfont name ++#endif + output_font() : f(0) { } + }; + +@@ -121,6 +125,9 @@ + output_font output_font_table[FONTS_MAX]; + font *cur_font; + int cur_point_size; ++#ifdef ENABLE_MULTIBYTE ++ const char *cur_subfont; ++#endif + color cur_color; + int pushed; + int pushed_h; +@@ -341,9 +348,18 @@ + if (*env->col != cur_color) + set_color(env->col); + int code = f->get_code(index); ++#ifdef ENABLE_MULTIBYTE ++ const char *sf = f->get_subfont_name(index); ++ if (env->size != cur_point_size || f != cur_font || ++ (sf != cur_subfont && strcmp(sf, cur_subfont))) { ++#else + if (env->size != cur_point_size || f != cur_font) { ++#endif + cur_font = f; + cur_point_size = env->size; ++#ifdef ENABLE_MULTIBYTE ++ cur_subfont = sf; ++#endif + int i; + for (i = 0;; i++) { + if (i >= FONTS_MAX) { +@@ -352,9 +368,16 @@ + if (output_font_table[i].f == 0) { + output_font_table[i].f = (dvi_font *)cur_font; + output_font_table[i].point_size = cur_point_size; ++#ifdef ENABLE_MULTIBYTE ++ output_font_table[i].sf = cur_subfont; ++#endif + define_font(i); + } + if (output_font_table[i].f == cur_font ++#ifdef ENABLE_MULTIBYTE ++ && (output_font_table[i].sf == cur_subfont || ++ strcmp(output_font_table[i].sf, cur_subfont) == 0) ++#endif + && output_font_table[i].point_size == cur_point_size) + break; + } +@@ -398,7 +421,13 @@ + out4(f->checksum); + out4(output_font_table[i].point_size*RES_7227); + out4(int((double(f->design_size)/(1<<20))*RES_7227*100 + .5)); ++#ifdef ENABLE_MULTIBYTE ++ const char *nm; ++ if (!(nm = output_font_table[i].sf)) ++ nm = f->get_internal_name(); ++#else + const char *nm = f->get_internal_name(); ++#endif + out1(0); + out_string(nm); + } +@@ -889,6 +918,7 @@ + program_name = argv[0]; + static char stderr_buf[BUFSIZ]; + setbuf(stderr, stderr_buf); ++ init_encoding_handler(); + int c; + static const struct option long_options[] = { + { "help", no_argument, 0, CHAR_MAX + 1 }, +--- groff-1.18.1.orig/src/devices/grohtml/html.h ++++ groff-1.18.1/src/devices/grohtml/html.h +@@ -49,6 +49,9 @@ + class simple_output { + public: + simple_output(FILE *, int max_line_length); ++#ifdef ENABLE_MULTIBYTE ++ simple_output &put_string(const wchar *, int); ++#endif + simple_output &put_string(const char *, int); + simple_output &put_string(const char *s); + simple_output &put_string(const string &s); +--- groff-1.18.1.orig/src/devices/grohtml/post-html.cc ++++ groff-1.18.1/src/devices/grohtml/post-html.cc +@@ -29,6 +29,7 @@ + #include "html.h" + #include "html-text.h" + #include "html-table.h" ++#include "encoding.h" // XXX: ukai + + #include <time.h> + +@@ -280,6 +281,9 @@ + public: + char_buffer(); + ~char_buffer(); ++#ifdef ENABLE_MULTIBYTE ++ char *add_string(const wchar *, unsigned int); ++#endif + char *add_string(const char *, unsigned int); + char *add_string(const string &); + private: +@@ -301,6 +305,43 @@ + } + } + ++#ifdef ENABLE_MULTIBYTE ++char *char_buffer::add_string (const wchar *s, unsigned int length) ++{ ++ int i=0; ++ unsigned int old_used; ++ ++ if (tail == 0) { ++ tail = new char_block; ++ head = tail; ++ } else { ++ if (tail->used + length*2 + 1 > char_block::SIZE) { ++ tail->next = new char_block; ++ tail = tail->next; ++ } ++ } ++ // at this point we have a tail which is ready for the string. ++ if (tail->used + length*2 + 1 > char_block::SIZE) { ++ fatal("need to increase char_block::SIZE"); ++ } ++ ++ old_used = tail->used; ++ do { ++ length -= output_encoding->put_wchar(s[i], (unsigned char *)tail->buffer, &tail->used, length*2); ++ i++; ++ } while (length>0); ++ ++ // add terminating nul character ++ ++ tail->buffer[tail->used] = '\0'; ++ tail->used++; ++ ++ // and return start of new string ++ ++ return( &tail->buffer[old_used] ); ++} ++#endif ++ + char *char_buffer::add_string (const char *s, unsigned int length) + { + int i=0; +@@ -320,6 +361,7 @@ + } + + old_used = tail->used; ++ /* XXX: encoding - ukai */ + do { + tail->buffer[tail->used] = s[i]; + tail->used++; +@@ -1917,6 +1959,15 @@ + + current_paragraph->do_para(&html, "", indentation, pageoffset, linelength); + } ++#if 0 // def ENABLE_MULTIBYTE /* XXX */ ++ else if (strcmp(fontname, "M") == 0) { ++ current_paragraph->done_bold(); ++ current_paragraph->done_italic(); ++ current_paragraph->done_tt(); ++ } else if (strcmp(fontname, "G") == 0) { ++ current_paragraph->do_bold(); ++ } ++#endif + } + + void html_printer::determine_header_level (int level) +@@ -2948,6 +2999,11 @@ + current_paragraph->done_italic(); + current_paragraph->done_tt(); + } ++#ifdef ENABLE_MULTIBYTE ++ else if (strcmp(fontname, "G") == 0) { ++ current_paragraph->done_bold(); ++ } ++#endif + } + + /* +@@ -2992,6 +3048,15 @@ + current_paragraph->do_italic(); + current_paragraph->do_bold(); + } ++#ifdef ENABLE_MULTIBYTE ++ else if (strcmp(fontname, "M") == 0) { ++ current_paragraph->done_bold(); ++ current_paragraph->done_italic(); ++ current_paragraph->done_tt(); ++ } else if (strcmp(fontname, "G") == 0) { ++ current_paragraph->do_bold(); ++ } ++#endif + } + + /* +@@ -3331,7 +3396,23 @@ + + last_sbuf_length = sbuf.length(); + if (html_glyph == NULL) ++#ifdef ENABLE_MULTIBYTE ++ { ++ if (is_wchar_code(code)) { ++ int mblen = output_encoding->max_wchar_len(); ++ unsigned char *wbuf = new unsigned char[mblen]; ++ int i = 0, j = 0; ++ output_encoding->put_wchar(code, wbuf, &j, mblen); ++ for (i = 0; i < j; i++) { ++ sbuf += wbuf[i]; ++ } ++ } ++ else ++ sbuf += ((char)code); ++ } ++#else + sbuf += ((char)code); ++#endif + else + sbuf += html_glyph; + } +@@ -3445,12 +3526,12 @@ + return; + + flush_sbuf(); ++ sbuf_style = sty; /* XXX? */ + add_to_sbuf(i, name); + sbuf_end_hpos = env->hpos + w; + sbuf_start_hpos = env->hpos; + sbuf_prev_hpos = env->hpos; + sbuf_vpos = env->vpos; +- sbuf_style = sty; + sbuf_kern = 0; + } + +@@ -3659,6 +3740,7 @@ + program_name = argv[0]; + static char stderr_buf[BUFSIZ]; + setbuf(stderr, stderr_buf); ++ init_encoding_handler(); + int c; + static const struct option long_options[] = { + { "help", no_argument, 0, CHAR_MAX + 1 }, +--- groff-1.18.1.orig/src/xditview/Dvi.c ++++ groff-1.18.1/src/xditview/Dvi.c +@@ -4,6 +4,8 @@ + #endif /* lint */ + #endif /* SABER */ + ++#include "config.h" ++ + /* + * Dvi.c - Dvi display widget + * +@@ -49,6 +51,8 @@ + NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\ + S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\ + SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\ ++M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\n\ ++G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\ + "; + + #define offset(field) XtOffset(DviWidget, field) +@@ -94,6 +98,20 @@ + + static void SaveToFile (); + ++/* font.c */ ++extern void ParseFontMap(); ++extern void DestroyFontMap(); ++extern void ForgetFonts(); ++ ++/* page.c */ ++extern void DestroyFileMap(); ++extern int SearchPagePosition(); ++extern void FileSeek(); ++extern void ForgetPagePositions(); ++ ++/* parse.c */ ++extern int ParseInput(); ++ + DviClassRec dviClassRec = { + { + &widgetClassRec, /* superclass */ +@@ -406,6 +424,7 @@ + return ret; + } + ++void + SetDevice (dw, name) + DviWidget dw; + char *name; +@@ -559,6 +578,9 @@ + DviWidgetClass super = (DviWidgetClass) wc->core_class.superclass; + if (wc->command_class.save == InheritSaveToFile) + wc->command_class.save = super->command_class.save; ++#ifdef ENABLE_MULTIBYTE ++ DviInitLocale(); ++#endif + } + + /* +--- groff-1.18.1.orig/src/xditview/DviChar.c ++++ groff-1.18.1/src/xditview/DviChar.c +@@ -5,7 +5,10 @@ + * font indexes and back + */ + +-#include "DviChar.h" ++#include <stdlib.h> ++#include "config.h" ++#include "DviChar.h" ++#include "encoding.h" + + extern char *xmalloc(); + +@@ -21,7 +24,7 @@ + static int standard_maps_loaded = 0; + static void load_standard_maps (); + static int hash_name (); +-static dispose_hash(), compute_hash(); ++static void dispose_hash(), compute_hash(); + + DviCharNameMap * + DviFindMap (encoding) +@@ -58,7 +61,7 @@ + compute_hash (map); + } + +-static ++static void + dispose_hash (map) + DviCharNameMap *map; + { +@@ -88,7 +91,7 @@ + return i; + } + +-static ++static void + compute_hash (map) + DviCharNameMap *map; + { +@@ -120,7 +123,10 @@ + { + int i; + DviCharNameHash *h; +- ++#ifdef ENABLE_MULTIBYTE ++ if (map->char_index) ++ return (*map->char_index)(map, name); ++#endif + i = hash_name (name) % DVI_HASH_SIZE; + for (h = map->buckets[i]; h; h=h->next) + if (!strcmp (h->name, name)) +@@ -128,9 +134,47 @@ + return -1; + } + ++#ifdef ENABLE_MULTIBYTE ++#include <X11/Xlib.h> ++void ++DviChar2XChar2b(int c, XChar2b *xc) ++{ ++ /* XXX: can we assume 'c' is EUC-JP ? */ ++ xc->byte1 = (c >> 8) & 0x7f; ++ xc->byte2 = (c) &0x7f; ++ return; ++} ++ ++int ++DviCharIndexJISX0208_1983(map, name) ++ DviCharNameMap *map; ++ char *name; ++{ ++ /* XXX: can we assume name points EUC-JP chars? */ ++ unsigned char ub = *name, lb = *(name + 1); ++ int wc; ++ wc = (name[0] & 0xff) << 8; ++ wc |= (name[1] & 0xff); ++ return(wc); ++} ++ ++static DviCharNameMap JISX0208_1983_0_map = { ++ "jisx0208.1983-0", ++ 0, ++ DviChar2XChar2b, ++ DviCharIndexJISX0208_1983, ++{ ++{ "DummyEntry", /* 0 */}, ++}}; ++#endif ++ + static DviCharNameMap ISO8859_1_map = { + "iso8859-1", + 0, ++#ifdef ENABLE_MULTIBYTE ++ 0, ++ 0, ++#endif + { + { 0, /* 0 */}, + { 0, /* 1 */}, +@@ -393,6 +437,10 @@ + static DviCharNameMap Adobe_Symbol_map = { + "adobe-fontspecific", + 1, ++#ifdef ENABLE_MULTIBYTE ++ 0, ++ 0, ++#endif + { + { 0, /* 0 */}, + { 0, /* 1 */}, +@@ -659,4 +707,7 @@ + standard_maps_loaded = 1; + DviRegisterMap (&ISO8859_1_map); + DviRegisterMap (&Adobe_Symbol_map); ++#ifdef ENABLE_MULTIBYTE ++ DviRegisterMap (&JISX0208_1983_0_map); ++#endif + } +--- groff-1.18.1.orig/src/xditview/DviChar.h ++++ groff-1.18.1/src/xditview/DviChar.h +@@ -10,6 +10,8 @@ + * CharSetRegistry from the CharSetEncoding + */ + ++#include "config.h" ++ + # define DVI_MAX_SYNONYMS 10 + # define DVI_MAP_SIZE 256 + # define DVI_HASH_SIZE 256 +@@ -23,6 +25,10 @@ + typedef struct _dviCharNameMap { + char *encoding; + int special; ++#ifdef ENABLE_MULTIBYTE ++ void (*char2XChar2b)(/* int c, XChar2b *xc */); ++ int (*char_index)(/* struct _dviCharNameMap *map, char *name */); ++#endif + char *dvi_names[DVI_MAP_SIZE][DVI_MAX_SYNONYMS]; + DviCharNameHash *buckets[DVI_HASH_SIZE]; + } DviCharNameMap; +--- groff-1.18.1.orig/src/xditview/DviP.h ++++ groff-1.18.1/src/xditview/DviP.h +@@ -8,6 +8,7 @@ + + #ifndef _XtDviP_h + #define _XtDviP_h ++#include "config.h" + + #include "Dvi.h" + #include "DviChar.h" +@@ -89,9 +90,17 @@ + #define DVI_CHAR_CACHE_SIZE 1024 + + typedef struct _dviCharCache { ++#ifdef ENABLE_MULTIBYTE ++ XTextItem16 cache[DVI_TEXT_CACHE_SIZE]; ++#else + XTextItem cache[DVI_TEXT_CACHE_SIZE]; ++#endif + char adjustable[DVI_TEXT_CACHE_SIZE]; ++#ifdef ENABLE_MULTIBYTE ++ XChar2b char_cache[DVI_CHAR_CACHE_SIZE]; ++#else + char char_cache[DVI_CHAR_CACHE_SIZE]; ++#endif + int index; + int max; + int char_index; +@@ -182,6 +191,7 @@ + int word_flag; + } DviPart; + ++extern int DviGetAndPut(); + #define DviGetIn(dw,cp)\ + (dw->dvi.tmpFile ? (\ + DviGetAndPut (dw, cp) \ +@@ -228,6 +238,11 @@ + extern DeviceFont *QueryDeviceFont (); + + extern char *GetWord(), *GetLine(); ++ ++#ifdef ENABLE_MULTIBYTE ++extern void DviInitLocale(); ++extern int DviGEtCharacter(); ++#endif + #endif /* _XtDviP_h */ + + +--- groff-1.18.1.orig/src/xditview/GXditview-ad.h ++++ groff-1.18.1/src/xditview/GXditview-ad.h +@@ -50,3 +50,24 @@ + "GXditview.promptShell.promptDialog.cancel.label: Cancel", + "GXditview.promptShell.promptDialog.cancel.translations: #override \ + <BtnUp>: Cancel() unset()", ++"GXditview*fontMap: \ ++TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\\n\ ++TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\\n\ ++CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\\n\ ++CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\\n\ ++HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\\n\ ++HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\\n\ ++NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\\n\ ++NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\\n\ ++NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\\n\ ++S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\\n\ ++SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\\n\ ++M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\\n\ ++G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0", +--- groff-1.18.1.orig/src/xditview/GXditview.ad ++++ groff-1.18.1/src/xditview/GXditview.ad +@@ -55,3 +55,25 @@ + GXditview.promptShell.promptDialog.cancel.label: Cancel + GXditview.promptShell.promptDialog.cancel.translations: #override \ + <BtnUp>: Cancel() unset() ++ ++GXditview*fontMap: \ ++TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\ ++TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\ ++CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\ ++CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\ ++HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\ ++HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\ ++NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\ ++NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\ ++NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\ ++S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\ ++SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\ ++M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0\n\ ++G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0 +--- groff-1.18.1.orig/src/xditview/XFontName.c ++++ groff-1.18.1/src/xditview/XFontName.c +@@ -225,6 +225,7 @@ + return True; + } + ++Bool + XCopyFontName (name1, name2, fontNameAttributes) + XFontName *name1, *name2; + unsigned int fontNameAttributes; +--- groff-1.18.1.orig/src/xditview/device.c ++++ groff-1.18.1/src/xditview/device.c +@@ -2,10 +2,12 @@ + + #include <stdio.h> + #include <ctype.h> ++#include <stdlib.h> + + #include <X11/Xos.h> + #include <X11/Intrinsic.h> + ++#include "config.h" + #include "device.h" + + #ifndef FONTPATH +@@ -48,6 +50,9 @@ + Device *dev; + struct charinfo *char_table[CHAR_TABLE_SIZE]; + struct charinfo *code_table[256]; ++#ifdef ENABLE_MULTIBYTE ++ struct charrange *range; ++#endif + }; + + struct charinfo { +@@ -71,6 +76,15 @@ + static struct charinfo *add_char(); + static int read_charset_section(); + static char *canonicalize_name(); ++#ifdef ENABLE_MULTIBYTE ++struct charrange { ++ struct charrange *next; ++ int width; ++ int start_code; ++ int end_code; ++}; ++static void add_charrange(); ++#endif + + static + Device *new_device(name) +@@ -256,6 +270,9 @@ + f->char_table[i] = 0; + for (i = 0; i < 256; i++) + f->code_table[i] = 0; ++#ifdef ENABLE_MULTIBYTE ++ f->range = 0; ++#endif + return f; + } + +@@ -267,6 +284,15 @@ + + if (!f) + return; ++#ifdef ENABLE_MULTIBYTE ++ { ++ struct charrange *cp, *cp2; ++ for (cp = f->range; cp != NULL; cp = cp2) { ++ cp2 = cp->next; ++ XtFree((char *)cp); ++ } ++ } ++#endif + XtFree(f->name); + for (i = 0; i < CHAR_TABLE_SIZE; i++) { + struct charinfo *ptr = f->char_table[i]; +@@ -342,6 +368,20 @@ + { + struct charinfo *p; + ++#ifdef ENABLE_MULTIBYTE ++ int wc; ++ extern DviWCharP(); ++ if (DviWCharP(name, &wc)) { ++ struct charrange *rp; ++ for (rp = f->range; rp != NULL; rp = rp->next) { ++ if (rp->start_code <= wc && wc <= rp->end_code) { ++ *widthp = scale_round(rp->width, ps, ++ f->dev->unitwidth); ++ return 1; ++ } ++ } ++ } ++#endif + name = canonicalize_name(name); + for (p = f->char_table[hash_name(name) % CHAR_TABLE_SIZE];; p = p->next) { + if (!p) +@@ -424,6 +464,22 @@ + return ci; + } + ++#ifdef ENABLE_MULTIBYTE ++static void ++add_charrange(f, width, start_code, end_code) ++ DeviceFont *f; ++ int width, start_code, end_code; ++{ ++ struct charrange *ci; ++ ci = (struct charrange *)XtMalloc(sizeof(struct charrange)); ++ ci->start_code = start_code; ++ ci->end_code = end_code; ++ ci->width = width; ++ ci->next = f->range; ++ f->range = ci; ++} ++#endif ++ + /* Return non-zero for success. */ + + static +@@ -439,11 +495,31 @@ + int width; + int code; + char *p; ++#ifdef ENABLE_MULTIBYTE ++ int scode, ecode; ++#endif + + current_lineno++; + name = strtok(buf, WS); + if (!name) + continue; /* ignore blank lines */ ++#ifdef ENABLE_MULTIBYTE ++ if (sscanf(name, "u%X..u%X", &scode, &ecode) == 2) { ++ p = strtok((char *)0, WS); ++ if (!p) ++ break; ++ if (sscanf(p, "%d", &width) != 1) { ++ error("bad width field"); ++ return 0; ++ } ++ p = strtok((char *)0, WS); ++ if (!p) { ++ error("missing type field"); ++ return 0; ++ } ++ add_charrange(f, width, scode, ecode); ++ } else { ++#endif + p = strtok((char *)0, WS); + if (!p) /* end of charset section */ + break; +@@ -479,6 +555,9 @@ + } + last_charinfo = add_char(f, name, width, code); + } ++#ifdef ENABLE_MULTIBYTE ++ } ++#endif + } + return 1; + } +@@ -559,7 +638,7 @@ + FILE *open_device_file(device_name, file_name, result) + char *device_name, *file_name, **result; + { +- char *buf, *path; ++ char *buf; + FILE *fp; + + buf = XtMalloc(3 + strlen(device_name) + 1 + strlen(file_name) + 1); +--- groff-1.18.1.orig/src/xditview/draw.c ++++ groff-1.18.1/src/xditview/draw.c +@@ -10,6 +10,7 @@ + #include <stdio.h> + #include <ctype.h> + #include <math.h> ++#include "config.h" + + /* math.h on a Sequent doesn't define M_PI, apparently */ + #ifndef M_PI +@@ -17,6 +18,7 @@ + #endif + + #include "DviP.h" ++#include "encoding.h" /* XXX */ + + #define DeviceToX(dw, n) ((int)((n) * (dw)->dvi.scale_factor + .5)) + #define XPos(dw) (DeviceToX((dw), (dw)->dvi.state->x - \ +@@ -25,6 +27,10 @@ + + static int FakeCharacter(); + ++/* font.c */ ++extern int MaxFontPosition(); ++ ++void + HorizontalMove(dw, delta) + DviWidget dw; + int delta; +@@ -32,6 +38,7 @@ + dw->dvi.state->x += delta; + } + ++void + HorizontalGoto(dw, NewPosition) + DviWidget dw; + int NewPosition; +@@ -39,6 +46,7 @@ + dw->dvi.state->x = NewPosition; + } + ++void + VerticalMove(dw, delta) + DviWidget dw; + int delta; +@@ -46,6 +54,7 @@ + dw->dvi.state->y += delta; + } + ++void + VerticalGoto(dw, NewPosition) + DviWidget dw; + int NewPosition; +@@ -53,6 +62,7 @@ + dw->dvi.state->y = NewPosition; + } + ++void + AdjustCacheDeltas (dw) + DviWidget dw; + { +@@ -94,14 +104,21 @@ + } + } + ++void + FlushCharCache (dw) + DviWidget dw; + { + if (dw->dvi.cache.char_index != 0) { + AdjustCacheDeltas (dw); ++#ifdef ENABLE_MULTIBYTE ++ XDrawText16 (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC, ++ dw->dvi.cache.start_x, dw->dvi.cache.start_y, ++ dw->dvi.cache.cache, dw->dvi.cache.index + 1); ++#else + XDrawText (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC, + dw->dvi.cache.start_x, dw->dvi.cache.start_y, + dw->dvi.cache.cache, dw->dvi.cache.index + 1); ++#endif + } + dw->dvi.cache.index = 0; + dw->dvi.cache.max = DVI_TEXT_CACHE_SIZE; +@@ -115,6 +132,7 @@ + dw->dvi.cache.start_y = dw->dvi.cache.y = YPos (dw); + } + ++void + Newline (dw) + DviWidget dw; + { +@@ -123,6 +141,7 @@ + dw->dvi.word_flag = 0; + } + ++void + Word (dw) + DviWidget dw; + { +@@ -135,7 +154,6 @@ + :\ + (fi)->max_bounds.width\ + ) +- + + static + int charExists (fi, c) +@@ -152,14 +170,25 @@ + || p->ascent != 0 || p->descent != 0 || p->attributes != 0); + } + +-static ++static void ++#ifdef ENABLE_MULTIBYTE ++DoCharacter (dw, c, wid, char2xchar2b) ++#else + DoCharacter (dw, c, wid) ++#endif + DviWidget dw; + int c; + int wid; /* width in device units */ ++#ifdef ENABLE_MULTIBYTE ++ void (*char2xchar2b)(); ++#endif + { + register XFontStruct *font; ++#ifdef ENABLE_MULTIBYTE ++ register XTextItem16 *text; ++#else + register XTextItem *text; ++#endif + int x, y; + + x = XPos(dw); +@@ -225,9 +254,25 @@ + text->font = None; + dw->dvi.cache.x += text->delta; + } ++#ifdef ENABLE_MULTIBYTE ++ if (charExists(font, c) || char2xchar2b) { ++#else + if (charExists(font, c)) { ++#endif + int w; ++#ifdef ENABLE_MULTIBYTE ++ if (char2xchar2b) { ++ (*char2xchar2b)(c, ++ &dw->dvi.cache.char_cache[dw->dvi.cache.char_index++]); ++ } else { ++ dw->dvi.cache.char_cache[dw->dvi.cache.char_index]. ++ byte1 = (unsigned char)'\0'; ++ dw->dvi.cache.char_cache[dw->dvi.cache.char_index++]. ++ byte2 = (unsigned char)c; ++ } ++#else + dw->dvi.cache.char_cache[dw->dvi.cache.char_index++] = (char) c; ++#endif + ++text->nchars; + w = charWidth(font, c); + dw->dvi.cache.x += w; +@@ -291,7 +336,11 @@ + if (map) + c = DviCharIndex (map, buf); + if (c >= 0) ++#ifdef ENABLE_MULTIBYTE ++ DoCharacter (dw, c, wid, map->char2XChar2b); ++#else + DoCharacter (dw, c, wid); ++#endif + else + (void) FakeCharacter (dw, buf, wid); + dw->dvi.state->font_number = prevFont; +@@ -345,6 +394,7 @@ + return 1; + } + ++void + PutNumberedCharacter (dw, c) + DviWidget dw; + int c; +@@ -387,13 +437,14 @@ + } + } + ++void + ClearPage (dw) + DviWidget dw; + { + XClearWindow (XtDisplay (dw), XtWindow (dw)); + } + +-static ++static void + setGC (dw) + DviWidget dw; + { +@@ -417,7 +468,7 @@ + } + } + +-static ++static void + setFillGC (dw) + DviWidget dw; + { +@@ -444,6 +495,7 @@ + } + } + ++void + DrawLine (dw, x, y) + DviWidget dw; + int x, y; +@@ -459,6 +511,7 @@ + xp + DeviceToX (dw, x), yp + DeviceToX (dw, y)); + } + ++void + DrawCircle (dw, diam) + DviWidget dw; + int diam; +@@ -473,6 +526,7 @@ + d, d, 0, 64*360); + } + ++void + DrawFilledCircle (dw, diam) + DviWidget dw; + int diam; +@@ -490,6 +544,7 @@ + d, d, 0, 64*360); + } + ++void + DrawEllipse (dw, a, b) + DviWidget dw; + int a, b; +@@ -501,6 +556,7 @@ + DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360); + } + ++void + DrawFilledEllipse (dw, a, b) + DviWidget dw; + int a, b; +@@ -515,6 +571,7 @@ + DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360); + } + ++void + DrawArc (dw, x0, y0, x1, y1) + DviWidget dw; + int x0, y0, x1, y1; +@@ -541,6 +598,7 @@ + rad*2, rad*2, angle1, angle2); + } + ++void + DrawPolygon (dw, v, n) + DviWidget dw; + int *v; +@@ -572,7 +630,7 @@ + XtFree((char *)p); + } + +- ++void + DrawFilledPolygon (dw, v, n) + DviWidget dw; + int *v; +@@ -608,7 +666,7 @@ + + #define POINTS_MAX 10000 + +-static ++static void + appendPoint(points, pointi, x, y) + XPoint *points; + int *pointi; +@@ -623,7 +681,7 @@ + + #define FLATNESS 1 + +-static ++static void + flattenCurve(points, pointi, x2, y2, x3, y3, x4, y4) + XPoint *points; + int *pointi; +@@ -659,7 +717,7 @@ + } + } + +- ++void + DrawSpline (dw, v, n) + DviWidget dw; + int *v; +--- groff-1.18.1.orig/src/xditview/font.c ++++ groff-1.18.1/src/xditview/font.c +@@ -9,10 +9,16 @@ + #include <X11/StringDefs.h> + #include <stdio.h> + #include <ctype.h> ++#include <stdlib.h> + #include "DviP.h" + #include "XFontName.h" + +-static DisposeFontSizes(); ++static void DisposeFontSizes(); ++void DestroyFontMap(); ++ ++/* XFontName.c */ ++extern Bool XParseFontName(); ++extern Bool XFormatFontName(); + + static char * + savestr (s) +@@ -115,7 +121,7 @@ + # define SizePosition 8 + # define EncodingPosition 13 + +-static ++static int + ConvertFontNameToSize (n) + char *n; + { +@@ -191,7 +197,7 @@ + return sizes; + } + +-static ++static void + DisposeFontSizes (dw, fs) + DviWidget dw; + DviFontSizeList *fs; +@@ -263,6 +269,7 @@ + return f; + } + ++void + ForgetFonts (dw) + DviWidget dw; + { +@@ -322,6 +329,7 @@ + } + #endif + ++void + ParseFontMap (dw) + DviWidget dw; + { +@@ -357,6 +365,7 @@ + dw->dvi.font_map = fm; + } + ++void + DestroyFontMap (font_map) + DviFontMap *font_map; + { +@@ -374,6 +383,7 @@ + + /* ARGSUSED */ + ++void + SetFontPosition (dw, position, dvi_name, extra) + DviWidget dw; + int position; +--- groff-1.18.1.orig/src/xditview/lex.c ++++ groff-1.18.1/src/xditview/lex.c +@@ -2,8 +2,10 @@ + #include <X11/IntrinsicP.h> + #include <X11/StringDefs.h> + #include <stdio.h> ++#include "config.h" + #include "DviP.h" + ++int + DviGetAndPut(dw, cp) + DviWidget dw; + int *cp; +@@ -67,6 +69,7 @@ + return Buffer; + } + ++int + GetNumber(dw) + DviWidget dw; + { +@@ -90,6 +93,98 @@ + DviUngetC(dw, c); + return i; + } ++ ++#ifdef ENABLE_MULTIBYTE ++#include <locale.h> ++#include <langinfo.h> ++#include <iconv.h> ++#include <errno.h> ++ ++static iconv_t icd; ++void ++DviInitLocale() ++{ ++ char *enc; ++ setlocale(LC_ALL, ""); ++ enc = nl_langinfo(CODESET); ++ icd = iconv_open("UCS-2BE", enc); ++} ++ ++int ++DviGetCharacter(dw, cp) ++ DviWidget dw; ++ char *cp; ++{ ++ char inbuf[8]; ++ char outbuf[8]; ++ char *inp, *outp; ++ size_t inbytesleft, outbytesleft = 8; ++ int i = 0; ++ int j; ++ int wc = 0; ++ int c; ++ size_t r; ++ ++ while (wc == 0) { ++ DviGetC(dw, &c); ++ if (c == EOF) ++ return EOF; ++ inbuf[i++] = c; ++ inbytesleft = i; ++ outbytesleft = BUFSIZ; ++ inp = inbuf; ++ outp = outbuf; ++ r = iconv(icd, &inp, &inbytesleft, &outp, &outbytesleft); ++ if (r == (size_t)-1) { ++ if (errno == EILSEQ) { ++ /* illegal sequence */ ++ } else if (errno == EINVAL) { ++ /* incomplete sequence */ ++ continue; ++ } else if (errno == E2BIG) { ++ /* no room to output? */ ++ ++ } ++ DviUngetC(dw, c); ++ } ++ /* ok - pass inbuf to cp */ ++ for (j = 0; j < i; j++) { ++ cp[j] = inbuf[j]; ++ } ++ cp[j] = '\0'; ++ return i; ++ } ++ /* NOT REACHED */ ++} ++ ++int ++DviWCharP(char *name, int *wc) ++{ ++ char outbuf[BUFSIZ]; ++ char *inp, *outp; ++ int inbytesleft, outbytesleft; ++ size_t r; ++ *wc = 0; ++ inp = name; ++ inbytesleft = strlen(name); ++ outp = outbuf; ++ outbytesleft = sizeof(outbuf)-1; ++ r = iconv(icd, &inp, &inbytesleft, &outp, &outbytesleft); ++ if (r < 0) { ++ return 0; ++ } ++ /* UCS-2 check */ ++ if (outbuf + 2 != outp) { ++ return 0; ++ } ++ for (inp = outbuf; inp < outp; inp++) { ++ *wc <<= 8; ++ *wc |= (*inp) & 0x0ff; ++ } ++ return 1; ++} ++ ++#endif + + /* + Local Variables: +--- groff-1.18.1.orig/src/xditview/page.c ++++ groff-1.18.1/src/xditview/page.c +@@ -28,6 +28,7 @@ + return m; + } + ++void + DestroyFileMap (m) + DviFileMap *m; + { +@@ -39,6 +40,7 @@ + } + } + ++void + ForgetPagePositions (dw) + DviWidget dw; + { +@@ -46,6 +48,7 @@ + dw->dvi.file_map = 0; + } + ++void + RememberPagePosition(dw, number) + DviWidget dw; + int number; +@@ -64,6 +67,7 @@ + m->position = ftell (dw->dvi.file); + } + ++int + SearchPagePosition (dw, number) + DviWidget dw; + int number; +@@ -75,6 +79,7 @@ + return m->position; + } + ++void + FileSeek(dw, position) + DviWidget dw; + long position; +--- groff-1.18.1.orig/src/xditview/parse.c ++++ groff-1.18.1/src/xditview/parse.c +@@ -9,15 +9,49 @@ + #include <X11/StringDefs.h> + #include <stdio.h> + #include <ctype.h> ++#include "config.h" + #include "DviP.h" ++#include "encoding.h" + + static int StopSeen = 0; +-static ParseDrawFunction(), ParseDeviceControl(); +-static push_env(), pop_env(); ++static void ParseDrawFunction(), ParseDeviceControl(); ++static void push_env(), pop_env(); ++ ++/* draw.c */ ++extern int PutCharacter(); ++extern int PutNumberedCharacter(); ++extern void HorizontalGoto(); ++extern void Word(); ++extern void VerticalGoto(); ++extern void VerticalMove(); ++extern void FlushCharCache(); ++extern void Newline(); ++extern void DrawLine(); ++extern void DrawCircle(); ++extern void DrawFilledCircle(); ++extern void DrawEllipse(); ++extern void DrawFilledEllipse(); ++extern void DrawArc(); ++extern void DrawPolygon(); ++extern void DrawFilledPolygon(); ++extern void DrawSpline(); ++ ++/* Dvi.c */ ++extern void SetDevice(); ++ ++/* page.c */ ++extern void RememberPagePosition(); ++ ++/* font.c */ ++extern void SetFontPosition(); ++ ++/* lex.c */ ++extern int GetNumber(); + + #define HorizontalMove(dw, delta) ((dw)->dvi.state->x += (delta)) + + ++int + ParseInput(dw) + register DviWidget dw; + { +@@ -57,11 +91,17 @@ + DviGetC(dw,&otherc)-'0'); + /* fall through */ + case 'c': /* single ascii character */ ++#ifdef ENABLE_MULTIBYTE ++ DviGetCharacter(dw, Buffer); ++ if (Buffer[0] == ' ') ++ break; ++#else + DviGetC(dw,&c); + if (c == ' ') + break; + Buffer[0] = c; + Buffer[1] = '\0'; ++#endif + (void) PutCharacter (dw, Buffer); + break; + case 'C': +@@ -69,10 +109,15 @@ + (void) PutCharacter (dw, Buffer); + break; + case 't': ++#ifdef ENABLE_MULTIBYTE ++ while (DviGetCharacter(dw, Buffer) != EOF ++ && Buffer[0] != ' ' && Buffer[0] != '\n') { ++#else + Buffer[1] = '\0'; + while (DviGetC (dw, &c) != EOF + && c != ' ' && c != '\n') { + Buffer[0] = c; ++#endif + HorizontalMove (dw, PutCharacter (dw, Buffer)); + } + break; +@@ -158,7 +203,7 @@ + } + } + +-static ++static void + push_env(dw) + DviWidget dw; + { +@@ -177,7 +222,7 @@ + dw->dvi.state = new; + } + +-static ++static void + pop_env(dw) + DviWidget dw; + { +@@ -188,7 +233,7 @@ + XtFree ((char *) old); + } + +-static ++static void + InitTypesetter (dw) + DviWidget dw; + { +@@ -200,7 +245,7 @@ + + #define DRAW_ARGS_MAX 128 + +-static ++static void + ParseDrawFunction(dw, buf) + DviWidget dw; + char *buf; +@@ -284,13 +329,12 @@ + } + } + +-static ++static void + ParseDeviceControl(dw) /* Parse the x commands */ + DviWidget dw; + { + char str[20], str1[50]; + int c, n; +- extern int LastPage, CurrentPage; + + GetWord (dw, str, 20); + switch (str[0]) { /* crude for now */ +--- groff-1.18.1.orig/src/xditview/xditview.c ++++ groff-1.18.1/src/xditview/xditview.c +@@ -46,6 +46,7 @@ + #include <X11/Xaw/SimpleMenu.h> + #include <X11/Xaw/SmeBSB.h> + ++#include <stdlib.h> + #include <signal.h> + + #include "Dvi.h" +@@ -101,7 +102,7 @@ + * Report the syntax for calling xditview. + */ + +-static ++static void + Syntax(call) + char *call; + { +@@ -126,12 +127,12 @@ + char *name; + void (*function)(); + } menuEntries[] = { +- "nextPage", NextPage, +- "previousPage", PreviousPage, +- "selectPage", SelectPage, +- "print", Print, +- "openFile", OpenFile, +- "quit", Quit, ++ {"nextPage", NextPage}, ++ {"previousPage",PreviousPage}, ++ {"selectPage", SelectPage}, ++ {"print", Print}, ++ {"openFile", OpenFile}, ++ {"quit", Quit}, + }; + + static void NextPageAction(), PreviousPageAction(), SelectPageAction(); +@@ -139,17 +140,18 @@ + static void AcceptAction(), CancelAction(); + static void PrintAction(); + static void RerasterizeAction(); ++static void MakePrompt(); + + XtActionsRec xditview_actions[] = { +- "NextPage", NextPageAction, +- "PreviousPage", PreviousPageAction, +- "SelectPage", SelectPageAction, +- "Print", PrintAction, +- "OpenFile", OpenFileAction, +- "Rerasterize", RerasterizeAction, +- "Quit", QuitAction, +- "Accept", AcceptAction, +- "Cancel", CancelAction, ++ {"NextPage", NextPageAction}, ++ {"PreviousPage", PreviousPageAction}, ++ {"SelectPage", SelectPageAction}, ++ {"Print", PrintAction}, ++ {"OpenFile", OpenFileAction}, ++ {"Rerasterize", RerasterizeAction}, ++ {"Quit", QuitAction}, ++ {"Accept", AcceptAction}, ++ {"Cancel", CancelAction}, + }; + + #define MenuNextPage 0 +@@ -318,6 +320,7 @@ + + static char fileBuf[1024]; + ++static void + ResetMenuEntry (entry) + Widget entry; + { +@@ -516,6 +519,7 @@ + CancelAction (widget, event, params, num_params); + } + ++static void + MakePrompt(centerw, prompt, func, def) + Widget centerw; + char *prompt; +--- groff-1.18.1.orig/src/xditview/xtotroff.c ++++ groff-1.18.1/src/xditview/xtotroff.c +@@ -2,6 +2,7 @@ + * xtotroff + * + * convert X font metrics into troff font metrics ++ * XXX: ENABLE_MULTIBYTE may not work yet + */ + + #include <X11/Xlib.h> +@@ -10,6 +11,7 @@ + #include <unistd.h> + #include <stdlib.h> + #include <fcntl.h> ++#include "config.h" + #include "XFontName.h" + #include "DviChar.h" + +@@ -171,6 +173,47 @@ + fprintf (out, "spacewidth %d\n", w); + } + fprintf (out, "charset\n"); ++#if 0 /* def ENABLE_MULTIBYTE */ ++ if (fi->min_byte1 != 0 || fi->max_byte1 != 0) { ++ /* ++ * 2 byte code font. ++ */ ++ int N; ++ int D = fi->max_char_or_byte2 - fi->min_char_or_byte2 + 1; ++ int max = (fi->max_byte1 - fi->min_byte1 + 1) * ++ (fi->max_char_or_byte2 - fi->min_char_or_byte2 + 1); ++ unsigned byte1; ++ unsigned byte2; ++ unsigned int euc_code; ++ ++ for (N = 0; N < max; N++) { ++ byte1 = N / D + fi->min_byte1; ++ byte2 = N % D + fi->min_char_or_byte2; ++ euc_code = ((byte1 << 8) | byte2) & 0xffff | 0x8080; ++ wid = fi->max_bounds.width; ++ fputc(byte1 & 0xff | 0x80, out);/* output EUC code */ ++ fputc(byte2 & 0xff | 0x80, out);/* output EUC code */ ++ fprintf (out, "\t%d", wid); ++ if (groff_flag) { ++ int param[5]; ++ param[0] = fi->max_bounds.ascent; ++ param[1] = fi->max_bounds.descent; ++ param[2] = 0 /* charRBearing (fi, c) - wid */; ++ param[3] = 0 /* charLBearing (fi, c) */; ++ param[4] = 0; /* XXX */ ++ for (j = 0; j < 5; j++) ++ if (param[j] < 0) ++ param[j] = 0; ++ for (j = 4; j >= 0; j--) ++ if (param[j] != 0) ++ break; ++ for (k = 0; k <= j; k++) ++ fprintf (out, ",%d", param[k]); ++ } ++ fprintf (out, "\t0\t%#x\n", euc_code); ++ } ++ } else ++#endif /* ENABLE_MULTIBYTE */ + for (c = fi->min_char_or_byte2; c <= fi->max_char_or_byte2; c++) { + char *name = DviCharName (char_map,c,0); + if (charExists (fi, c) && (groff_flag || name)) { +--- groff-1.18.1.orig/src/xditview/FontMap.jisx0208 ++++ groff-1.18.1/src/xditview/FontMap.jisx0208 +@@ -0,0 +1,2 @@ ++M -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0 ++G -misc-fixed-medium-r-normal--*-100-*-*-*-*-jisx0208.1983-0 +--- groff-1.18.1.orig/src/xditview/encoding.h ++++ groff-1.18.1/src/xditview/encoding.h +@@ -0,0 +1,31 @@ ++// -*- C++ -*- ++/* Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++This file is part of groff. ++ ++groff is free software; you can redistribute it and/or modify it under ++the terms of the GNU General Public License as published by the Free ++Software Foundation; either version 2, or (at your option) any later ++version. ++ ++groff is distributed in the hope that it will be useful, but WITHOUT ANY ++WARRANTY; without even the implied warranty of MERCHANTABILITY or ++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ ++ ++#ifndef ENCODING_H ++#define ENCODING_H ++ ++#include "config.h" ++ ++#ifdef ENABLE_MULTIBYTE ++typedef unsigned int wchar; ++#else ++typedef char wchar; ++#endif ++ ++#endif +--- groff-1.18.1.orig/src/xditview/config.h ++++ groff-1.18.1/src/xditview/config.h +@@ -0,0 +1,4 @@ ++#ifndef _config_h ++#include "../include/config.h" ++#define _config_h ++#endif +--- groff-1.18.1.orig/font/devps/DESC.in ++++ groff-1.18.1/font/devps/DESC.in +@@ -1,11 +1,33 @@ + res 72000 + hor 1 + vert 1 ++lowerwchar 300 ++wcharkern 400 + sizescale 1000 + unitwidth 1000 + sizes 1000-10000000 0 + styles R I B BI + family T +-fonts 9 0 0 0 0 0 SS S ZD ZDR ++fonts 11 0 0 0 0 0 SS S ZD ZDR M G ++fontset B G 2E00..9FFF ++fontset AB G 2E00..9FFF ++fontset BMB G 2E00..9FFF ++fontset CB G 2E00..9FFF ++fontset HB G 2E00..9FFF ++fontset HNB G 2E00..9FFF ++fontset NB G 2E00..9FFF ++fontset PB G 2E00..9FFF ++fontset TB G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset AB G FF00..FFEF ++fontset BMB G FF00..FFEF ++fontset CB G FF00..FFEF ++fontset HB G FF00..FFEF ++fontset HNB G FF00..FFEF ++fontset NB G FF00..FFEF ++fontset PB G FF00..FFEF ++fontset TB G FF00..FFEF ++fontset - M FF00..FFEF + tcommand + postpro grops +--- groff-1.18.1.orig/font/devps/Makefile.sub ++++ groff-1.18.1/font/devps/Makefile.sub +@@ -2,23 +2,23 @@ + DISTFILES=text.enc download \ + S ZD ZDR SS AB ABI AI AR BMB BMBI BMI BMR \ + CB CBI CI CR HB HBI HI HR HNB HNBI HNI HNR \ +- NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI ++ NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI M G + PSFILES=prologue symbolsl.pfa zapfdr.pfa + DEVGENFILES=generate/Makefile generate/afmname generate/dingbats.map \ + generate/dingbats.rmap generate/lgreekmap generate/symbol.sed \ + generate/symbolchars generate/symbolsl.afm generate/textmap + DEVFILES=DESC $(PSFILES) $(DISTFILES) $(DEVGENFILES) + +-CLEANADD=DESC $(PSFILES) ++CLEANADD=DESC $(PSFILES) M G + + DESC: DESC.in + -rm -f DESC + cat $(srcdir)/DESC.in >DESC + echo broken $(BROKEN_SPOOLER_FLAGS) >>DESC + if test "$(PAGE)" = A4; then \ +- echo "papersize a4" >>DESC; \ ++ echo "papersize /etc/papersize a4" >>DESC; \ + else \ +- echo "papersize letter" >>DESC; \ ++ echo "papersize /etc/papersize letter" >>DESC; \ + fi + test -z '$(PSPRINT)' || echo print '$(PSPRINT)' >>DESC + +@@ -33,3 +33,14 @@ + $(PSFILES): + -rm -f $@ + sed -f $(srcdir)/psstrip.sed $? >$@ ++ ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @cp M.proto M ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' \ ++ -e 's/internalname Ryumin-Light-EUC-H/internalname GothicBBB-Medium-EUC-H/' M > G +--- groff-1.18.1.orig/font/devps/M.proto ++++ groff-1.18.1/font/devps/M.proto +@@ -0,0 +1,9 @@ ++name M ++internalname Ryumin-Light-EUC-H ++spacewidth 250 ++encodingname EUC-JP ++charset ++u2E00..u9FFF 1000 3 ++uFF00..uFF5F 1000 3 ++uFF60..uFF9F 500 3 ++uFFA0..uFFEF 1000 3 +--- groff-1.18.1.orig/font/devdvi/DESC.in ++++ groff-1.18.1/font/devdvi/DESC.in +@@ -6,6 +6,10 @@ + sizes 500-1000000 0 + styles R I B BI + family T +-fonts 13 0 0 0 0 0 0 0 0 0 MI S EX CW ++fonts 15 0 0 0 0 0 0 0 0 0 MI S EX CW M G ++fontset B G 100..FFFF ++fontset HB G 100..FFFF ++fontset SB G 100..FFFF ++fontset - M 100..FFFF + tcommand + postpro grodvi +--- groff-1.18.1.orig/font/devdvi/Makefile.sub ++++ groff-1.18.1/font/devdvi/Makefile.sub +@@ -3,15 +3,68 @@ + TR TI TB TBI CW CWI HR HI HB HBI \ + TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \ + TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \ +- MI S EX SA SB \ ++ MI S EX SA SB M G \ + generate/CompileFonts generate/Makefile \ + generate/msam.map generate/msbm.map \ + generate/texb.map generate/texex.map generate/texi.map generate/texmi.map \ + generate/texr.map generate/texsy.map generate/textt.map \ + generate/ec.map generate/tc.map + +-CLEANADD=DESC ++CLEANADD=DESC M G + + DESC: DESC.in + cat $(srcdir)/DESC.in >DESC + test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>DESC ++ ++M: M.proto-$(DVIFORMAT) ++ @echo Making $@ ++ @-rm -f $@ ++ cp M.proto-$(DVIFORMAT) M ++# @if [ x$(DVIFORMAT) = xNTT ]; then \ ++# sed -e 's/ F / 959887,808326,151561 1 /' \ ++# -e 's/:0$$/:dmjsy10/' \ ++# -e 's/:1$$/:dmjroma10/' \ ++# -e 's/:2$$/:dmjhira10/' \ ++# -e 's/:3$$/:dmjkata10/' \ ++# -e 's/:4$$/:dmjgreek10/' \ ++# -e 's/:5$$/:dmjrussian10/' \ ++# -e 's/:6$$/:dmjkeisen10/' \ ++# -e 's/:a$$/:dmjka10/' \ ++# -e 's/:b$$/:dmjkb10/' \ ++# -e 's/:c$$/:dmjkc10/' \ ++# -e 's/:d$$/:dmjkd10/' \ ++# -e 's/:e$$/:dmjke10/' \ ++# -e 's/:f$$/:dmjkf10/' \ ++# -e 's/:g$$/:dmjkg10/' \ ++# -e 's/:h$$/:dmjkh10/' \ ++# -e 's/:i$$/:dmjki10/' \ ++# -e 's/:j$$/:dmjkj10/' \ ++# -e 's/:k$$/:dmjkk10/' \ ++# -e 's/:l$$/:dmjkl10/' \ ++# -e 's/:m$$/:dmjkm10/' \ ++# -e 's/:n$$/:dmjkn10/' \ ++# -e 's/:o$$/:dmjko10/' \ ++# -e 's/:p$$/:dmjkp10/' \ ++# -e 's/:q$$/:dmjkq10/' \ ++# -e 's/:r$$/:dmjkr10/' \ ++# -e 's/:s$$/:dmjks10/' \ ++# -e 's/:t$$/:dmjkt10/' \ ++# -e 's/:u$$/:dmjku10/' \ ++# -e 's/:v$$/:dmjkv10/' \ ++# -e 's/:w$$/:dmjkw10/' \ ++# -e 's/:x$$/:dmjkx10/' \ ++# -e 's/:y$$/:dmjky10/' \ ++# -e 's/:z$$/:dmjkz10/' \ ++# < M.proto-NTT > M ;\ ++# else \ ++# ../devnippon/createM -jis "1006514,815360,145600" 1 < M.proto-ASCII | \ ++# sed -f FixMetric.sed > M ;\ ++# fi ++ ++G: M ++ @echo Making $@ ++ @-rm -f $@ ++ @sed -e 's/name M/name G/' \ ++ -e 's/dmj/dgj/' \ ++ -e 's/internalname min10/internalname goth10/' \ ++ < M > G +--- groff-1.18.1.orig/font/devdvi/FixMetric.sed ++++ groff-1.18.1/font/devdvi/FixMetric.sed +@@ -0,0 +1,77 @@ ++s/1006514,.*0x212b$/370845,815360,145600 1 0x212b/ ++s/1006514,.*0x212c$/370845,815360,145600 1 0x212c/ ++s/1006514,.*0x2126$/370845,815360,145600 1 0x2126/ ++s/1006514,.*0x2127$/370845,815360,145600 1 0x2127/ ++s/1006514,.*0x2128$/370845,815360,145600 1 0x2128/ ++s/1006514,.*0x212a$/370845,815360,145600 1 0x212a/ ++s/1006514,.*0x212d$/370845,815360,145600 1 0x212d/ ++s/1006514,.*0x212e$/370845,815360,145600 1 0x212e/ ++s/1006514,.*0x213e$/370845,815360,145600 1 0x213e/ ++s/1006514,.*0x2142$/370845,815360,145600 1 0x2142/ ++s/1006514,.*0x2143$/370845,815360,145600 1 0x2143/ ++s/1006514,.*0x2146$/370845,815360,145600 1 0x2146/ ++s/1006514,.*0x2147$/370845,815360,145600 1 0x2147/ ++s/1006514,.*0x2124$/370845,815360,145600 1 0x2124/ ++s/1006514,.*0x2125$/370845,815360,145600 1 0x2125/ ++s/1006514,.*0x214b$/528496,815360,145600 1 0x214b/ ++s/1006514,.*0x214d$/528496,815360,145600 1 0x214d/ ++s/1006514,.*0x214f$/528496,815360,145600 1 0x214f/ ++s/1006514,.*0x2151$/528496,815360,145600 1 0x2151/ ++s/1006514,.*0x2153$/528496,815360,145600 1 0x2153/ ++s/1006514,.*0x2155$/528496,815360,145600 1 0x2155/ ++s/1006514,.*0x2157$/528496,815360,145600 1 0x2157/ ++s/1006514,.*0x2159$/528496,815360,145600 1 0x2159/ ++s/1006514,.*0x215b$/528496,815360,145600 1 0x215b/ ++s/1006514,.*0x2129$/528496,815360,145600 1 0x2129/ ++s/1006514,.*0x212f$/528496,815360,145600 1 0x212f/ ++s/1006514,.*0x2130$/528496,815360,145600 1 0x2130/ ++s/1006514,.*0x2133$/528496,815360,145600 1 0x2133/ ++s/1006514,.*0x2135$/528496,815360,145600 1 0x2135/ ++s/1006514,.*0x2148$/528496,815360,145600 1 0x2148/ ++s/1006514,.*0x2149$/528496,815360,145600 1 0x2149/ ++s/1006514,.*0x216b$/528496,815360,145600 1 0x216b/ ++s/1006514,.*0x216c$/528496,815360,145600 1 0x216c/ ++s/1006514,.*0x216d$/528496,815360,145600 1 0x216d/ ++s/1006514,.*0x2178$/528496,815360,145600 1 0x2178/ ++s/1006514,.*0x214a$/528496,815360,145600 1 0x214a/ ++s/1006514,.*0x214c$/528496,815360,145600 1 0x214c/ ++s/1006514,.*0x214e$/528496,815360,145600 1 0x214e/ ++s/1006514,.*0x2150$/528496,815360,145600 1 0x2150/ ++s/1006514,.*0x2152$/528496,815360,145600 1 0x2152/ ++s/1006514,.*0x2154$/528496,815360,145600 1 0x2154/ ++s/1006514,.*0x2156$/528496,815360,145600 1 0x2156/ ++s/1006514,.*0x2158$/528496,815360,145600 1 0x2158/ ++s/1006514,.*0x215a$/528496,815360,145600 1 0x215a/ ++s/1006514,.*0x2122$/528496,815360,145600 1 0x2122/ ++s/1006514,.*0x2123$/528496,815360,145600 1 0x2123/ ++s/1006514,.*0x2136$/783741,815360,145600 1 0x2136/ ++s/1006514,.*0x2137$/783741,815360,145600 1 0x2137/ ++s/1006514,.*0x2139$/783741,815360,145600 1 0x2139/ ++s/1006514,.*0x2168$/783741,815360,145600 1 0x2168/ ++s/1006514,.*0x2169$/783741,815360,145600 1 0x2169/ ++s/1006514,.*0x216a$/783741,815360,145600 1 0x216a/ ++s/1006514,.*0x2170$/783741,815360,145600 1 0x2170/ ++s/1006514,.*0x2171$/783741,815360,145600 1 0x2171/ ++s/1006514,.*0x2172$/783741,815360,145600 1 0x2172/ ++s/1006514,.*0x2421$/783741,815360,145600 1 0x2421/ ++s/1006514,.*0x2423$/783741,815360,145600 1 0x2423/ ++s/1006514,.*0x2425$/783741,815360,145600 1 0x2425/ ++s/1006514,.*0x2427$/783741,815360,145600 1 0x2427/ ++s/1006514,.*0x2429$/783741,815360,145600 1 0x2429/ ++s/1006514,.*0x2443$/783741,815360,145600 1 0x2443/ ++s/1006514,.*0x2463$/783741,815360,145600 1 0x2463/ ++s/1006514,.*0x2465$/783741,815360,145600 1 0x2465/ ++s/1006514,.*0x2467$/783741,815360,145600 1 0x2467/ ++s/1006514,.*0x246e$/783741,815360,145600 1 0x246e/ ++s/1006514,.*0x2521$/783741,815360,145600 1 0x2521/ ++s/1006514,.*0x2523$/783741,815360,145600 1 0x2523/ ++s/1006514,.*0x2525$/783741,815360,145600 1 0x2525/ ++s/1006514,.*0x2527$/783741,815360,145600 1 0x2527/ ++s/1006514,.*0x2529$/783741,815360,145600 1 0x2529/ ++s/1006514,.*0x2543$/783741,815360,145600 1 0x2543/ ++s/1006514,.*0x2563$/783741,815360,145600 1 0x2563/ ++s/1006514,.*0x2565$/783741,815360,145600 1 0x2565/ ++s/1006514,.*0x2567$/783741,815360,145600 1 0x2567/ ++s/1006514,.*0x256e$/783741,815360,145600 1 0x256e/ ++s/1006514,.*0x2575$/783741,815360,145600 1 0x2575/ ++s/1006514,.*0x2576$/783741,815360,145600 1 0x2576/ +--- groff-1.18.1.orig/font/devdvi/M.proto-ASCII ++++ groff-1.18.1/font/devdvi/M.proto-ASCII +@@ -0,0 +1,4 @@ ++name M ++internalname min10 ++checksum -375402250 ++designsize 10485760 +--- groff-1.18.1.orig/font/devdvi/M.proto-NTT ++++ groff-1.18.1/font/devdvi/M.proto-NTT +@@ -0,0 +1,6882 @@ ++name M ++internalname dmj10 ++checksum 0 ++designsize 10485760 ++charset ++ F 1:0 ++、 F 2:0 ++。 F 3:0 ++, F 4:0 ++. F 5:0 ++・ F 6:0 ++: F 7:0 ++; F 8:0 ++? F 9:0 ++! F 10:0 ++゛ F 11:0 ++゜ F 12:0 ++´ F 13:0 ++` F 14:0 ++¨ F 15:0 ++^ F 16:0 ++ ̄ F 17:0 ++_ F 18:0 ++ヽ F 19:0 ++ヾ F 20:0 ++ゝ F 21:0 ++ゞ F 22:0 ++〃 F 23:0 ++仝 F 24:0 ++々 F 25:0 ++〆 F 26:0 ++〇 F 27:0 ++ー F 28:0 ++― F 29:0 ++‐ F 30:0 ++/ F 31:0 ++\ F 32:0 ++〜 F 33:0 ++‖ F 34:0 ++| F 35:0 ++… F 36:0 ++‥ F 37:0 ++‘ F 38:0 ++’ F 39:0 ++“ F 40:0 ++” F 41:0 ++( F 42:0 ++) F 43:0 ++〔 F 44:0 ++〕 F 45:0 ++[ F 46:0 ++] F 47:0 ++{ F 48:0 ++} F 49:0 ++〈 F 50:0 ++〉 F 51:0 ++《 F 52:0 ++》 F 53:0 ++「 F 54:0 ++」 F 55:0 ++『 F 56:0 ++』 F 57:0 ++【 F 58:0 ++】 F 59:0 +++ F 60:0 ++− F 61:0 ++± F 62:0 ++× F 63:0 ++÷ F 64:0 ++= F 65:0 ++≠ F 66:0 ++< F 67:0 ++> F 68:0 ++≦ F 69:0 ++≧ F 70:0 ++∞ F 71:0 ++∴ F 72:0 ++♂ F 73:0 ++♀ F 74:0 ++° F 75:0 ++′ F 76:0 ++″ F 77:0 ++℃ F 78:0 ++¥ F 79:0 ++$ F 80:0 ++¢ F 81:0 ++£ F 82:0 ++% F 83:0 ++# F 84:0 ++& F 85:0 ++* F 86:0 ++@ F 87:0 ++§ F 88:0 ++☆ F 89:0 ++★ F 90:0 ++○ F 91:0 ++● F 92:0 ++◎ F 93:0 ++◇ F 94:0 ++◆ F 101:0 ++□ F 102:0 ++■ F 103:0 ++△ F 104:0 ++▲ F 105:0 ++▽ F 106:0 ++▼ F 107:0 ++※ F 108:0 ++〒 F 109:0 ++→ F 110:0 ++← F 111:0 ++↑ F 112:0 ++↓ F 113:0 ++〓 F 114:0 ++∈ F 126:0 ++∋ F 127:0 ++⊆ F 128:0 ++⊇ F 129:0 ++⊂ F 130:0 ++⊃ F 131:0 ++∪ F 132:0 ++∩ F 133:0 ++∧ F 142:0 ++∨ F 143:0 ++¬ F 144:0 ++⇒ F 145:0 ++⇔ F 146:0 ++∀ F 147:0 ++∃ F 148:0 ++∠ F 160:0 ++⊥ F 161:0 ++⌒ F 162:0 ++∂ F 163:0 ++∇ F 164:0 ++≡ F 165:0 ++≒ F 166:0 ++≪ F 167:0 ++≫ F 168:0 ++√ F 169:0 ++∽ F 170:0 ++∝ F 171:0 ++∵ F 172:0 ++∫ F 173:0 ++∬ F 174:0 ++Å F 182:0 ++‰ F 183:0 ++♯ F 184:0 ++♭ F 185:0 ++♪ F 186:0 ++† F 187:0 ++‡ F 188:0 ++¶ F 189:0 ++◯ F 194:0 ++0 F 48:1 ++1 F 49:1 ++2 F 50:1 ++3 F 51:1 ++4 F 52:1 ++5 F 53:1 ++6 F 54:1 ++7 F 55:1 ++8 F 56:1 ++9 F 57:1 ++A F 65:1 ++B F 66:1 ++C F 67:1 ++D F 68:1 ++E F 69:1 ++F F 70:1 ++G F 71:1 ++H F 72:1 ++I F 73:1 ++J F 74:1 ++K F 75:1 ++L F 76:1 ++M F 77:1 ++N F 78:1 ++O F 79:1 ++P F 80:1 ++Q F 81:1 ++R F 82:1 ++S F 83:1 ++T F 84:1 ++U F 85:1 ++V F 86:1 ++W F 87:1 ++X F 88:1 ++Y F 89:1 ++Z F 90:1 ++a F 97:1 ++b F 98:1 ++c F 99:1 ++d F 100:1 ++e F 101:1 ++f F 102:1 ++g F 103:1 ++h F 104:1 ++i F 105:1 ++j F 106:1 ++k F 107:1 ++l F 108:1 ++m F 109:1 ++n F 110:1 ++o F 111:1 ++p F 112:1 ++q F 113:1 ++r F 114:1 ++s F 115:1 ++t F 116:1 ++u F 117:1 ++v F 118:1 ++w F 119:1 ++x F 120:1 ++y F 121:1 ++z F 122:1 ++ぁ F 1:2 ++あ F 2:2 ++ぃ F 3:2 ++い F 4:2 ++ぅ F 5:2 ++う F 6:2 ++ぇ F 7:2 ++え F 8:2 ++ぉ F 9:2 ++お F 10:2 ++か F 11:2 ++が F 12:2 ++き F 13:2 ++ぎ F 14:2 ++く F 15:2 ++ぐ F 16:2 ++け F 17:2 ++げ F 18:2 ++こ F 19:2 ++ご F 20:2 ++さ F 21:2 ++ざ F 22:2 ++し F 23:2 ++じ F 24:2 ++す F 25:2 ++ず F 26:2 ++せ F 27:2 ++ぜ F 28:2 ++そ F 29:2 ++ぞ F 30:2 ++た F 31:2 ++だ F 32:2 ++ち F 33:2 ++ぢ F 34:2 ++っ F 35:2 ++つ F 36:2 ++づ F 37:2 ++て F 38:2 ++で F 39:2 ++と F 40:2 ++ど F 41:2 ++な F 42:2 ++に F 43:2 ++ぬ F 44:2 ++ね F 45:2 ++の F 46:2 ++は F 47:2 ++ば F 48:2 ++ぱ F 49:2 ++ひ F 50:2 ++び F 51:2 ++ぴ F 52:2 ++ふ F 53:2 ++ぶ F 54:2 ++ぷ F 55:2 ++へ F 56:2 ++べ F 57:2 ++ぺ F 58:2 ++ほ F 59:2 ++ぼ F 60:2 ++ぽ F 61:2 ++ま F 62:2 ++み F 63:2 ++む F 64:2 ++め F 65:2 ++も F 66:2 ++ゃ F 67:2 ++や F 68:2 ++ゅ F 69:2 ++ゆ F 70:2 ++ょ F 71:2 ++よ F 72:2 ++ら F 73:2 ++り F 74:2 ++る F 75:2 ++れ F 76:2 ++ろ F 77:2 ++ゎ F 78:2 ++わ F 79:2 ++ゐ F 80:2 ++ゑ F 81:2 ++を F 82:2 ++ん F 83:2 ++ァ F 1:3 ++ア F 2:3 ++ィ F 3:3 ++イ F 4:3 ++ゥ F 5:3 ++ウ F 6:3 ++ェ F 7:3 ++エ F 8:3 ++ォ F 9:3 ++オ F 10:3 ++カ F 11:3 ++ガ F 12:3 ++キ F 13:3 ++ギ F 14:3 ++ク F 15:3 ++グ F 16:3 ++ケ F 17:3 ++ゲ F 18:3 ++コ F 19:3 ++ゴ F 20:3 ++サ F 21:3 ++ザ F 22:3 ++シ F 23:3 ++ジ F 24:3 ++ス F 25:3 ++ズ F 26:3 ++セ F 27:3 ++ゼ F 28:3 ++ソ F 29:3 ++ゾ F 30:3 ++タ F 31:3 ++ダ F 32:3 ++チ F 33:3 ++ヂ F 34:3 ++ッ F 35:3 ++ツ F 36:3 ++ヅ F 37:3 ++テ F 38:3 ++デ F 39:3 ++ト F 40:3 ++ド F 41:3 ++ナ F 42:3 ++ニ F 43:3 ++ヌ F 44:3 ++ネ F 45:3 ++ノ F 46:3 ++ハ F 47:3 ++バ F 48:3 ++パ F 49:3 ++ヒ F 50:3 ++ビ F 51:3 ++ピ F 52:3 ++フ F 53:3 ++ブ F 54:3 ++プ F 55:3 ++ヘ F 56:3 ++ベ F 57:3 ++ペ F 58:3 ++ホ F 59:3 ++ボ F 60:3 ++ポ F 61:3 ++マ F 62:3 ++ミ F 63:3 ++ム F 64:3 ++メ F 65:3 ++モ F 66:3 ++ャ F 67:3 ++ヤ F 68:3 ++ュ F 69:3 ++ユ F 70:3 ++ョ F 71:3 ++ヨ F 72:3 ++ラ F 73:3 ++リ F 74:3 ++ル F 75:3 ++レ F 76:3 ++ロ F 77:3 ++ヮ F 78:3 ++ワ F 79:3 ++ヰ F 80:3 ++ヱ F 81:3 ++ヲ F 82:3 ++ン F 83:3 ++ヴ F 84:3 ++ヵ F 85:3 ++ヶ F 86:3 ++Α F 1:4 ++Β F 2:4 ++Γ F 3:4 ++Δ F 4:4 ++Ε F 5:4 ++Ζ F 6:4 ++Η F 7:4 ++Θ F 8:4 ++Ι F 9:4 ++Κ F 10:4 ++Λ F 11:4 ++Μ F 12:4 ++Ν F 13:4 ++Ξ F 14:4 ++Ο F 15:4 ++Π F 16:4 ++Ρ F 17:4 ++Σ F 18:4 ++Τ F 19:4 ++Υ F 20:4 ++Φ F 21:4 ++Χ F 22:4 ++Ψ F 23:4 ++Ω F 24:4 ++α F 33:4 ++β F 34:4 ++γ F 35:4 ++δ F 36:4 ++ε F 37:4 ++ζ F 38:4 ++η F 39:4 ++θ F 40:4 ++ι F 41:4 ++κ F 42:4 ++λ F 43:4 ++μ F 44:4 ++ν F 45:4 ++ξ F 46:4 ++ο F 47:4 ++π F 48:4 ++ρ F 49:4 ++σ F 50:4 ++τ F 51:4 ++υ F 52:4 ++φ F 53:4 ++χ F 54:4 ++ψ F 55:4 ++ω F 56:4 ++А F 1:5 ++Б F 2:5 ++В F 3:5 ++Г F 4:5 ++Д F 5:5 ++Е F 6:5 ++Ё F 7:5 ++Ж F 8:5 ++З F 9:5 ++И F 10:5 ++Й F 11:5 ++К F 12:5 ++Л F 13:5 ++М F 14:5 ++Н F 15:5 ++О F 16:5 ++П F 17:5 ++Р F 18:5 ++С F 19:5 ++Т F 20:5 ++У F 21:5 ++Ф F 22:5 ++Х F 23:5 ++Ц F 24:5 ++Ч F 25:5 ++Ш F 26:5 ++Щ F 27:5 ++Ъ F 28:5 ++Ы F 29:5 ++Ь F 30:5 ++Э F 31:5 ++Ю F 32:5 ++Я F 33:5 ++а F 49:5 ++б F 50:5 ++в F 51:5 ++г F 52:5 ++д F 53:5 ++е F 54:5 ++ё F 55:5 ++ж F 56:5 ++з F 57:5 ++и F 58:5 ++й F 59:5 ++к F 60:5 ++л F 61:5 ++м F 62:5 ++н F 63:5 ++о F 64:5 ++п F 65:5 ++р F 66:5 ++с F 67:5 ++т F 68:5 ++у F 69:5 ++ф F 70:5 ++х F 71:5 ++ц F 72:5 ++ч F 73:5 ++ш F 74:5 ++щ F 75:5 ++ъ F 76:5 ++ы F 77:5 ++ь F 78:5 ++э F 79:5 ++ю F 80:5 ++я F 81:5 ++─ F 1:6 ++│ F 2:6 ++┌ F 3:6 ++┐ F 4:6 ++┘ F 5:6 ++└ F 6:6 ++├ F 7:6 ++┬ F 8:6 ++┤ F 9:6 ++┴ F 10:6 ++┼ F 11:6 ++━ F 12:6 ++┃ F 13:6 ++┏ F 14:6 ++┓ F 15:6 ++┛ F 16:6 ++┗ F 17:6 ++┣ F 18:6 ++┳ F 19:6 ++┫ F 20:6 ++┻ F 21:6 ++╋ F 22:6 ++┠ F 23:6 ++┯ F 24:6 ++┨ F 25:6 ++┷ F 26:6 ++┿ F 27:6 ++┝ F 28:6 ++┰ F 29:6 ++┥ F 30:6 ++┸ F 31:6 ++╂ F 32:6 ++亜 F 0:a ++唖 F 1:a ++娃 F 2:a ++阿 F 3:a ++哀 F 4:a ++愛 F 5:a ++挨 F 6:a ++姶 F 7:a ++逢 F 8:a ++葵 F 9:a ++茜 F 10:a ++穐 F 11:a ++悪 F 12:a ++握 F 13:a ++渥 F 14:a ++旭 F 15:a ++葦 F 16:a ++芦 F 17:a ++鯵 F 18:a ++梓 F 19:a ++圧 F 20:a ++斡 F 21:a ++扱 F 22:a ++宛 F 23:a ++姐 F 24:a ++虻 F 25:a ++飴 F 26:a ++絢 F 27:a ++綾 F 28:a ++鮎 F 29:a ++或 F 30:a ++粟 F 31:a ++袷 F 32:a ++安 F 33:a ++庵 F 34:a ++按 F 35:a ++暗 F 36:a ++案 F 37:a ++闇 F 38:a ++鞍 F 39:a ++杏 F 40:a ++以 F 41:a ++伊 F 42:a ++位 F 43:a ++依 F 44:a ++偉 F 45:a ++囲 F 46:a ++夷 F 47:a ++委 F 48:a ++威 F 49:a ++尉 F 50:a ++惟 F 51:a ++意 F 52:a ++慰 F 53:a ++易 F 54:a ++椅 F 55:a ++為 F 56:a ++畏 F 57:a ++異 F 58:a ++移 F 59:a ++維 F 60:a ++緯 F 61:a ++胃 F 62:a ++萎 F 63:a ++衣 F 64:a ++謂 F 65:a ++違 F 66:a ++遺 F 67:a ++医 F 68:a ++井 F 69:a ++亥 F 70:a ++域 F 71:a ++育 F 72:a ++郁 F 73:a ++磯 F 74:a ++一 F 75:a ++壱 F 76:a ++溢 F 77:a ++逸 F 78:a ++稲 F 79:a ++茨 F 80:a ++芋 F 81:a ++鰯 F 82:a ++允 F 83:a ++印 F 84:a ++咽 F 85:a ++員 F 86:a ++因 F 87:a ++姻 F 88:a ++引 F 89:a ++飲 F 90:a ++淫 F 91:a ++胤 F 92:a ++蔭 F 93:a ++院 F 94:a ++陰 F 95:a ++隠 F 96:a ++韻 F 97:a ++吋 F 98:a ++右 F 99:a ++宇 F 100:a ++烏 F 101:a ++羽 F 102:a ++迂 F 103:a ++雨 F 104:a ++卯 F 105:a ++鵜 F 106:a ++窺 F 107:a ++丑 F 108:a ++碓 F 109:a ++臼 F 110:a ++渦 F 111:a ++嘘 F 112:a ++唄 F 113:a ++欝 F 114:a ++蔚 F 115:a ++鰻 F 116:a ++姥 F 117:a ++厩 F 118:a ++浦 F 119:a ++瓜 F 120:a ++閏 F 121:a ++噂 F 122:a ++云 F 123:a ++運 F 124:a ++雲 F 125:a ++荏 F 126:a ++餌 F 127:a ++叡 F 128:a ++営 F 129:a ++嬰 F 130:a ++影 F 131:a ++映 F 132:a ++曳 F 133:a ++栄 F 134:a ++永 F 135:a ++泳 F 136:a ++洩 F 137:a ++瑛 F 138:a ++盈 F 139:a ++穎 F 140:a ++頴 F 141:a ++英 F 142:a ++衛 F 143:a ++詠 F 144:a ++鋭 F 145:a ++液 F 146:a ++疫 F 147:a ++益 F 148:a ++駅 F 149:a ++悦 F 150:a ++謁 F 151:a ++越 F 152:a ++閲 F 153:a ++榎 F 154:a ++厭 F 155:a ++円 F 156:a ++園 F 157:a ++堰 F 158:a ++奄 F 159:a ++宴 F 160:a ++延 F 161:a ++怨 F 162:a ++掩 F 163:a ++援 F 164:a ++沿 F 165:a ++演 F 166:a ++炎 F 167:a ++焔 F 168:a ++煙 F 169:a ++燕 F 170:a ++猿 F 171:a ++縁 F 172:a ++艶 F 173:a ++苑 F 174:a ++薗 F 175:a ++遠 F 176:a ++鉛 F 177:a ++鴛 F 178:a ++塩 F 179:a ++於 F 180:a ++汚 F 181:a ++甥 F 182:a ++凹 F 183:a ++央 F 184:a ++奥 F 185:a ++往 F 186:a ++応 F 187:a ++押 F 188:a ++旺 F 189:a ++横 F 190:a ++欧 F 191:a ++殴 F 192:a ++王 F 193:a ++翁 F 194:a ++襖 F 195:a ++鴬 F 196:a ++鴎 F 197:a ++黄 F 198:a ++岡 F 199:a ++沖 F 200:a ++荻 F 201:a ++億 F 202:a ++屋 F 203:a ++憶 F 204:a ++臆 F 205:a ++桶 F 206:a ++牡 F 207:a ++乙 F 208:a ++俺 F 209:a ++卸 F 210:a ++恩 F 211:a ++温 F 212:a ++穏 F 213:a ++音 F 214:a ++下 F 215:a ++化 F 216:a ++仮 F 217:a ++何 F 218:a ++伽 F 219:a ++価 F 220:a ++佳 F 221:a ++加 F 222:a ++可 F 223:a ++嘉 F 224:a ++夏 F 225:a ++嫁 F 226:a ++家 F 227:a ++寡 F 228:a ++科 F 229:a ++暇 F 230:a ++果 F 231:a ++架 F 232:a ++歌 F 233:a ++河 F 234:a ++火 F 235:a ++珂 F 236:a ++禍 F 237:a ++禾 F 238:a ++稼 F 239:a ++箇 F 240:a ++花 F 241:a ++苛 F 242:a ++茄 F 243:a ++荷 F 244:a ++華 F 245:a ++菓 F 246:a ++蝦 F 247:a ++課 F 248:a ++嘩 F 249:a ++貨 F 250:a ++迦 F 251:a ++過 F 252:a ++霞 F 253:a ++蚊 F 254:a ++俄 F 255:a ++峨 F 0:b ++我 F 1:b ++牙 F 2:b ++画 F 3:b ++臥 F 4:b ++芽 F 5:b ++蛾 F 6:b ++賀 F 7:b ++雅 F 8:b ++餓 F 9:b ++駕 F 10:b ++介 F 11:b ++会 F 12:b ++解 F 13:b ++回 F 14:b ++塊 F 15:b ++壊 F 16:b ++廻 F 17:b ++快 F 18:b ++怪 F 19:b ++悔 F 20:b ++恢 F 21:b ++懐 F 22:b ++戒 F 23:b ++拐 F 24:b ++改 F 25:b ++魁 F 26:b ++晦 F 27:b ++械 F 28:b ++海 F 29:b ++灰 F 30:b ++界 F 31:b ++皆 F 32:b ++絵 F 33:b ++芥 F 34:b ++蟹 F 35:b ++開 F 36:b ++階 F 37:b ++貝 F 38:b ++凱 F 39:b ++劾 F 40:b ++外 F 41:b ++咳 F 42:b ++害 F 43:b ++崖 F 44:b ++慨 F 45:b ++概 F 46:b ++涯 F 47:b ++碍 F 48:b ++蓋 F 49:b ++街 F 50:b ++該 F 51:b ++鎧 F 52:b ++骸 F 53:b ++浬 F 54:b ++馨 F 55:b ++蛙 F 56:b ++垣 F 57:b ++柿 F 58:b ++蛎 F 59:b ++鈎 F 60:b ++劃 F 61:b ++嚇 F 62:b ++各 F 63:b ++廓 F 64:b ++拡 F 65:b ++撹 F 66:b ++格 F 67:b ++核 F 68:b ++殻 F 69:b ++獲 F 70:b ++確 F 71:b ++穫 F 72:b ++覚 F 73:b ++角 F 74:b ++赫 F 75:b ++較 F 76:b ++郭 F 77:b ++閣 F 78:b ++隔 F 79:b ++革 F 80:b ++学 F 81:b ++岳 F 82:b ++楽 F 83:b ++額 F 84:b ++顎 F 85:b ++掛 F 86:b ++笠 F 87:b ++樫 F 88:b ++橿 F 89:b ++梶 F 90:b ++鰍 F 91:b ++潟 F 92:b ++割 F 93:b ++喝 F 94:b ++恰 F 95:b ++括 F 96:b ++活 F 97:b ++渇 F 98:b ++滑 F 99:b ++葛 F 100:b ++褐 F 101:b ++轄 F 102:b ++且 F 103:b ++鰹 F 104:b ++叶 F 105:b ++椛 F 106:b ++樺 F 107:b ++鞄 F 108:b ++株 F 109:b ++兜 F 110:b ++竃 F 111:b ++蒲 F 112:b ++釜 F 113:b ++鎌 F 114:b ++噛 F 115:b ++鴨 F 116:b ++栢 F 117:b ++茅 F 118:b ++萱 F 119:b ++粥 F 120:b ++刈 F 121:b ++苅 F 122:b ++瓦 F 123:b ++乾 F 124:b ++侃 F 125:b ++冠 F 126:b ++寒 F 127:b ++刊 F 128:b ++勘 F 129:b ++勧 F 130:b ++巻 F 131:b ++喚 F 132:b ++堪 F 133:b ++姦 F 134:b ++完 F 135:b ++官 F 136:b ++寛 F 137:b ++干 F 138:b ++幹 F 139:b ++患 F 140:b ++感 F 141:b ++慣 F 142:b ++憾 F 143:b ++換 F 144:b ++敢 F 145:b ++柑 F 146:b ++桓 F 147:b ++棺 F 148:b ++款 F 149:b ++歓 F 150:b ++汗 F 151:b ++漢 F 152:b ++澗 F 153:b ++潅 F 154:b ++環 F 155:b ++甘 F 156:b ++監 F 157:b ++看 F 158:b ++竿 F 159:b ++管 F 160:b ++簡 F 161:b ++緩 F 162:b ++缶 F 163:b ++翰 F 164:b ++肝 F 165:b ++艦 F 166:b ++莞 F 167:b ++観 F 168:b ++諌 F 169:b ++貫 F 170:b ++還 F 171:b ++鑑 F 172:b ++間 F 173:b ++閑 F 174:b ++関 F 175:b ++陥 F 176:b ++韓 F 177:b ++館 F 178:b ++舘 F 179:b ++丸 F 180:b ++含 F 181:b ++岸 F 182:b ++巌 F 183:b ++玩 F 184:b ++癌 F 185:b ++眼 F 186:b ++岩 F 187:b ++翫 F 188:b ++贋 F 189:b ++雁 F 190:b ++頑 F 191:b ++顔 F 192:b ++願 F 193:b ++企 F 194:b ++伎 F 195:b ++危 F 196:b ++喜 F 197:b ++器 F 198:b ++基 F 199:b ++奇 F 200:b ++嬉 F 201:b ++寄 F 202:b ++岐 F 203:b ++希 F 204:b ++幾 F 205:b ++忌 F 206:b ++揮 F 207:b ++机 F 208:b ++旗 F 209:b ++既 F 210:b ++期 F 211:b ++棋 F 212:b ++棄 F 213:b ++機 F 214:b ++帰 F 215:b ++毅 F 216:b ++気 F 217:b ++汽 F 218:b ++畿 F 219:b ++祈 F 220:b ++季 F 221:b ++稀 F 222:b ++紀 F 223:b ++徽 F 224:b ++規 F 225:b ++記 F 226:b ++貴 F 227:b ++起 F 228:b ++軌 F 229:b ++輝 F 230:b ++飢 F 231:b ++騎 F 232:b ++鬼 F 233:b ++亀 F 234:b ++偽 F 235:b ++儀 F 236:b ++妓 F 237:b ++宜 F 238:b ++戯 F 239:b ++技 F 240:b ++擬 F 241:b ++欺 F 242:b ++犠 F 243:b ++疑 F 244:b ++祇 F 245:b ++義 F 246:b ++蟻 F 247:b ++誼 F 248:b ++議 F 249:b ++掬 F 250:b ++菊 F 251:b ++鞠 F 252:b ++吉 F 253:b ++吃 F 254:b ++喫 F 255:b ++桔 F 0:c ++橘 F 1:c ++詰 F 2:c ++砧 F 3:c ++杵 F 4:c ++黍 F 5:c ++却 F 6:c ++客 F 7:c ++脚 F 8:c ++虐 F 9:c ++逆 F 10:c ++丘 F 11:c ++久 F 12:c ++仇 F 13:c ++休 F 14:c ++及 F 15:c ++吸 F 16:c ++宮 F 17:c ++弓 F 18:c ++急 F 19:c ++救 F 20:c ++朽 F 21:c ++求 F 22:c ++汲 F 23:c ++泣 F 24:c ++灸 F 25:c ++球 F 26:c ++究 F 27:c ++窮 F 28:c ++笈 F 29:c ++級 F 30:c ++糾 F 31:c ++給 F 32:c ++旧 F 33:c ++牛 F 34:c ++去 F 35:c ++居 F 36:c ++巨 F 37:c ++拒 F 38:c ++拠 F 39:c ++挙 F 40:c ++渠 F 41:c ++虚 F 42:c ++許 F 43:c ++距 F 44:c ++鋸 F 45:c ++漁 F 46:c ++禦 F 47:c ++魚 F 48:c ++亨 F 49:c ++享 F 50:c ++京 F 51:c ++供 F 52:c ++侠 F 53:c ++僑 F 54:c ++兇 F 55:c ++競 F 56:c ++共 F 57:c ++凶 F 58:c ++協 F 59:c ++匡 F 60:c ++卿 F 61:c ++叫 F 62:c ++喬 F 63:c ++境 F 64:c ++峡 F 65:c ++強 F 66:c ++彊 F 67:c ++怯 F 68:c ++恐 F 69:c ++恭 F 70:c ++挟 F 71:c ++教 F 72:c ++橋 F 73:c ++況 F 74:c ++狂 F 75:c ++狭 F 76:c ++矯 F 77:c ++胸 F 78:c ++脅 F 79:c ++興 F 80:c ++蕎 F 81:c ++郷 F 82:c ++鏡 F 83:c ++響 F 84:c ++饗 F 85:c ++驚 F 86:c ++仰 F 87:c ++凝 F 88:c ++尭 F 89:c ++暁 F 90:c ++業 F 91:c ++局 F 92:c ++曲 F 93:c ++極 F 94:c ++玉 F 95:c ++桐 F 96:c ++粁 F 97:c ++僅 F 98:c ++勤 F 99:c ++均 F 100:c ++巾 F 101:c ++錦 F 102:c ++斤 F 103:c ++欣 F 104:c ++欽 F 105:c ++琴 F 106:c ++禁 F 107:c ++禽 F 108:c ++筋 F 109:c ++緊 F 110:c ++芹 F 111:c ++菌 F 112:c ++衿 F 113:c ++襟 F 114:c ++謹 F 115:c ++近 F 116:c ++金 F 117:c ++吟 F 118:c ++銀 F 119:c ++九 F 120:c ++倶 F 121:c ++句 F 122:c ++区 F 123:c ++狗 F 124:c ++玖 F 125:c ++矩 F 126:c ++苦 F 127:c ++躯 F 128:c ++駆 F 129:c ++駈 F 130:c ++駒 F 131:c ++具 F 132:c ++愚 F 133:c ++虞 F 134:c ++喰 F 135:c ++空 F 136:c ++偶 F 137:c ++寓 F 138:c ++遇 F 139:c ++隅 F 140:c ++串 F 141:c ++櫛 F 142:c ++釧 F 143:c ++屑 F 144:c ++屈 F 145:c ++掘 F 146:c ++窟 F 147:c ++沓 F 148:c ++靴 F 149:c ++轡 F 150:c ++窪 F 151:c ++熊 F 152:c ++隈 F 153:c ++粂 F 154:c ++栗 F 155:c ++繰 F 156:c ++桑 F 157:c ++鍬 F 158:c ++勲 F 159:c ++君 F 160:c ++薫 F 161:c ++訓 F 162:c ++群 F 163:c ++軍 F 164:c ++郡 F 165:c ++卦 F 166:c ++袈 F 167:c ++祁 F 168:c ++係 F 169:c ++傾 F 170:c ++刑 F 171:c ++兄 F 172:c ++啓 F 173:c ++圭 F 174:c ++珪 F 175:c ++型 F 176:c ++契 F 177:c ++形 F 178:c ++径 F 179:c ++恵 F 180:c ++慶 F 181:c ++慧 F 182:c ++憩 F 183:c ++掲 F 184:c ++携 F 185:c ++敬 F 186:c ++景 F 187:c ++桂 F 188:c ++渓 F 189:c ++畦 F 190:c ++稽 F 191:c ++系 F 192:c ++経 F 193:c ++継 F 194:c ++繋 F 195:c ++罫 F 196:c ++茎 F 197:c ++荊 F 198:c ++蛍 F 199:c ++計 F 200:c ++詣 F 201:c ++警 F 202:c ++軽 F 203:c ++頚 F 204:c ++鶏 F 205:c ++芸 F 206:c ++迎 F 207:c ++鯨 F 208:c ++劇 F 209:c ++戟 F 210:c ++撃 F 211:c ++激 F 212:c ++隙 F 213:c ++桁 F 214:c ++傑 F 215:c ++欠 F 216:c ++決 F 217:c ++潔 F 218:c ++穴 F 219:c ++結 F 220:c ++血 F 221:c ++訣 F 222:c ++月 F 223:c ++件 F 224:c ++倹 F 225:c ++倦 F 226:c ++健 F 227:c ++兼 F 228:c ++券 F 229:c ++剣 F 230:c ++喧 F 231:c ++圏 F 232:c ++堅 F 233:c ++嫌 F 234:c ++建 F 235:c ++憲 F 236:c ++懸 F 237:c ++拳 F 238:c ++捲 F 239:c ++検 F 240:c ++権 F 241:c ++牽 F 242:c ++犬 F 243:c ++献 F 244:c ++研 F 245:c ++硯 F 246:c ++絹 F 247:c ++県 F 248:c ++肩 F 249:c ++見 F 250:c ++謙 F 251:c ++賢 F 252:c ++軒 F 253:c ++遣 F 254:c ++鍵 F 255:c ++険 F 0:d ++顕 F 1:d ++験 F 2:d ++鹸 F 3:d ++元 F 4:d ++原 F 5:d ++厳 F 6:d ++幻 F 7:d ++弦 F 8:d ++減 F 9:d ++源 F 10:d ++玄 F 11:d ++現 F 12:d ++絃 F 13:d ++舷 F 14:d ++言 F 15:d ++諺 F 16:d ++限 F 17:d ++乎 F 18:d ++個 F 19:d ++古 F 20:d ++呼 F 21:d ++固 F 22:d ++姑 F 23:d ++孤 F 24:d ++己 F 25:d ++庫 F 26:d ++弧 F 27:d ++戸 F 28:d ++故 F 29:d ++枯 F 30:d ++湖 F 31:d ++狐 F 32:d ++糊 F 33:d ++袴 F 34:d ++股 F 35:d ++胡 F 36:d ++菰 F 37:d ++虎 F 38:d ++誇 F 39:d ++跨 F 40:d ++鈷 F 41:d ++雇 F 42:d ++顧 F 43:d ++鼓 F 44:d ++五 F 45:d ++互 F 46:d ++伍 F 47:d ++午 F 48:d ++呉 F 49:d ++吾 F 50:d ++娯 F 51:d ++後 F 52:d ++御 F 53:d ++悟 F 54:d ++梧 F 55:d ++檎 F 56:d ++瑚 F 57:d ++碁 F 58:d ++語 F 59:d ++誤 F 60:d ++護 F 61:d ++醐 F 62:d ++乞 F 63:d ++鯉 F 64:d ++交 F 65:d ++佼 F 66:d ++侯 F 67:d ++候 F 68:d ++倖 F 69:d ++光 F 70:d ++公 F 71:d ++功 F 72:d ++効 F 73:d ++勾 F 74:d ++厚 F 75:d ++口 F 76:d ++向 F 77:d ++后 F 78:d ++喉 F 79:d ++坑 F 80:d ++垢 F 81:d ++好 F 82:d ++孔 F 83:d ++孝 F 84:d ++宏 F 85:d ++工 F 86:d ++巧 F 87:d ++巷 F 88:d ++幸 F 89:d ++広 F 90:d ++庚 F 91:d ++康 F 92:d ++弘 F 93:d ++恒 F 94:d ++慌 F 95:d ++抗 F 96:d ++拘 F 97:d ++控 F 98:d ++攻 F 99:d ++昂 F 100:d ++晃 F 101:d ++更 F 102:d ++杭 F 103:d ++校 F 104:d ++梗 F 105:d ++構 F 106:d ++江 F 107:d ++洪 F 108:d ++浩 F 109:d ++港 F 110:d ++溝 F 111:d ++甲 F 112:d ++皇 F 113:d ++硬 F 114:d ++稿 F 115:d ++糠 F 116:d ++紅 F 117:d ++紘 F 118:d ++絞 F 119:d ++綱 F 120:d ++耕 F 121:d ++考 F 122:d ++肯 F 123:d ++肱 F 124:d ++腔 F 125:d ++膏 F 126:d ++航 F 127:d ++荒 F 128:d ++行 F 129:d ++衡 F 130:d ++講 F 131:d ++貢 F 132:d ++購 F 133:d ++郊 F 134:d ++酵 F 135:d ++鉱 F 136:d ++砿 F 137:d ++鋼 F 138:d ++閤 F 139:d ++降 F 140:d ++項 F 141:d ++香 F 142:d ++高 F 143:d ++鴻 F 144:d ++剛 F 145:d ++劫 F 146:d ++号 F 147:d ++合 F 148:d ++壕 F 149:d ++拷 F 150:d ++濠 F 151:d ++豪 F 152:d ++轟 F 153:d ++麹 F 154:d ++克 F 155:d ++刻 F 156:d ++告 F 157:d ++国 F 158:d ++穀 F 159:d ++酷 F 160:d ++鵠 F 161:d ++黒 F 162:d ++獄 F 163:d ++漉 F 164:d ++腰 F 165:d ++甑 F 166:d ++忽 F 167:d ++惚 F 168:d ++骨 F 169:d ++狛 F 170:d ++込 F 171:d ++此 F 172:d ++頃 F 173:d ++今 F 174:d ++困 F 175:d ++坤 F 176:d ++墾 F 177:d ++婚 F 178:d ++恨 F 179:d ++懇 F 180:d ++昏 F 181:d ++昆 F 182:d ++根 F 183:d ++梱 F 184:d ++混 F 185:d ++痕 F 186:d ++紺 F 187:d ++艮 F 188:d ++魂 F 189:d ++些 F 190:d ++佐 F 191:d ++叉 F 192:d ++唆 F 193:d ++嵯 F 194:d ++左 F 195:d ++差 F 196:d ++査 F 197:d ++沙 F 198:d ++瑳 F 199:d ++砂 F 200:d ++詐 F 201:d ++鎖 F 202:d ++裟 F 203:d ++坐 F 204:d ++座 F 205:d ++挫 F 206:d ++債 F 207:d ++催 F 208:d ++再 F 209:d ++最 F 210:d ++哉 F 211:d ++塞 F 212:d ++妻 F 213:d ++宰 F 214:d ++彩 F 215:d ++才 F 216:d ++採 F 217:d ++栽 F 218:d ++歳 F 219:d ++済 F 220:d ++災 F 221:d ++采 F 222:d ++犀 F 223:d ++砕 F 224:d ++砦 F 225:d ++祭 F 226:d ++斎 F 227:d ++細 F 228:d ++菜 F 229:d ++裁 F 230:d ++載 F 231:d ++際 F 232:d ++剤 F 233:d ++在 F 234:d ++材 F 235:d ++罪 F 236:d ++財 F 237:d ++冴 F 238:d ++坂 F 239:d ++阪 F 240:d ++堺 F 241:d ++榊 F 242:d ++肴 F 243:d ++咲 F 244:d ++崎 F 245:d ++埼 F 246:d ++碕 F 247:d ++鷺 F 248:d ++作 F 249:d ++削 F 250:d ++咋 F 251:d ++搾 F 252:d ++昨 F 253:d ++朔 F 254:d ++柵 F 255:d ++窄 F 0:e ++策 F 1:e ++索 F 2:e ++錯 F 3:e ++桜 F 4:e ++鮭 F 5:e ++笹 F 6:e ++匙 F 7:e ++冊 F 8:e ++刷 F 9:e ++察 F 10:e ++拶 F 11:e ++撮 F 12:e ++擦 F 13:e ++札 F 14:e ++殺 F 15:e ++薩 F 16:e ++雑 F 17:e ++皐 F 18:e ++鯖 F 19:e ++捌 F 20:e ++錆 F 21:e ++鮫 F 22:e ++皿 F 23:e ++晒 F 24:e ++三 F 25:e ++傘 F 26:e ++参 F 27:e ++山 F 28:e ++惨 F 29:e ++撒 F 30:e ++散 F 31:e ++桟 F 32:e ++燦 F 33:e ++珊 F 34:e ++産 F 35:e ++算 F 36:e ++纂 F 37:e ++蚕 F 38:e ++讃 F 39:e ++賛 F 40:e ++酸 F 41:e ++餐 F 42:e ++斬 F 43:e ++暫 F 44:e ++残 F 45:e ++仕 F 46:e ++仔 F 47:e ++伺 F 48:e ++使 F 49:e ++刺 F 50:e ++司 F 51:e ++史 F 52:e ++嗣 F 53:e ++四 F 54:e ++士 F 55:e ++始 F 56:e ++姉 F 57:e ++姿 F 58:e ++子 F 59:e ++屍 F 60:e ++市 F 61:e ++師 F 62:e ++志 F 63:e ++思 F 64:e ++指 F 65:e ++支 F 66:e ++孜 F 67:e ++斯 F 68:e ++施 F 69:e ++旨 F 70:e ++枝 F 71:e ++止 F 72:e ++死 F 73:e ++氏 F 74:e ++獅 F 75:e ++祉 F 76:e ++私 F 77:e ++糸 F 78:e ++紙 F 79:e ++紫 F 80:e ++肢 F 81:e ++脂 F 82:e ++至 F 83:e ++視 F 84:e ++詞 F 85:e ++詩 F 86:e ++試 F 87:e ++誌 F 88:e ++諮 F 89:e ++資 F 90:e ++賜 F 91:e ++雌 F 92:e ++飼 F 93:e ++歯 F 94:e ++事 F 95:e ++似 F 96:e ++侍 F 97:e ++児 F 98:e ++字 F 99:e ++寺 F 100:e ++慈 F 101:e ++持 F 102:e ++時 F 103:e ++次 F 104:e ++滋 F 105:e ++治 F 106:e ++爾 F 107:e ++璽 F 108:e ++痔 F 109:e ++磁 F 110:e ++示 F 111:e ++而 F 112:e ++耳 F 113:e ++自 F 114:e ++蒔 F 115:e ++辞 F 116:e ++汐 F 117:e ++鹿 F 118:e ++式 F 119:e ++識 F 120:e ++鴫 F 121:e ++竺 F 122:e ++軸 F 123:e ++宍 F 124:e ++雫 F 125:e ++七 F 126:e ++叱 F 127:e ++執 F 128:e ++失 F 129:e ++嫉 F 130:e ++室 F 131:e ++悉 F 132:e ++湿 F 133:e ++漆 F 134:e ++疾 F 135:e ++質 F 136:e ++実 F 137:e ++蔀 F 138:e ++篠 F 139:e ++偲 F 140:e ++柴 F 141:e ++芝 F 142:e ++屡 F 143:e ++蕊 F 144:e ++縞 F 145:e ++舎 F 146:e ++写 F 147:e ++射 F 148:e ++捨 F 149:e ++赦 F 150:e ++斜 F 151:e ++煮 F 152:e ++社 F 153:e ++紗 F 154:e ++者 F 155:e ++謝 F 156:e ++車 F 157:e ++遮 F 158:e ++蛇 F 159:e ++邪 F 160:e ++借 F 161:e ++勺 F 162:e ++尺 F 163:e ++杓 F 164:e ++灼 F 165:e ++爵 F 166:e ++酌 F 167:e ++釈 F 168:e ++錫 F 169:e ++若 F 170:e ++寂 F 171:e ++弱 F 172:e ++惹 F 173:e ++主 F 174:e ++取 F 175:e ++守 F 176:e ++手 F 177:e ++朱 F 178:e ++殊 F 179:e ++狩 F 180:e ++珠 F 181:e ++種 F 182:e ++腫 F 183:e ++趣 F 184:e ++酒 F 185:e ++首 F 186:e ++儒 F 187:e ++受 F 188:e ++呪 F 189:e ++寿 F 190:e ++授 F 191:e ++樹 F 192:e ++綬 F 193:e ++需 F 194:e ++囚 F 195:e ++収 F 196:e ++周 F 197:e ++宗 F 198:e ++就 F 199:e ++州 F 200:e ++修 F 201:e ++愁 F 202:e ++拾 F 203:e ++洲 F 204:e ++秀 F 205:e ++秋 F 206:e ++終 F 207:e ++繍 F 208:e ++習 F 209:e ++臭 F 210:e ++舟 F 211:e ++蒐 F 212:e ++衆 F 213:e ++襲 F 214:e ++讐 F 215:e ++蹴 F 216:e ++輯 F 217:e ++週 F 218:e ++酋 F 219:e ++酬 F 220:e ++集 F 221:e ++醜 F 222:e ++什 F 223:e ++住 F 224:e ++充 F 225:e ++十 F 226:e ++従 F 227:e ++戎 F 228:e ++柔 F 229:e ++汁 F 230:e ++渋 F 231:e ++獣 F 232:e ++縦 F 233:e ++重 F 234:e ++銃 F 235:e ++叔 F 236:e ++夙 F 237:e ++宿 F 238:e ++淑 F 239:e ++祝 F 240:e ++縮 F 241:e ++粛 F 242:e ++塾 F 243:e ++熟 F 244:e ++出 F 245:e ++術 F 246:e ++述 F 247:e ++俊 F 248:e ++峻 F 249:e ++春 F 250:e ++瞬 F 251:e ++竣 F 252:e ++舜 F 253:e ++駿 F 254:e ++准 F 255:e ++循 F 0:f ++旬 F 1:f ++楯 F 2:f ++殉 F 3:f ++淳 F 4:f ++準 F 5:f ++潤 F 6:f ++盾 F 7:f ++純 F 8:f ++巡 F 9:f ++遵 F 10:f ++醇 F 11:f ++順 F 12:f ++処 F 13:f ++初 F 14:f ++所 F 15:f ++暑 F 16:f ++曙 F 17:f ++渚 F 18:f ++庶 F 19:f ++緒 F 20:f ++署 F 21:f ++書 F 22:f ++薯 F 23:f ++藷 F 24:f ++諸 F 25:f ++助 F 26:f ++叙 F 27:f ++女 F 28:f ++序 F 29:f ++徐 F 30:f ++恕 F 31:f ++鋤 F 32:f ++除 F 33:f ++傷 F 34:f ++償 F 35:f ++勝 F 36:f ++匠 F 37:f ++升 F 38:f ++召 F 39:f ++哨 F 40:f ++商 F 41:f ++唱 F 42:f ++嘗 F 43:f ++奨 F 44:f ++妾 F 45:f ++娼 F 46:f ++宵 F 47:f ++将 F 48:f ++小 F 49:f ++少 F 50:f ++尚 F 51:f ++庄 F 52:f ++床 F 53:f ++廠 F 54:f ++彰 F 55:f ++承 F 56:f ++抄 F 57:f ++招 F 58:f ++掌 F 59:f ++捷 F 60:f ++昇 F 61:f ++昌 F 62:f ++昭 F 63:f ++晶 F 64:f ++松 F 65:f ++梢 F 66:f ++樟 F 67:f ++樵 F 68:f ++沼 F 69:f ++消 F 70:f ++渉 F 71:f ++湘 F 72:f ++焼 F 73:f ++焦 F 74:f ++照 F 75:f ++症 F 76:f ++省 F 77:f ++硝 F 78:f ++礁 F 79:f ++祥 F 80:f ++称 F 81:f ++章 F 82:f ++笑 F 83:f ++粧 F 84:f ++紹 F 85:f ++肖 F 86:f ++菖 F 87:f ++蒋 F 88:f ++蕉 F 89:f ++衝 F 90:f ++裳 F 91:f ++訟 F 92:f ++証 F 93:f ++詔 F 94:f ++詳 F 95:f ++象 F 96:f ++賞 F 97:f ++醤 F 98:f ++鉦 F 99:f ++鍾 F 100:f ++鐘 F 101:f ++障 F 102:f ++鞘 F 103:f ++上 F 104:f ++丈 F 105:f ++丞 F 106:f ++乗 F 107:f ++冗 F 108:f ++剰 F 109:f ++城 F 110:f ++場 F 111:f ++壌 F 112:f ++嬢 F 113:f ++常 F 114:f ++情 F 115:f ++擾 F 116:f ++条 F 117:f ++杖 F 118:f ++浄 F 119:f ++状 F 120:f ++畳 F 121:f ++穣 F 122:f ++蒸 F 123:f ++譲 F 124:f ++醸 F 125:f ++錠 F 126:f ++嘱 F 127:f ++埴 F 128:f ++飾 F 129:f ++拭 F 130:f ++植 F 131:f ++殖 F 132:f ++燭 F 133:f ++織 F 134:f ++職 F 135:f ++色 F 136:f ++触 F 137:f ++食 F 138:f ++蝕 F 139:f ++辱 F 140:f ++尻 F 141:f ++伸 F 142:f ++信 F 143:f ++侵 F 144:f ++唇 F 145:f ++娠 F 146:f ++寝 F 147:f ++審 F 148:f ++心 F 149:f ++慎 F 150:f ++振 F 151:f ++新 F 152:f ++晋 F 153:f ++森 F 154:f ++榛 F 155:f ++浸 F 156:f ++深 F 157:f ++申 F 158:f ++疹 F 159:f ++真 F 160:f ++神 F 161:f ++秦 F 162:f ++紳 F 163:f ++臣 F 164:f ++芯 F 165:f ++薪 F 166:f ++親 F 167:f ++診 F 168:f ++身 F 169:f ++辛 F 170:f ++進 F 171:f ++針 F 172:f ++震 F 173:f ++人 F 174:f ++仁 F 175:f ++刃 F 176:f ++塵 F 177:f ++壬 F 178:f ++尋 F 179:f ++甚 F 180:f ++尽 F 181:f ++腎 F 182:f ++訊 F 183:f ++迅 F 184:f ++陣 F 185:f ++靭 F 186:f ++笥 F 187:f ++諏 F 188:f ++須 F 189:f ++酢 F 190:f ++図 F 191:f ++厨 F 192:f ++逗 F 193:f ++吹 F 194:f ++垂 F 195:f ++帥 F 196:f ++推 F 197:f ++水 F 198:f ++炊 F 199:f ++睡 F 200:f ++粋 F 201:f ++翠 F 202:f ++衰 F 203:f ++遂 F 204:f ++酔 F 205:f ++錐 F 206:f ++錘 F 207:f ++随 F 208:f ++瑞 F 209:f ++髄 F 210:f ++崇 F 211:f ++嵩 F 212:f ++数 F 213:f ++枢 F 214:f ++趨 F 215:f ++雛 F 216:f ++据 F 217:f ++杉 F 218:f ++椙 F 219:f ++菅 F 220:f ++頗 F 221:f ++雀 F 222:f ++裾 F 223:f ++澄 F 224:f ++摺 F 225:f ++寸 F 226:f ++世 F 227:f ++瀬 F 228:f ++畝 F 229:f ++是 F 230:f ++凄 F 231:f ++制 F 232:f ++勢 F 233:f ++姓 F 234:f ++征 F 235:f ++性 F 236:f ++成 F 237:f ++政 F 238:f ++整 F 239:f ++星 F 240:f ++晴 F 241:f ++棲 F 242:f ++栖 F 243:f ++正 F 244:f ++清 F 245:f ++牲 F 246:f ++生 F 247:f ++盛 F 248:f ++精 F 249:f ++聖 F 250:f ++声 F 251:f ++製 F 252:f ++西 F 253:f ++誠 F 254:f ++誓 F 255:f ++請 F 0:g ++逝 F 1:g ++醒 F 2:g ++青 F 3:g ++静 F 4:g ++斉 F 5:g ++税 F 6:g ++脆 F 7:g ++隻 F 8:g ++席 F 9:g ++惜 F 10:g ++戚 F 11:g ++斥 F 12:g ++昔 F 13:g ++析 F 14:g ++石 F 15:g ++積 F 16:g ++籍 F 17:g ++績 F 18:g ++脊 F 19:g ++責 F 20:g ++赤 F 21:g ++跡 F 22:g ++蹟 F 23:g ++碩 F 24:g ++切 F 25:g ++拙 F 26:g ++接 F 27:g ++摂 F 28:g ++折 F 29:g ++設 F 30:g ++窃 F 31:g ++節 F 32:g ++説 F 33:g ++雪 F 34:g ++絶 F 35:g ++舌 F 36:g ++蝉 F 37:g ++仙 F 38:g ++先 F 39:g ++千 F 40:g ++占 F 41:g ++宣 F 42:g ++専 F 43:g ++尖 F 44:g ++川 F 45:g ++戦 F 46:g ++扇 F 47:g ++撰 F 48:g ++栓 F 49:g ++栴 F 50:g ++泉 F 51:g ++浅 F 52:g ++洗 F 53:g ++染 F 54:g ++潜 F 55:g ++煎 F 56:g ++煽 F 57:g ++旋 F 58:g ++穿 F 59:g ++箭 F 60:g ++線 F 61:g ++繊 F 62:g ++羨 F 63:g ++腺 F 64:g ++舛 F 65:g ++船 F 66:g ++薦 F 67:g ++詮 F 68:g ++賎 F 69:g ++践 F 70:g ++選 F 71:g ++遷 F 72:g ++銭 F 73:g ++銑 F 74:g ++閃 F 75:g ++鮮 F 76:g ++前 F 77:g ++善 F 78:g ++漸 F 79:g ++然 F 80:g ++全 F 81:g ++禅 F 82:g ++繕 F 83:g ++膳 F 84:g ++糎 F 85:g ++噌 F 86:g ++塑 F 87:g ++岨 F 88:g ++措 F 89:g ++曾 F 90:g ++曽 F 91:g ++楚 F 92:g ++狙 F 93:g ++疏 F 94:g ++疎 F 95:g ++礎 F 96:g ++祖 F 97:g ++租 F 98:g ++粗 F 99:g ++素 F 100:g ++組 F 101:g ++蘇 F 102:g ++訴 F 103:g ++阻 F 104:g ++遡 F 105:g ++鼠 F 106:g ++僧 F 107:g ++創 F 108:g ++双 F 109:g ++叢 F 110:g ++倉 F 111:g ++喪 F 112:g ++壮 F 113:g ++奏 F 114:g ++爽 F 115:g ++宋 F 116:g ++層 F 117:g ++匝 F 118:g ++惣 F 119:g ++想 F 120:g ++捜 F 121:g ++掃 F 122:g ++挿 F 123:g ++掻 F 124:g ++操 F 125:g ++早 F 126:g ++曹 F 127:g ++巣 F 128:g ++槍 F 129:g ++槽 F 130:g ++漕 F 131:g ++燥 F 132:g ++争 F 133:g ++痩 F 134:g ++相 F 135:g ++窓 F 136:g ++糟 F 137:g ++総 F 138:g ++綜 F 139:g ++聡 F 140:g ++草 F 141:g ++荘 F 142:g ++葬 F 143:g ++蒼 F 144:g ++藻 F 145:g ++装 F 146:g ++走 F 147:g ++送 F 148:g ++遭 F 149:g ++鎗 F 150:g ++霜 F 151:g ++騒 F 152:g ++像 F 153:g ++増 F 154:g ++憎 F 155:g ++臓 F 156:g ++蔵 F 157:g ++贈 F 158:g ++造 F 159:g ++促 F 160:g ++側 F 161:g ++則 F 162:g ++即 F 163:g ++息 F 164:g ++捉 F 165:g ++束 F 166:g ++測 F 167:g ++足 F 168:g ++速 F 169:g ++俗 F 170:g ++属 F 171:g ++賊 F 172:g ++族 F 173:g ++続 F 174:g ++卒 F 175:g ++袖 F 176:g ++其 F 177:g ++揃 F 178:g ++存 F 179:g ++孫 F 180:g ++尊 F 181:g ++損 F 182:g ++村 F 183:g ++遜 F 184:g ++他 F 185:g ++多 F 186:g ++太 F 187:g ++汰 F 188:g ++詑 F 189:g ++唾 F 190:g ++堕 F 191:g ++妥 F 192:g ++惰 F 193:g ++打 F 194:g ++柁 F 195:g ++舵 F 196:g ++楕 F 197:g ++陀 F 198:g ++駄 F 199:g ++騨 F 200:g ++体 F 201:g ++堆 F 202:g ++対 F 203:g ++耐 F 204:g ++岱 F 205:g ++帯 F 206:g ++待 F 207:g ++怠 F 208:g ++態 F 209:g ++戴 F 210:g ++替 F 211:g ++泰 F 212:g ++滞 F 213:g ++胎 F 214:g ++腿 F 215:g ++苔 F 216:g ++袋 F 217:g ++貸 F 218:g ++退 F 219:g ++逮 F 220:g ++隊 F 221:g ++黛 F 222:g ++鯛 F 223:g ++代 F 224:g ++台 F 225:g ++大 F 226:g ++第 F 227:g ++醍 F 228:g ++題 F 229:g ++鷹 F 230:g ++滝 F 231:g ++瀧 F 232:g ++卓 F 233:g ++啄 F 234:g ++宅 F 235:g ++托 F 236:g ++択 F 237:g ++拓 F 238:g ++沢 F 239:g ++濯 F 240:g ++琢 F 241:g ++託 F 242:g ++鐸 F 243:g ++濁 F 244:g ++諾 F 245:g ++茸 F 246:g ++凧 F 247:g ++蛸 F 248:g ++只 F 249:g ++叩 F 250:g ++但 F 251:g ++達 F 252:g ++辰 F 253:g ++奪 F 254:g ++脱 F 255:g ++巽 F 0:h ++竪 F 1:h ++辿 F 2:h ++棚 F 3:h ++谷 F 4:h ++狸 F 5:h ++鱈 F 6:h ++樽 F 7:h ++誰 F 8:h ++丹 F 9:h ++単 F 10:h ++嘆 F 11:h ++坦 F 12:h ++担 F 13:h ++探 F 14:h ++旦 F 15:h ++歎 F 16:h ++淡 F 17:h ++湛 F 18:h ++炭 F 19:h ++短 F 20:h ++端 F 21:h ++箪 F 22:h ++綻 F 23:h ++耽 F 24:h ++胆 F 25:h ++蛋 F 26:h ++誕 F 27:h ++鍛 F 28:h ++団 F 29:h ++壇 F 30:h ++弾 F 31:h ++断 F 32:h ++暖 F 33:h ++檀 F 34:h ++段 F 35:h ++男 F 36:h ++談 F 37:h ++値 F 38:h ++知 F 39:h ++地 F 40:h ++弛 F 41:h ++恥 F 42:h ++智 F 43:h ++池 F 44:h ++痴 F 45:h ++稚 F 46:h ++置 F 47:h ++致 F 48:h ++蜘 F 49:h ++遅 F 50:h ++馳 F 51:h ++築 F 52:h ++畜 F 53:h ++竹 F 54:h ++筑 F 55:h ++蓄 F 56:h ++逐 F 57:h ++秩 F 58:h ++窒 F 59:h ++茶 F 60:h ++嫡 F 61:h ++着 F 62:h ++中 F 63:h ++仲 F 64:h ++宙 F 65:h ++忠 F 66:h ++抽 F 67:h ++昼 F 68:h ++柱 F 69:h ++注 F 70:h ++虫 F 71:h ++衷 F 72:h ++註 F 73:h ++酎 F 74:h ++鋳 F 75:h ++駐 F 76:h ++樗 F 77:h ++瀦 F 78:h ++猪 F 79:h ++苧 F 80:h ++著 F 81:h ++貯 F 82:h ++丁 F 83:h ++兆 F 84:h ++凋 F 85:h ++喋 F 86:h ++寵 F 87:h ++帖 F 88:h ++帳 F 89:h ++庁 F 90:h ++弔 F 91:h ++張 F 92:h ++彫 F 93:h ++徴 F 94:h ++懲 F 95:h ++挑 F 96:h ++暢 F 97:h ++朝 F 98:h ++潮 F 99:h ++牒 F 100:h ++町 F 101:h ++眺 F 102:h ++聴 F 103:h ++脹 F 104:h ++腸 F 105:h ++蝶 F 106:h ++調 F 107:h ++諜 F 108:h ++超 F 109:h ++跳 F 110:h ++銚 F 111:h ++長 F 112:h ++頂 F 113:h ++鳥 F 114:h ++勅 F 115:h ++捗 F 116:h ++直 F 117:h ++朕 F 118:h ++沈 F 119:h ++珍 F 120:h ++賃 F 121:h ++鎮 F 122:h ++陳 F 123:h ++津 F 124:h ++墜 F 125:h ++椎 F 126:h ++槌 F 127:h ++追 F 128:h ++鎚 F 129:h ++痛 F 130:h ++通 F 131:h ++塚 F 132:h ++栂 F 133:h ++掴 F 134:h ++槻 F 135:h ++佃 F 136:h ++漬 F 137:h ++柘 F 138:h ++辻 F 139:h ++蔦 F 140:h ++綴 F 141:h ++鍔 F 142:h ++椿 F 143:h ++潰 F 144:h ++坪 F 145:h ++壷 F 146:h ++嬬 F 147:h ++紬 F 148:h ++爪 F 149:h ++吊 F 150:h ++釣 F 151:h ++鶴 F 152:h ++亭 F 153:h ++低 F 154:h ++停 F 155:h ++偵 F 156:h ++剃 F 157:h ++貞 F 158:h ++呈 F 159:h ++堤 F 160:h ++定 F 161:h ++帝 F 162:h ++底 F 163:h ++庭 F 164:h ++廷 F 165:h ++弟 F 166:h ++悌 F 167:h ++抵 F 168:h ++挺 F 169:h ++提 F 170:h ++梯 F 171:h ++汀 F 172:h ++碇 F 173:h ++禎 F 174:h ++程 F 175:h ++締 F 176:h ++艇 F 177:h ++訂 F 178:h ++諦 F 179:h ++蹄 F 180:h ++逓 F 181:h ++邸 F 182:h ++鄭 F 183:h ++釘 F 184:h ++鼎 F 185:h ++泥 F 186:h ++摘 F 187:h ++擢 F 188:h ++敵 F 189:h ++滴 F 190:h ++的 F 191:h ++笛 F 192:h ++適 F 193:h ++鏑 F 194:h ++溺 F 195:h ++哲 F 196:h ++徹 F 197:h ++撤 F 198:h ++轍 F 199:h ++迭 F 200:h ++鉄 F 201:h ++典 F 202:h ++填 F 203:h ++天 F 204:h ++展 F 205:h ++店 F 206:h ++添 F 207:h ++纏 F 208:h ++甜 F 209:h ++貼 F 210:h ++転 F 211:h ++顛 F 212:h ++点 F 213:h ++伝 F 214:h ++殿 F 215:h ++澱 F 216:h ++田 F 217:h ++電 F 218:h ++兎 F 219:h ++吐 F 220:h ++堵 F 221:h ++塗 F 222:h ++妬 F 223:h ++屠 F 224:h ++徒 F 225:h ++斗 F 226:h ++杜 F 227:h ++渡 F 228:h ++登 F 229:h ++菟 F 230:h ++賭 F 231:h ++途 F 232:h ++都 F 233:h ++鍍 F 234:h ++砥 F 235:h ++砺 F 236:h ++努 F 237:h ++度 F 238:h ++土 F 239:h ++奴 F 240:h ++怒 F 241:h ++倒 F 242:h ++党 F 243:h ++冬 F 244:h ++凍 F 245:h ++刀 F 246:h ++唐 F 247:h ++塔 F 248:h ++塘 F 249:h ++套 F 250:h ++宕 F 251:h ++島 F 252:h ++嶋 F 253:h ++悼 F 254:h ++投 F 255:h ++搭 F 0:i ++東 F 1:i ++桃 F 2:i ++梼 F 3:i ++棟 F 4:i ++盗 F 5:i ++淘 F 6:i ++湯 F 7:i ++涛 F 8:i ++灯 F 9:i ++燈 F 10:i ++当 F 11:i ++痘 F 12:i ++祷 F 13:i ++等 F 14:i ++答 F 15:i ++筒 F 16:i ++糖 F 17:i ++統 F 18:i ++到 F 19:i ++董 F 20:i ++蕩 F 21:i ++藤 F 22:i ++討 F 23:i ++謄 F 24:i ++豆 F 25:i ++踏 F 26:i ++逃 F 27:i ++透 F 28:i ++鐙 F 29:i ++陶 F 30:i ++頭 F 31:i ++騰 F 32:i ++闘 F 33:i ++働 F 34:i ++動 F 35:i ++同 F 36:i ++堂 F 37:i ++導 F 38:i ++憧 F 39:i ++撞 F 40:i ++洞 F 41:i ++瞳 F 42:i ++童 F 43:i ++胴 F 44:i ++萄 F 45:i ++道 F 46:i ++銅 F 47:i ++峠 F 48:i ++鴇 F 49:i ++匿 F 50:i ++得 F 51:i ++徳 F 52:i ++涜 F 53:i ++特 F 54:i ++督 F 55:i ++禿 F 56:i ++篤 F 57:i ++毒 F 58:i ++独 F 59:i ++読 F 60:i ++栃 F 61:i ++橡 F 62:i ++凸 F 63:i ++突 F 64:i ++椴 F 65:i ++届 F 66:i ++鳶 F 67:i ++苫 F 68:i ++寅 F 69:i ++酉 F 70:i ++瀞 F 71:i ++噸 F 72:i ++屯 F 73:i ++惇 F 74:i ++敦 F 75:i ++沌 F 76:i ++豚 F 77:i ++遁 F 78:i ++頓 F 79:i ++呑 F 80:i ++曇 F 81:i ++鈍 F 82:i ++奈 F 83:i ++那 F 84:i ++内 F 85:i ++乍 F 86:i ++凪 F 87:i ++薙 F 88:i ++謎 F 89:i ++灘 F 90:i ++捺 F 91:i ++鍋 F 92:i ++楢 F 93:i ++馴 F 94:i ++縄 F 95:i ++畷 F 96:i ++南 F 97:i ++楠 F 98:i ++軟 F 99:i ++難 F 100:i ++汝 F 101:i ++二 F 102:i ++尼 F 103:i ++弐 F 104:i ++迩 F 105:i ++匂 F 106:i ++賑 F 107:i ++肉 F 108:i ++虹 F 109:i ++廿 F 110:i ++日 F 111:i ++乳 F 112:i ++入 F 113:i ++如 F 114:i ++尿 F 115:i ++韮 F 116:i ++任 F 117:i ++妊 F 118:i ++忍 F 119:i ++認 F 120:i ++濡 F 121:i ++禰 F 122:i ++祢 F 123:i ++寧 F 124:i ++葱 F 125:i ++猫 F 126:i ++熱 F 127:i ++年 F 128:i ++念 F 129:i ++捻 F 130:i ++撚 F 131:i ++燃 F 132:i ++粘 F 133:i ++乃 F 134:i ++廼 F 135:i ++之 F 136:i ++埜 F 137:i ++嚢 F 138:i ++悩 F 139:i ++濃 F 140:i ++納 F 141:i ++能 F 142:i ++脳 F 143:i ++膿 F 144:i ++農 F 145:i ++覗 F 146:i ++蚤 F 147:i ++巴 F 148:i ++把 F 149:i ++播 F 150:i ++覇 F 151:i ++杷 F 152:i ++波 F 153:i ++派 F 154:i ++琶 F 155:i ++破 F 156:i ++婆 F 157:i ++罵 F 158:i ++芭 F 159:i ++馬 F 160:i ++俳 F 161:i ++廃 F 162:i ++拝 F 163:i ++排 F 164:i ++敗 F 165:i ++杯 F 166:i ++盃 F 167:i ++牌 F 168:i ++背 F 169:i ++肺 F 170:i ++輩 F 171:i ++配 F 172:i ++倍 F 173:i ++培 F 174:i ++媒 F 175:i ++梅 F 176:i ++楳 F 177:i ++煤 F 178:i ++狽 F 179:i ++買 F 180:i ++売 F 181:i ++賠 F 182:i ++陪 F 183:i ++這 F 184:i ++蝿 F 185:i ++秤 F 186:i ++矧 F 187:i ++萩 F 188:i ++伯 F 189:i ++剥 F 190:i ++博 F 191:i ++拍 F 192:i ++柏 F 193:i ++泊 F 194:i ++白 F 195:i ++箔 F 196:i ++粕 F 197:i ++舶 F 198:i ++薄 F 199:i ++迫 F 200:i ++曝 F 201:i ++漠 F 202:i ++爆 F 203:i ++縛 F 204:i ++莫 F 205:i ++駁 F 206:i ++麦 F 207:i ++函 F 208:i ++箱 F 209:i ++硲 F 210:i ++箸 F 211:i ++肇 F 212:i ++筈 F 213:i ++櫨 F 214:i ++幡 F 215:i ++肌 F 216:i ++畑 F 217:i ++畠 F 218:i ++八 F 219:i ++鉢 F 220:i ++溌 F 221:i ++発 F 222:i ++醗 F 223:i ++髪 F 224:i ++伐 F 225:i ++罰 F 226:i ++抜 F 227:i ++筏 F 228:i ++閥 F 229:i ++鳩 F 230:i ++噺 F 231:i ++塙 F 232:i ++蛤 F 233:i ++隼 F 234:i ++伴 F 235:i ++判 F 236:i ++半 F 237:i ++反 F 238:i ++叛 F 239:i ++帆 F 240:i ++搬 F 241:i ++斑 F 242:i ++板 F 243:i ++氾 F 244:i ++汎 F 245:i ++版 F 246:i ++犯 F 247:i ++班 F 248:i ++畔 F 249:i ++繁 F 250:i ++般 F 251:i ++藩 F 252:i ++販 F 253:i ++範 F 254:i ++釆 F 255:i ++煩 F 0:j ++頒 F 1:j ++飯 F 2:j ++挽 F 3:j ++晩 F 4:j ++番 F 5:j ++盤 F 6:j ++磐 F 7:j ++蕃 F 8:j ++蛮 F 9:j ++匪 F 10:j ++卑 F 11:j ++否 F 12:j ++妃 F 13:j ++庇 F 14:j ++彼 F 15:j ++悲 F 16:j ++扉 F 17:j ++批 F 18:j ++披 F 19:j ++斐 F 20:j ++比 F 21:j ++泌 F 22:j ++疲 F 23:j ++皮 F 24:j ++碑 F 25:j ++秘 F 26:j ++緋 F 27:j ++罷 F 28:j ++肥 F 29:j ++被 F 30:j ++誹 F 31:j ++費 F 32:j ++避 F 33:j ++非 F 34:j ++飛 F 35:j ++樋 F 36:j ++簸 F 37:j ++備 F 38:j ++尾 F 39:j ++微 F 40:j ++枇 F 41:j ++毘 F 42:j ++琵 F 43:j ++眉 F 44:j ++美 F 45:j ++鼻 F 46:j ++柊 F 47:j ++稗 F 48:j ++匹 F 49:j ++疋 F 50:j ++髭 F 51:j ++彦 F 52:j ++膝 F 53:j ++菱 F 54:j ++肘 F 55:j ++弼 F 56:j ++必 F 57:j ++畢 F 58:j ++筆 F 59:j ++逼 F 60:j ++桧 F 61:j ++姫 F 62:j ++媛 F 63:j ++紐 F 64:j ++百 F 65:j ++謬 F 66:j ++俵 F 67:j ++彪 F 68:j ++標 F 69:j ++氷 F 70:j ++漂 F 71:j ++瓢 F 72:j ++票 F 73:j ++表 F 74:j ++評 F 75:j ++豹 F 76:j ++廟 F 77:j ++描 F 78:j ++病 F 79:j ++秒 F 80:j ++苗 F 81:j ++錨 F 82:j ++鋲 F 83:j ++蒜 F 84:j ++蛭 F 85:j ++鰭 F 86:j ++品 F 87:j ++彬 F 88:j ++斌 F 89:j ++浜 F 90:j ++瀕 F 91:j ++貧 F 92:j ++賓 F 93:j ++頻 F 94:j ++敏 F 95:j ++瓶 F 96:j ++不 F 97:j ++付 F 98:j ++埠 F 99:j ++夫 F 100:j ++婦 F 101:j ++富 F 102:j ++冨 F 103:j ++布 F 104:j ++府 F 105:j ++怖 F 106:j ++扶 F 107:j ++敷 F 108:j ++斧 F 109:j ++普 F 110:j ++浮 F 111:j ++父 F 112:j ++符 F 113:j ++腐 F 114:j ++膚 F 115:j ++芙 F 116:j ++譜 F 117:j ++負 F 118:j ++賦 F 119:j ++赴 F 120:j ++阜 F 121:j ++附 F 122:j ++侮 F 123:j ++撫 F 124:j ++武 F 125:j ++舞 F 126:j ++葡 F 127:j ++蕪 F 128:j ++部 F 129:j ++封 F 130:j ++楓 F 131:j ++風 F 132:j ++葺 F 133:j ++蕗 F 134:j ++伏 F 135:j ++副 F 136:j ++復 F 137:j ++幅 F 138:j ++服 F 139:j ++福 F 140:j ++腹 F 141:j ++複 F 142:j ++覆 F 143:j ++淵 F 144:j ++弗 F 145:j ++払 F 146:j ++沸 F 147:j ++仏 F 148:j ++物 F 149:j ++鮒 F 150:j ++分 F 151:j ++吻 F 152:j ++噴 F 153:j ++墳 F 154:j ++憤 F 155:j ++扮 F 156:j ++焚 F 157:j ++奮 F 158:j ++粉 F 159:j ++糞 F 160:j ++紛 F 161:j ++雰 F 162:j ++文 F 163:j ++聞 F 164:j ++丙 F 165:j ++併 F 166:j ++兵 F 167:j ++塀 F 168:j ++幣 F 169:j ++平 F 170:j ++弊 F 171:j ++柄 F 172:j ++並 F 173:j ++蔽 F 174:j ++閉 F 175:j ++陛 F 176:j ++米 F 177:j ++頁 F 178:j ++僻 F 179:j ++壁 F 180:j ++癖 F 181:j ++碧 F 182:j ++別 F 183:j ++瞥 F 184:j ++蔑 F 185:j ++箆 F 186:j ++偏 F 187:j ++変 F 188:j ++片 F 189:j ++篇 F 190:j ++編 F 191:j ++辺 F 192:j ++返 F 193:j ++遍 F 194:j ++便 F 195:j ++勉 F 196:j ++娩 F 197:j ++弁 F 198:j ++鞭 F 199:j ++保 F 200:j ++舗 F 201:j ++鋪 F 202:j ++圃 F 203:j ++捕 F 204:j ++歩 F 205:j ++甫 F 206:j ++補 F 207:j ++輔 F 208:j ++穂 F 209:j ++募 F 210:j ++墓 F 211:j ++慕 F 212:j ++戊 F 213:j ++暮 F 214:j ++母 F 215:j ++簿 F 216:j ++菩 F 217:j ++倣 F 218:j ++俸 F 219:j ++包 F 220:j ++呆 F 221:j ++報 F 222:j ++奉 F 223:j ++宝 F 224:j ++峰 F 225:j ++峯 F 226:j ++崩 F 227:j ++庖 F 228:j ++抱 F 229:j ++捧 F 230:j ++放 F 231:j ++方 F 232:j ++朋 F 233:j ++法 F 234:j ++泡 F 235:j ++烹 F 236:j ++砲 F 237:j ++縫 F 238:j ++胞 F 239:j ++芳 F 240:j ++萌 F 241:j ++蓬 F 242:j ++蜂 F 243:j ++褒 F 244:j ++訪 F 245:j ++豊 F 246:j ++邦 F 247:j ++鋒 F 248:j ++飽 F 249:j ++鳳 F 250:j ++鵬 F 251:j ++乏 F 252:j ++亡 F 253:j ++傍 F 254:j ++剖 F 255:j ++坊 F 0:k ++妨 F 1:k ++帽 F 2:k ++忘 F 3:k ++忙 F 4:k ++房 F 5:k ++暴 F 6:k ++望 F 7:k ++某 F 8:k ++棒 F 9:k ++冒 F 10:k ++紡 F 11:k ++肪 F 12:k ++膨 F 13:k ++謀 F 14:k ++貌 F 15:k ++貿 F 16:k ++鉾 F 17:k ++防 F 18:k ++吠 F 19:k ++頬 F 20:k ++北 F 21:k ++僕 F 22:k ++卜 F 23:k ++墨 F 24:k ++撲 F 25:k ++朴 F 26:k ++牧 F 27:k ++睦 F 28:k ++穆 F 29:k ++釦 F 30:k ++勃 F 31:k ++没 F 32:k ++殆 F 33:k ++堀 F 34:k ++幌 F 35:k ++奔 F 36:k ++本 F 37:k ++翻 F 38:k ++凡 F 39:k ++盆 F 40:k ++摩 F 41:k ++磨 F 42:k ++魔 F 43:k ++麻 F 44:k ++埋 F 45:k ++妹 F 46:k ++昧 F 47:k ++枚 F 48:k ++毎 F 49:k ++哩 F 50:k ++槙 F 51:k ++幕 F 52:k ++膜 F 53:k ++枕 F 54:k ++鮪 F 55:k ++柾 F 56:k ++鱒 F 57:k ++桝 F 58:k ++亦 F 59:k ++俣 F 60:k ++又 F 61:k ++抹 F 62:k ++末 F 63:k ++沫 F 64:k ++迄 F 65:k ++侭 F 66:k ++繭 F 67:k ++麿 F 68:k ++万 F 69:k ++慢 F 70:k ++満 F 71:k ++漫 F 72:k ++蔓 F 73:k ++味 F 74:k ++未 F 75:k ++魅 F 76:k ++巳 F 77:k ++箕 F 78:k ++岬 F 79:k ++密 F 80:k ++蜜 F 81:k ++湊 F 82:k ++蓑 F 83:k ++稔 F 84:k ++脈 F 85:k ++妙 F 86:k ++粍 F 87:k ++民 F 88:k ++眠 F 89:k ++務 F 90:k ++夢 F 91:k ++無 F 92:k ++牟 F 93:k ++矛 F 94:k ++霧 F 95:k ++鵡 F 96:k ++椋 F 97:k ++婿 F 98:k ++娘 F 99:k ++冥 F 100:k ++名 F 101:k ++命 F 102:k ++明 F 103:k ++盟 F 104:k ++迷 F 105:k ++銘 F 106:k ++鳴 F 107:k ++姪 F 108:k ++牝 F 109:k ++滅 F 110:k ++免 F 111:k ++棉 F 112:k ++綿 F 113:k ++緬 F 114:k ++面 F 115:k ++麺 F 116:k ++摸 F 117:k ++模 F 118:k ++茂 F 119:k ++妄 F 120:k ++孟 F 121:k ++毛 F 122:k ++猛 F 123:k ++盲 F 124:k ++網 F 125:k ++耗 F 126:k ++蒙 F 127:k ++儲 F 128:k ++木 F 129:k ++黙 F 130:k ++目 F 131:k ++杢 F 132:k ++勿 F 133:k ++餅 F 134:k ++尤 F 135:k ++戻 F 136:k ++籾 F 137:k ++貰 F 138:k ++問 F 139:k ++悶 F 140:k ++紋 F 141:k ++門 F 142:k ++匁 F 143:k ++也 F 144:k ++冶 F 145:k ++夜 F 146:k ++爺 F 147:k ++耶 F 148:k ++野 F 149:k ++弥 F 150:k ++矢 F 151:k ++厄 F 152:k ++役 F 153:k ++約 F 154:k ++薬 F 155:k ++訳 F 156:k ++躍 F 157:k ++靖 F 158:k ++柳 F 159:k ++薮 F 160:k ++鑓 F 161:k ++愉 F 162:k ++愈 F 163:k ++油 F 164:k ++癒 F 165:k ++諭 F 166:k ++輸 F 167:k ++唯 F 168:k ++佑 F 169:k ++優 F 170:k ++勇 F 171:k ++友 F 172:k ++宥 F 173:k ++幽 F 174:k ++悠 F 175:k ++憂 F 176:k ++揖 F 177:k ++有 F 178:k ++柚 F 179:k ++湧 F 180:k ++涌 F 181:k ++猶 F 182:k ++猷 F 183:k ++由 F 184:k ++祐 F 185:k ++裕 F 186:k ++誘 F 187:k ++遊 F 188:k ++邑 F 189:k ++郵 F 190:k ++雄 F 191:k ++融 F 192:k ++夕 F 193:k ++予 F 194:k ++余 F 195:k ++与 F 196:k ++誉 F 197:k ++輿 F 198:k ++預 F 199:k ++傭 F 200:k ++幼 F 201:k ++妖 F 202:k ++容 F 203:k ++庸 F 204:k ++揚 F 205:k ++揺 F 206:k ++擁 F 207:k ++曜 F 208:k ++楊 F 209:k ++様 F 210:k ++洋 F 211:k ++溶 F 212:k ++熔 F 213:k ++用 F 214:k ++窯 F 215:k ++羊 F 216:k ++耀 F 217:k ++葉 F 218:k ++蓉 F 219:k ++要 F 220:k ++謡 F 221:k ++踊 F 222:k ++遥 F 223:k ++陽 F 224:k ++養 F 225:k ++慾 F 226:k ++抑 F 227:k ++欲 F 228:k ++沃 F 229:k ++浴 F 230:k ++翌 F 231:k ++翼 F 232:k ++淀 F 233:k ++羅 F 234:k ++螺 F 235:k ++裸 F 236:k ++来 F 237:k ++莱 F 238:k ++頼 F 239:k ++雷 F 240:k ++洛 F 241:k ++絡 F 242:k ++落 F 243:k ++酪 F 244:k ++乱 F 245:k ++卵 F 246:k ++嵐 F 247:k ++欄 F 248:k ++濫 F 249:k ++藍 F 250:k ++蘭 F 251:k ++覧 F 252:k ++利 F 253:k ++吏 F 254:k ++履 F 255:k ++李 F 0:l ++梨 F 1:l ++理 F 2:l ++璃 F 3:l ++痢 F 4:l ++裏 F 5:l ++裡 F 6:l ++里 F 7:l ++離 F 8:l ++陸 F 9:l ++律 F 10:l ++率 F 11:l ++立 F 12:l ++葎 F 13:l ++掠 F 14:l ++略 F 15:l ++劉 F 16:l ++流 F 17:l ++溜 F 18:l ++琉 F 19:l ++留 F 20:l ++硫 F 21:l ++粒 F 22:l ++隆 F 23:l ++竜 F 24:l ++龍 F 25:l ++侶 F 26:l ++慮 F 27:l ++旅 F 28:l ++虜 F 29:l ++了 F 30:l ++亮 F 31:l ++僚 F 32:l ++両 F 33:l ++凌 F 34:l ++寮 F 35:l ++料 F 36:l ++梁 F 37:l ++涼 F 38:l ++猟 F 39:l ++療 F 40:l ++瞭 F 41:l ++稜 F 42:l ++糧 F 43:l ++良 F 44:l ++諒 F 45:l ++遼 F 46:l ++量 F 47:l ++陵 F 48:l ++領 F 49:l ++力 F 50:l ++緑 F 51:l ++倫 F 52:l ++厘 F 53:l ++林 F 54:l ++淋 F 55:l ++燐 F 56:l ++琳 F 57:l ++臨 F 58:l ++輪 F 59:l ++隣 F 60:l ++鱗 F 61:l ++麟 F 62:l ++瑠 F 63:l ++塁 F 64:l ++涙 F 65:l ++累 F 66:l ++類 F 67:l ++令 F 68:l ++伶 F 69:l ++例 F 70:l ++冷 F 71:l ++励 F 72:l ++嶺 F 73:l ++怜 F 74:l ++玲 F 75:l ++礼 F 76:l ++苓 F 77:l ++鈴 F 78:l ++隷 F 79:l ++零 F 80:l ++霊 F 81:l ++麗 F 82:l ++齢 F 83:l ++暦 F 84:l ++歴 F 85:l ++列 F 86:l ++劣 F 87:l ++烈 F 88:l ++裂 F 89:l ++廉 F 90:l ++恋 F 91:l ++憐 F 92:l ++漣 F 93:l ++煉 F 94:l ++簾 F 95:l ++練 F 96:l ++聯 F 97:l ++蓮 F 98:l ++連 F 99:l ++錬 F 100:l ++呂 F 101:l ++魯 F 102:l ++櫓 F 103:l ++炉 F 104:l ++賂 F 105:l ++路 F 106:l ++露 F 107:l ++労 F 108:l ++婁 F 109:l ++廊 F 110:l ++弄 F 111:l ++朗 F 112:l ++楼 F 113:l ++榔 F 114:l ++浪 F 115:l ++漏 F 116:l ++牢 F 117:l ++狼 F 118:l ++篭 F 119:l ++老 F 120:l ++聾 F 121:l ++蝋 F 122:l ++郎 F 123:l ++六 F 124:l ++麓 F 125:l ++禄 F 126:l ++肋 F 127:l ++録 F 128:l ++論 F 129:l ++倭 F 130:l ++和 F 131:l ++話 F 132:l ++歪 F 133:l ++賄 F 134:l ++脇 F 135:l ++惑 F 136:l ++枠 F 137:l ++鷲 F 138:l ++亙 F 139:l ++亘 F 140:l ++鰐 F 141:l ++詫 F 142:l ++藁 F 143:l ++蕨 F 144:l ++椀 F 145:l ++湾 F 146:l ++碗 F 147:l ++腕 F 148:l ++弌 F 0:m ++丐 F 1:m ++丕 F 2:m ++个 F 3:m ++丱 F 4:m ++丶 F 5:m ++丼 F 6:m ++丿 F 7:m ++乂 F 8:m ++乖 F 9:m ++乘 F 10:m ++亂 F 11:m ++亅 F 12:m ++豫 F 13:m ++亊 F 14:m ++舒 F 15:m ++弍 F 16:m ++于 F 17:m ++亞 F 18:m ++亟 F 19:m ++亠 F 20:m ++亢 F 21:m ++亰 F 22:m ++亳 F 23:m ++亶 F 24:m ++从 F 25:m ++仍 F 26:m ++仄 F 27:m ++仆 F 28:m ++仂 F 29:m ++仗 F 30:m ++仞 F 31:m ++仭 F 32:m ++仟 F 33:m ++价 F 34:m ++伉 F 35:m ++佚 F 36:m ++估 F 37:m ++佛 F 38:m ++佝 F 39:m ++佗 F 40:m ++佇 F 41:m ++佶 F 42:m ++侈 F 43:m ++侏 F 44:m ++侘 F 45:m ++佻 F 46:m ++佩 F 47:m ++佰 F 48:m ++侑 F 49:m ++佯 F 50:m ++來 F 51:m ++侖 F 52:m ++儘 F 53:m ++俔 F 54:m ++俟 F 55:m ++俎 F 56:m ++俘 F 57:m ++俛 F 58:m ++俑 F 59:m ++俚 F 60:m ++俐 F 61:m ++俤 F 62:m ++俥 F 63:m ++倚 F 64:m ++倨 F 65:m ++倔 F 66:m ++倪 F 67:m ++倥 F 68:m ++倅 F 69:m ++伜 F 70:m ++俶 F 71:m ++倡 F 72:m ++倩 F 73:m ++倬 F 74:m ++俾 F 75:m ++俯 F 76:m ++們 F 77:m ++倆 F 78:m ++偃 F 79:m ++假 F 80:m ++會 F 81:m ++偕 F 82:m ++偐 F 83:m ++偈 F 84:m ++做 F 85:m ++偖 F 86:m ++偬 F 87:m ++偸 F 88:m ++傀 F 89:m ++傚 F 90:m ++傅 F 91:m ++傴 F 92:m ++傲 F 93:m ++僉 F 94:m ++僊 F 95:m ++傳 F 96:m ++僂 F 97:m ++僖 F 98:m ++僞 F 99:m ++僥 F 100:m ++僭 F 101:m ++僣 F 102:m ++僮 F 103:m ++價 F 104:m ++僵 F 105:m ++儉 F 106:m ++儁 F 107:m ++儂 F 108:m ++儖 F 109:m ++儕 F 110:m ++儔 F 111:m ++儚 F 112:m ++儡 F 113:m ++儺 F 114:m ++儷 F 115:m ++儼 F 116:m ++儻 F 117:m ++儿 F 118:m ++兀 F 119:m ++兒 F 120:m ++兌 F 121:m ++兔 F 122:m ++兢 F 123:m ++竸 F 124:m ++兩 F 125:m ++兪 F 126:m ++兮 F 127:m ++冀 F 128:m ++冂 F 129:m ++囘 F 130:m ++册 F 131:m ++冉 F 132:m ++冏 F 133:m ++冑 F 134:m ++冓 F 135:m ++冕 F 136:m ++冖 F 137:m ++冤 F 138:m ++冦 F 139:m ++冢 F 140:m ++冩 F 141:m ++冪 F 142:m ++冫 F 143:m ++决 F 144:m ++冱 F 145:m ++冲 F 146:m ++冰 F 147:m ++况 F 148:m ++冽 F 149:m ++凅 F 150:m ++凉 F 151:m ++凛 F 152:m ++几 F 153:m ++處 F 154:m ++凩 F 155:m ++凭 F 156:m ++凰 F 157:m ++凵 F 158:m ++凾 F 159:m ++刄 F 160:m ++刋 F 161:m ++刔 F 162:m ++刎 F 163:m ++刧 F 164:m ++刪 F 165:m ++刮 F 166:m ++刳 F 167:m ++刹 F 168:m ++剏 F 169:m ++剄 F 170:m ++剋 F 171:m ++剌 F 172:m ++剞 F 173:m ++剔 F 174:m ++剪 F 175:m ++剴 F 176:m ++剩 F 177:m ++剳 F 178:m ++剿 F 179:m ++剽 F 180:m ++劍 F 181:m ++劔 F 182:m ++劒 F 183:m ++剱 F 184:m ++劈 F 185:m ++劑 F 186:m ++辨 F 187:m ++辧 F 188:m ++劬 F 189:m ++劭 F 190:m ++劼 F 191:m ++劵 F 192:m ++勁 F 193:m ++勍 F 194:m ++勗 F 195:m ++勞 F 196:m ++勣 F 197:m ++勦 F 198:m ++飭 F 199:m ++勠 F 200:m ++勳 F 201:m ++勵 F 202:m ++勸 F 203:m ++勹 F 204:m ++匆 F 205:m ++匈 F 206:m ++甸 F 207:m ++匍 F 208:m ++匐 F 209:m ++匏 F 210:m ++匕 F 211:m ++匚 F 212:m ++匣 F 213:m ++匯 F 214:m ++匱 F 215:m ++匳 F 216:m ++匸 F 217:m ++區 F 218:m ++卆 F 219:m ++卅 F 220:m ++丗 F 221:m ++卉 F 222:m ++卍 F 223:m ++凖 F 224:m ++卞 F 225:m ++卩 F 226:m ++卮 F 227:m ++夘 F 228:m ++卻 F 229:m ++卷 F 230:m ++厂 F 231:m ++厖 F 232:m ++厠 F 233:m ++厦 F 234:m ++厥 F 235:m ++厮 F 236:m ++厰 F 237:m ++厶 F 238:m ++參 F 239:m ++簒 F 240:m ++雙 F 241:m ++叟 F 242:m ++曼 F 243:m ++燮 F 244:m ++叮 F 245:m ++叨 F 246:m ++叭 F 247:m ++叺 F 248:m ++吁 F 249:m ++吽 F 250:m ++呀 F 251:m ++听 F 252:m ++吭 F 253:m ++吼 F 254:m ++吮 F 255:m ++吶 F 0:n ++吩 F 1:n ++吝 F 2:n ++呎 F 3:n ++咏 F 4:n ++呵 F 5:n ++咎 F 6:n ++呟 F 7:n ++呱 F 8:n ++呷 F 9:n ++呰 F 10:n ++咒 F 11:n ++呻 F 12:n ++咀 F 13:n ++呶 F 14:n ++咄 F 15:n ++咐 F 16:n ++咆 F 17:n ++哇 F 18:n ++咢 F 19:n ++咸 F 20:n ++咥 F 21:n ++咬 F 22:n ++哄 F 23:n ++哈 F 24:n ++咨 F 25:n ++咫 F 26:n ++哂 F 27:n ++咤 F 28:n ++咾 F 29:n ++咼 F 30:n ++哘 F 31:n ++哥 F 32:n ++哦 F 33:n ++唏 F 34:n ++唔 F 35:n ++哽 F 36:n ++哮 F 37:n ++哭 F 38:n ++哺 F 39:n ++哢 F 40:n ++唹 F 41:n ++啀 F 42:n ++啣 F 43:n ++啌 F 44:n ++售 F 45:n ++啜 F 46:n ++啅 F 47:n ++啖 F 48:n ++啗 F 49:n ++唸 F 50:n ++唳 F 51:n ++啝 F 52:n ++喙 F 53:n ++喀 F 54:n ++咯 F 55:n ++喊 F 56:n ++喟 F 57:n ++啻 F 58:n ++啾 F 59:n ++喘 F 60:n ++喞 F 61:n ++單 F 62:n ++啼 F 63:n ++喃 F 64:n ++喩 F 65:n ++喇 F 66:n ++喨 F 67:n ++嗚 F 68:n ++嗅 F 69:n ++嗟 F 70:n ++嗄 F 71:n ++嗜 F 72:n ++嗤 F 73:n ++嗔 F 74:n ++嘔 F 75:n ++嗷 F 76:n ++嘖 F 77:n ++嗾 F 78:n ++嗽 F 79:n ++嘛 F 80:n ++嗹 F 81:n ++噎 F 82:n ++噐 F 83:n ++營 F 84:n ++嘴 F 85:n ++嘶 F 86:n ++嘲 F 87:n ++嘸 F 88:n ++噫 F 89:n ++噤 F 90:n ++嘯 F 91:n ++噬 F 92:n ++噪 F 93:n ++嚆 F 94:n ++嚀 F 95:n ++嚊 F 96:n ++嚠 F 97:n ++嚔 F 98:n ++嚏 F 99:n ++嚥 F 100:n ++嚮 F 101:n ++嚶 F 102:n ++嚴 F 103:n ++囂 F 104:n ++嚼 F 105:n ++囁 F 106:n ++囃 F 107:n ++囀 F 108:n ++囈 F 109:n ++囎 F 110:n ++囑 F 111:n ++囓 F 112:n ++囗 F 113:n ++囮 F 114:n ++囹 F 115:n ++圀 F 116:n ++囿 F 117:n ++圄 F 118:n ++圉 F 119:n ++圈 F 120:n ++國 F 121:n ++圍 F 122:n ++圓 F 123:n ++團 F 124:n ++圖 F 125:n ++嗇 F 126:n ++圜 F 127:n ++圦 F 128:n ++圷 F 129:n ++圸 F 130:n ++坎 F 131:n ++圻 F 132:n ++址 F 133:n ++坏 F 134:n ++坩 F 135:n ++埀 F 136:n ++垈 F 137:n ++坡 F 138:n ++坿 F 139:n ++垉 F 140:n ++垓 F 141:n ++垠 F 142:n ++垳 F 143:n ++垤 F 144:n ++垪 F 145:n ++垰 F 146:n ++埃 F 147:n ++埆 F 148:n ++埔 F 149:n ++埒 F 150:n ++埓 F 151:n ++堊 F 152:n ++埖 F 153:n ++埣 F 154:n ++堋 F 155:n ++堙 F 156:n ++堝 F 157:n ++塲 F 158:n ++堡 F 159:n ++塢 F 160:n ++塋 F 161:n ++塰 F 162:n ++毀 F 163:n ++塒 F 164:n ++堽 F 165:n ++塹 F 166:n ++墅 F 167:n ++墹 F 168:n ++墟 F 169:n ++墫 F 170:n ++墺 F 171:n ++壞 F 172:n ++墻 F 173:n ++墸 F 174:n ++墮 F 175:n ++壅 F 176:n ++壓 F 177:n ++壑 F 178:n ++壗 F 179:n ++壙 F 180:n ++壘 F 181:n ++壥 F 182:n ++壜 F 183:n ++壤 F 184:n ++壟 F 185:n ++壯 F 186:n ++壺 F 187:n ++壹 F 188:n ++壻 F 189:n ++壼 F 190:n ++壽 F 191:n ++夂 F 192:n ++夊 F 193:n ++夐 F 194:n ++夛 F 195:n ++梦 F 196:n ++夥 F 197:n ++夬 F 198:n ++夭 F 199:n ++夲 F 200:n ++夸 F 201:n ++夾 F 202:n ++竒 F 203:n ++奕 F 204:n ++奐 F 205:n ++奎 F 206:n ++奚 F 207:n ++奘 F 208:n ++奢 F 209:n ++奠 F 210:n ++奧 F 211:n ++奬 F 212:n ++奩 F 213:n ++奸 F 214:n ++妁 F 215:n ++妝 F 216:n ++佞 F 217:n ++侫 F 218:n ++妣 F 219:n ++妲 F 220:n ++姆 F 221:n ++姨 F 222:n ++姜 F 223:n ++妍 F 224:n ++姙 F 225:n ++姚 F 226:n ++娥 F 227:n ++娟 F 228:n ++娑 F 229:n ++娜 F 230:n ++娉 F 231:n ++娚 F 232:n ++婀 F 233:n ++婬 F 234:n ++婉 F 235:n ++娵 F 236:n ++娶 F 237:n ++婢 F 238:n ++婪 F 239:n ++媚 F 240:n ++媼 F 241:n ++媾 F 242:n ++嫋 F 243:n ++嫂 F 244:n ++媽 F 245:n ++嫣 F 246:n ++嫗 F 247:n ++嫦 F 248:n ++嫩 F 249:n ++嫖 F 250:n ++嫺 F 251:n ++嫻 F 252:n ++嬌 F 253:n ++嬋 F 254:n ++嬖 F 255:n ++嬲 F 0:o ++嫐 F 1:o ++嬪 F 2:o ++嬶 F 3:o ++嬾 F 4:o ++孃 F 5:o ++孅 F 6:o ++孀 F 7:o ++孑 F 8:o ++孕 F 9:o ++孚 F 10:o ++孛 F 11:o ++孥 F 12:o ++孩 F 13:o ++孰 F 14:o ++孳 F 15:o ++孵 F 16:o ++學 F 17:o ++斈 F 18:o ++孺 F 19:o ++宀 F 20:o ++它 F 21:o ++宦 F 22:o ++宸 F 23:o ++寃 F 24:o ++寇 F 25:o ++寉 F 26:o ++寔 F 27:o ++寐 F 28:o ++寤 F 29:o ++實 F 30:o ++寢 F 31:o ++寞 F 32:o ++寥 F 33:o ++寫 F 34:o ++寰 F 35:o ++寶 F 36:o ++寳 F 37:o ++尅 F 38:o ++將 F 39:o ++專 F 40:o ++對 F 41:o ++尓 F 42:o ++尠 F 43:o ++尢 F 44:o ++尨 F 45:o ++尸 F 46:o ++尹 F 47:o ++屁 F 48:o ++屆 F 49:o ++屎 F 50:o ++屓 F 51:o ++屐 F 52:o ++屏 F 53:o ++孱 F 54:o ++屬 F 55:o ++屮 F 56:o ++乢 F 57:o ++屶 F 58:o ++屹 F 59:o ++岌 F 60:o ++岑 F 61:o ++岔 F 62:o ++妛 F 63:o ++岫 F 64:o ++岻 F 65:o ++岶 F 66:o ++岼 F 67:o ++岷 F 68:o ++峅 F 69:o ++岾 F 70:o ++峇 F 71:o ++峙 F 72:o ++峩 F 73:o ++峽 F 74:o ++峺 F 75:o ++峭 F 76:o ++嶌 F 77:o ++峪 F 78:o ++崋 F 79:o ++崕 F 80:o ++崗 F 81:o ++嵜 F 82:o ++崟 F 83:o ++崛 F 84:o ++崑 F 85:o ++崔 F 86:o ++崢 F 87:o ++崚 F 88:o ++崙 F 89:o ++崘 F 90:o ++嵌 F 91:o ++嵒 F 92:o ++嵎 F 93:o ++嵋 F 94:o ++嵬 F 95:o ++嵳 F 96:o ++嵶 F 97:o ++嶇 F 98:o ++嶄 F 99:o ++嶂 F 100:o ++嶢 F 101:o ++嶝 F 102:o ++嶬 F 103:o ++嶮 F 104:o ++嶽 F 105:o ++嶐 F 106:o ++嶷 F 107:o ++嶼 F 108:o ++巉 F 109:o ++巍 F 110:o ++巓 F 111:o ++巒 F 112:o ++巖 F 113:o ++巛 F 114:o ++巫 F 115:o ++已 F 116:o ++巵 F 117:o ++帋 F 118:o ++帚 F 119:o ++帙 F 120:o ++帑 F 121:o ++帛 F 122:o ++帶 F 123:o ++帷 F 124:o ++幄 F 125:o ++幃 F 126:o ++幀 F 127:o ++幎 F 128:o ++幗 F 129:o ++幔 F 130:o ++幟 F 131:o ++幢 F 132:o ++幤 F 133:o ++幇 F 134:o ++幵 F 135:o ++并 F 136:o ++幺 F 137:o ++麼 F 138:o ++广 F 139:o ++庠 F 140:o ++廁 F 141:o ++廂 F 142:o ++廈 F 143:o ++廐 F 144:o ++廏 F 145:o ++廖 F 146:o ++廣 F 147:o ++廝 F 148:o ++廚 F 149:o ++廛 F 150:o ++廢 F 151:o ++廡 F 152:o ++廨 F 153:o ++廩 F 154:o ++廬 F 155:o ++廱 F 156:o ++廳 F 157:o ++廰 F 158:o ++廴 F 159:o ++廸 F 160:o ++廾 F 161:o ++弃 F 162:o ++弉 F 163:o ++彝 F 164:o ++彜 F 165:o ++弋 F 166:o ++弑 F 167:o ++弖 F 168:o ++弩 F 169:o ++弭 F 170:o ++弸 F 171:o ++彁 F 172:o ++彈 F 173:o ++彌 F 174:o ++彎 F 175:o ++弯 F 176:o ++彑 F 177:o ++彖 F 178:o ++彗 F 179:o ++彙 F 180:o ++彡 F 181:o ++彭 F 182:o ++彳 F 183:o ++彷 F 184:o ++徃 F 185:o ++徂 F 186:o ++彿 F 187:o ++徊 F 188:o ++很 F 189:o ++徑 F 190:o ++徇 F 191:o ++從 F 192:o ++徙 F 193:o ++徘 F 194:o ++徠 F 195:o ++徨 F 196:o ++徭 F 197:o ++徼 F 198:o ++忖 F 199:o ++忻 F 200:o ++忤 F 201:o ++忸 F 202:o ++忱 F 203:o ++忝 F 204:o ++悳 F 205:o ++忿 F 206:o ++怡 F 207:o ++恠 F 208:o ++怙 F 209:o ++怐 F 210:o ++怩 F 211:o ++怎 F 212:o ++怱 F 213:o ++怛 F 214:o ++怕 F 215:o ++怫 F 216:o ++怦 F 217:o ++怏 F 218:o ++怺 F 219:o ++恚 F 220:o ++恁 F 221:o ++恪 F 222:o ++恷 F 223:o ++恟 F 224:o ++恊 F 225:o ++恆 F 226:o ++恍 F 227:o ++恣 F 228:o ++恃 F 229:o ++恤 F 230:o ++恂 F 231:o ++恬 F 232:o ++恫 F 233:o ++恙 F 234:o ++悁 F 235:o ++悍 F 236:o ++惧 F 237:o ++悃 F 238:o ++悚 F 239:o ++悄 F 240:o ++悛 F 241:o ++悖 F 242:o ++悗 F 243:o ++悒 F 244:o ++悧 F 245:o ++悋 F 246:o ++惡 F 247:o ++悸 F 248:o ++惠 F 249:o ++惓 F 250:o ++悴 F 251:o ++忰 F 252:o ++悽 F 253:o ++惆 F 254:o ++悵 F 255:o ++惘 F 0:p ++慍 F 1:p ++愕 F 2:p ++愆 F 3:p ++惶 F 4:p ++惷 F 5:p ++愀 F 6:p ++惴 F 7:p ++惺 F 8:p ++愃 F 9:p ++愡 F 10:p ++惻 F 11:p ++惱 F 12:p ++愍 F 13:p ++愎 F 14:p ++慇 F 15:p ++愾 F 16:p ++愨 F 17:p ++愧 F 18:p ++慊 F 19:p ++愿 F 20:p ++愼 F 21:p ++愬 F 22:p ++愴 F 23:p ++愽 F 24:p ++慂 F 25:p ++慄 F 26:p ++慳 F 27:p ++慷 F 28:p ++慘 F 29:p ++慙 F 30:p ++慚 F 31:p ++慫 F 32:p ++慴 F 33:p ++慯 F 34:p ++慥 F 35:p ++慱 F 36:p ++慟 F 37:p ++慝 F 38:p ++慓 F 39:p ++慵 F 40:p ++憙 F 41:p ++憖 F 42:p ++憇 F 43:p ++憬 F 44:p ++憔 F 45:p ++憚 F 46:p ++憊 F 47:p ++憑 F 48:p ++憫 F 49:p ++憮 F 50:p ++懌 F 51:p ++懊 F 52:p ++應 F 53:p ++懷 F 54:p ++懈 F 55:p ++懃 F 56:p ++懆 F 57:p ++憺 F 58:p ++懋 F 59:p ++罹 F 60:p ++懍 F 61:p ++懦 F 62:p ++懣 F 63:p ++懶 F 64:p ++懺 F 65:p ++懴 F 66:p ++懿 F 67:p ++懽 F 68:p ++懼 F 69:p ++懾 F 70:p ++戀 F 71:p ++戈 F 72:p ++戉 F 73:p ++戍 F 74:p ++戌 F 75:p ++戔 F 76:p ++戛 F 77:p ++戞 F 78:p ++戡 F 79:p ++截 F 80:p ++戮 F 81:p ++戰 F 82:p ++戲 F 83:p ++戳 F 84:p ++扁 F 85:p ++扎 F 86:p ++扞 F 87:p ++扣 F 88:p ++扛 F 89:p ++扠 F 90:p ++扨 F 91:p ++扼 F 92:p ++抂 F 93:p ++抉 F 94:p ++找 F 95:p ++抒 F 96:p ++抓 F 97:p ++抖 F 98:p ++拔 F 99:p ++抃 F 100:p ++抔 F 101:p ++拗 F 102:p ++拑 F 103:p ++抻 F 104:p ++拏 F 105:p ++拿 F 106:p ++拆 F 107:p ++擔 F 108:p ++拈 F 109:p ++拜 F 110:p ++拌 F 111:p ++拊 F 112:p ++拂 F 113:p ++拇 F 114:p ++抛 F 115:p ++拉 F 116:p ++挌 F 117:p ++拮 F 118:p ++拱 F 119:p ++挧 F 120:p ++挂 F 121:p ++挈 F 122:p ++拯 F 123:p ++拵 F 124:p ++捐 F 125:p ++挾 F 126:p ++捍 F 127:p ++搜 F 128:p ++捏 F 129:p ++掖 F 130:p ++掎 F 131:p ++掀 F 132:p ++掫 F 133:p ++捶 F 134:p ++掣 F 135:p ++掏 F 136:p ++掉 F 137:p ++掟 F 138:p ++掵 F 139:p ++捫 F 140:p ++捩 F 141:p ++掾 F 142:p ++揩 F 143:p ++揀 F 144:p ++揆 F 145:p ++揣 F 146:p ++揉 F 147:p ++插 F 148:p ++揶 F 149:p ++揄 F 150:p ++搖 F 151:p ++搴 F 152:p ++搆 F 153:p ++搓 F 154:p ++搦 F 155:p ++搶 F 156:p ++攝 F 157:p ++搗 F 158:p ++搨 F 159:p ++搏 F 160:p ++摧 F 161:p ++摯 F 162:p ++摶 F 163:p ++摎 F 164:p ++攪 F 165:p ++撕 F 166:p ++撓 F 167:p ++撥 F 168:p ++撩 F 169:p ++撈 F 170:p ++撼 F 171:p ++據 F 172:p ++擒 F 173:p ++擅 F 174:p ++擇 F 175:p ++撻 F 176:p ++擘 F 177:p ++擂 F 178:p ++擱 F 179:p ++擧 F 180:p ++舉 F 181:p ++擠 F 182:p ++擡 F 183:p ++抬 F 184:p ++擣 F 185:p ++擯 F 186:p ++攬 F 187:p ++擶 F 188:p ++擴 F 189:p ++擲 F 190:p ++擺 F 191:p ++攀 F 192:p ++擽 F 193:p ++攘 F 194:p ++攜 F 195:p ++攅 F 196:p ++攤 F 197:p ++攣 F 198:p ++攫 F 199:p ++攴 F 200:p ++攵 F 201:p ++攷 F 202:p ++收 F 203:p ++攸 F 204:p ++畋 F 205:p ++效 F 206:p ++敖 F 207:p ++敕 F 208:p ++敍 F 209:p ++敘 F 210:p ++敞 F 211:p ++敝 F 212:p ++敲 F 213:p ++數 F 214:p ++斂 F 215:p ++斃 F 216:p ++變 F 217:p ++斛 F 218:p ++斟 F 219:p ++斫 F 220:p ++斷 F 221:p ++旃 F 222:p ++旆 F 223:p ++旁 F 224:p ++旄 F 225:p ++旌 F 226:p ++旒 F 227:p ++旛 F 228:p ++旙 F 229:p ++无 F 230:p ++旡 F 231:p ++旱 F 232:p ++杲 F 233:p ++昊 F 234:p ++昃 F 235:p ++旻 F 236:p ++杳 F 237:p ++昵 F 238:p ++昶 F 239:p ++昴 F 240:p ++昜 F 241:p ++晏 F 242:p ++晄 F 243:p ++晉 F 244:p ++晁 F 245:p ++晞 F 246:p ++晝 F 247:p ++晤 F 248:p ++晧 F 249:p ++晨 F 250:p ++晟 F 251:p ++晢 F 252:p ++晰 F 253:p ++暃 F 254:p ++暈 F 255:p ++暎 F 0:q ++暉 F 1:q ++暄 F 2:q ++暘 F 3:q ++暝 F 4:q ++曁 F 5:q ++暹 F 6:q ++曉 F 7:q ++暾 F 8:q ++暼 F 9:q ++曄 F 10:q ++暸 F 11:q ++曖 F 12:q ++曚 F 13:q ++曠 F 14:q ++昿 F 15:q ++曦 F 16:q ++曩 F 17:q ++曰 F 18:q ++曵 F 19:q ++曷 F 20:q ++朏 F 21:q ++朖 F 22:q ++朞 F 23:q ++朦 F 24:q ++朧 F 25:q ++霸 F 26:q ++朮 F 27:q ++朿 F 28:q ++朶 F 29:q ++杁 F 30:q ++朸 F 31:q ++朷 F 32:q ++杆 F 33:q ++杞 F 34:q ++杠 F 35:q ++杙 F 36:q ++杣 F 37:q ++杤 F 38:q ++枉 F 39:q ++杰 F 40:q ++枩 F 41:q ++杼 F 42:q ++杪 F 43:q ++枌 F 44:q ++枋 F 45:q ++枦 F 46:q ++枡 F 47:q ++枅 F 48:q ++枷 F 49:q ++柯 F 50:q ++枴 F 51:q ++柬 F 52:q ++枳 F 53:q ++柩 F 54:q ++枸 F 55:q ++柤 F 56:q ++柞 F 57:q ++柝 F 58:q ++柢 F 59:q ++柮 F 60:q ++枹 F 61:q ++柎 F 62:q ++柆 F 63:q ++柧 F 64:q ++檜 F 65:q ++栞 F 66:q ++框 F 67:q ++栩 F 68:q ++桀 F 69:q ++桍 F 70:q ++栲 F 71:q ++桎 F 72:q ++梳 F 73:q ++栫 F 74:q ++桙 F 75:q ++档 F 76:q ++桷 F 77:q ++桿 F 78:q ++梟 F 79:q ++梏 F 80:q ++梭 F 81:q ++梔 F 82:q ++條 F 83:q ++梛 F 84:q ++梃 F 85:q ++檮 F 86:q ++梹 F 87:q ++桴 F 88:q ++梵 F 89:q ++梠 F 90:q ++梺 F 91:q ++椏 F 92:q ++梍 F 93:q ++桾 F 94:q ++椁 F 95:q ++棊 F 96:q ++椈 F 97:q ++棘 F 98:q ++椢 F 99:q ++椦 F 100:q ++棡 F 101:q ++椌 F 102:q ++棍 F 103:q ++棔 F 104:q ++棧 F 105:q ++棕 F 106:q ++椶 F 107:q ++椒 F 108:q ++椄 F 109:q ++棗 F 110:q ++棣 F 111:q ++椥 F 112:q ++棹 F 113:q ++棠 F 114:q ++棯 F 115:q ++椨 F 116:q ++椪 F 117:q ++椚 F 118:q ++椣 F 119:q ++椡 F 120:q ++棆 F 121:q ++楹 F 122:q ++楷 F 123:q ++楜 F 124:q ++楸 F 125:q ++楫 F 126:q ++楔 F 127:q ++楾 F 128:q ++楮 F 129:q ++椹 F 130:q ++楴 F 131:q ++椽 F 132:q ++楙 F 133:q ++椰 F 134:q ++楡 F 135:q ++楞 F 136:q ++楝 F 137:q ++榁 F 138:q ++楪 F 139:q ++榲 F 140:q ++榮 F 141:q ++槐 F 142:q ++榿 F 143:q ++槁 F 144:q ++槓 F 145:q ++榾 F 146:q ++槎 F 147:q ++寨 F 148:q ++槊 F 149:q ++槝 F 150:q ++榻 F 151:q ++槃 F 152:q ++榧 F 153:q ++樮 F 154:q ++榑 F 155:q ++榠 F 156:q ++榜 F 157:q ++榕 F 158:q ++榴 F 159:q ++槞 F 160:q ++槨 F 161:q ++樂 F 162:q ++樛 F 163:q ++槿 F 164:q ++權 F 165:q ++槹 F 166:q ++槲 F 167:q ++槧 F 168:q ++樅 F 169:q ++榱 F 170:q ++樞 F 171:q ++槭 F 172:q ++樔 F 173:q ++槫 F 174:q ++樊 F 175:q ++樒 F 176:q ++櫁 F 177:q ++樣 F 178:q ++樓 F 179:q ++橄 F 180:q ++樌 F 181:q ++橲 F 182:q ++樶 F 183:q ++橸 F 184:q ++橇 F 185:q ++橢 F 186:q ++橙 F 187:q ++橦 F 188:q ++橈 F 189:q ++樸 F 190:q ++樢 F 191:q ++檐 F 192:q ++檍 F 193:q ++檠 F 194:q ++檄 F 195:q ++檢 F 196:q ++檣 F 197:q ++檗 F 198:q ++蘗 F 199:q ++檻 F 200:q ++櫃 F 201:q ++櫂 F 202:q ++檸 F 203:q ++檳 F 204:q ++檬 F 205:q ++櫞 F 206:q ++櫑 F 207:q ++櫟 F 208:q ++檪 F 209:q ++櫚 F 210:q ++櫪 F 211:q ++櫻 F 212:q ++欅 F 213:q ++蘖 F 214:q ++櫺 F 215:q ++欒 F 216:q ++欖 F 217:q ++鬱 F 218:q ++欟 F 219:q ++欸 F 220:q ++欷 F 221:q ++盜 F 222:q ++欹 F 223:q ++飮 F 224:q ++歇 F 225:q ++歃 F 226:q ++歉 F 227:q ++歐 F 228:q ++歙 F 229:q ++歔 F 230:q ++歛 F 231:q ++歟 F 232:q ++歡 F 233:q ++歸 F 234:q ++歹 F 235:q ++歿 F 236:q ++殀 F 237:q ++殄 F 238:q ++殃 F 239:q ++殍 F 240:q ++殘 F 241:q ++殕 F 242:q ++殞 F 243:q ++殤 F 244:q ++殪 F 245:q ++殫 F 246:q ++殯 F 247:q ++殲 F 248:q ++殱 F 249:q ++殳 F 250:q ++殷 F 251:q ++殼 F 252:q ++毆 F 253:q ++毋 F 254:q ++毓 F 255:q ++毟 F 0:r ++毬 F 1:r ++毫 F 2:r ++毳 F 3:r ++毯 F 4:r ++麾 F 5:r ++氈 F 6:r ++氓 F 7:r ++气 F 8:r ++氛 F 9:r ++氤 F 10:r ++氣 F 11:r ++汞 F 12:r ++汕 F 13:r ++汢 F 14:r ++汪 F 15:r ++沂 F 16:r ++沍 F 17:r ++沚 F 18:r ++沁 F 19:r ++沛 F 20:r ++汾 F 21:r ++汨 F 22:r ++汳 F 23:r ++沒 F 24:r ++沐 F 25:r ++泄 F 26:r ++泱 F 27:r ++泓 F 28:r ++沽 F 29:r ++泗 F 30:r ++泅 F 31:r ++泝 F 32:r ++沮 F 33:r ++沱 F 34:r ++沾 F 35:r ++沺 F 36:r ++泛 F 37:r ++泯 F 38:r ++泙 F 39:r ++泪 F 40:r ++洟 F 41:r ++衍 F 42:r ++洶 F 43:r ++洫 F 44:r ++洽 F 45:r ++洸 F 46:r ++洙 F 47:r ++洵 F 48:r ++洳 F 49:r ++洒 F 50:r ++洌 F 51:r ++浣 F 52:r ++涓 F 53:r ++浤 F 54:r ++浚 F 55:r ++浹 F 56:r ++浙 F 57:r ++涎 F 58:r ++涕 F 59:r ++濤 F 60:r ++涅 F 61:r ++淹 F 62:r ++渕 F 63:r ++渊 F 64:r ++涵 F 65:r ++淇 F 66:r ++淦 F 67:r ++涸 F 68:r ++淆 F 69:r ++淬 F 70:r ++淞 F 71:r ++淌 F 72:r ++淨 F 73:r ++淒 F 74:r ++淅 F 75:r ++淺 F 76:r ++淙 F 77:r ++淤 F 78:r ++淕 F 79:r ++淪 F 80:r ++淮 F 81:r ++渭 F 82:r ++湮 F 83:r ++渮 F 84:r ++渙 F 85:r ++湲 F 86:r ++湟 F 87:r ++渾 F 88:r ++渣 F 89:r ++湫 F 90:r ++渫 F 91:r ++湶 F 92:r ++湍 F 93:r ++渟 F 94:r ++湃 F 95:r ++渺 F 96:r ++湎 F 97:r ++渤 F 98:r ++滿 F 99:r ++渝 F 100:r ++游 F 101:r ++溂 F 102:r ++溪 F 103:r ++溘 F 104:r ++滉 F 105:r ++溷 F 106:r ++滓 F 107:r ++溽 F 108:r ++溯 F 109:r ++滄 F 110:r ++溲 F 111:r ++滔 F 112:r ++滕 F 113:r ++溏 F 114:r ++溥 F 115:r ++滂 F 116:r ++溟 F 117:r ++潁 F 118:r ++漑 F 119:r ++灌 F 120:r ++滬 F 121:r ++滸 F 122:r ++滾 F 123:r ++漿 F 124:r ++滲 F 125:r ++漱 F 126:r ++滯 F 127:r ++漲 F 128:r ++滌 F 129:r ++漾 F 130:r ++漓 F 131:r ++滷 F 132:r ++澆 F 133:r ++潺 F 134:r ++潸 F 135:r ++澁 F 136:r ++澀 F 137:r ++潯 F 138:r ++潛 F 139:r ++濳 F 140:r ++潭 F 141:r ++澂 F 142:r ++潼 F 143:r ++潘 F 144:r ++澎 F 145:r ++澑 F 146:r ++濂 F 147:r ++潦 F 148:r ++澳 F 149:r ++澣 F 150:r ++澡 F 151:r ++澤 F 152:r ++澹 F 153:r ++濆 F 154:r ++澪 F 155:r ++濟 F 156:r ++濕 F 157:r ++濬 F 158:r ++濔 F 159:r ++濘 F 160:r ++濱 F 161:r ++濮 F 162:r ++濛 F 163:r ++瀉 F 164:r ++瀋 F 165:r ++濺 F 166:r ++瀑 F 167:r ++瀁 F 168:r ++瀏 F 169:r ++濾 F 170:r ++瀛 F 171:r ++瀚 F 172:r ++潴 F 173:r ++瀝 F 174:r ++瀘 F 175:r ++瀟 F 176:r ++瀰 F 177:r ++瀾 F 178:r ++瀲 F 179:r ++灑 F 180:r ++灣 F 181:r ++炙 F 182:r ++炒 F 183:r ++炯 F 184:r ++烱 F 185:r ++炬 F 186:r ++炸 F 187:r ++炳 F 188:r ++炮 F 189:r ++烟 F 190:r ++烋 F 191:r ++烝 F 192:r ++烙 F 193:r ++焉 F 194:r ++烽 F 195:r ++焜 F 196:r ++焙 F 197:r ++煥 F 198:r ++煕 F 199:r ++熈 F 200:r ++煦 F 201:r ++煢 F 202:r ++煌 F 203:r ++煖 F 204:r ++煬 F 205:r ++熏 F 206:r ++燻 F 207:r ++熄 F 208:r ++熕 F 209:r ++熨 F 210:r ++熬 F 211:r ++燗 F 212:r ++熹 F 213:r ++熾 F 214:r ++燒 F 215:r ++燉 F 216:r ++燔 F 217:r ++燎 F 218:r ++燠 F 219:r ++燬 F 220:r ++燧 F 221:r ++燵 F 222:r ++燼 F 223:r ++燹 F 224:r ++燿 F 225:r ++爍 F 226:r ++爐 F 227:r ++爛 F 228:r ++爨 F 229:r ++爭 F 230:r ++爬 F 231:r ++爰 F 232:r ++爲 F 233:r ++爻 F 234:r ++爼 F 235:r ++爿 F 236:r ++牀 F 237:r ++牆 F 238:r ++牋 F 239:r ++牘 F 240:r ++牴 F 241:r ++牾 F 242:r ++犂 F 243:r ++犁 F 244:r ++犇 F 245:r ++犒 F 246:r ++犖 F 247:r ++犢 F 248:r ++犧 F 249:r ++犹 F 250:r ++犲 F 251:r ++狃 F 252:r ++狆 F 253:r ++狄 F 254:r ++狎 F 255:r ++狒 F 0:s ++狢 F 1:s ++狠 F 2:s ++狡 F 3:s ++狹 F 4:s ++狷 F 5:s ++倏 F 6:s ++猗 F 7:s ++猊 F 8:s ++猜 F 9:s ++猖 F 10:s ++猝 F 11:s ++猴 F 12:s ++猯 F 13:s ++猩 F 14:s ++猥 F 15:s ++猾 F 16:s ++獎 F 17:s ++獏 F 18:s ++默 F 19:s ++獗 F 20:s ++獪 F 21:s ++獨 F 22:s ++獰 F 23:s ++獸 F 24:s ++獵 F 25:s ++獻 F 26:s ++獺 F 27:s ++珈 F 28:s ++玳 F 29:s ++珎 F 30:s ++玻 F 31:s ++珀 F 32:s ++珥 F 33:s ++珮 F 34:s ++珞 F 35:s ++璢 F 36:s ++琅 F 37:s ++瑯 F 38:s ++琥 F 39:s ++珸 F 40:s ++琲 F 41:s ++琺 F 42:s ++瑕 F 43:s ++琿 F 44:s ++瑟 F 45:s ++瑙 F 46:s ++瑁 F 47:s ++瑜 F 48:s ++瑩 F 49:s ++瑰 F 50:s ++瑣 F 51:s ++瑪 F 52:s ++瑶 F 53:s ++瑾 F 54:s ++璋 F 55:s ++璞 F 56:s ++璧 F 57:s ++瓊 F 58:s ++瓏 F 59:s ++瓔 F 60:s ++珱 F 61:s ++瓠 F 62:s ++瓣 F 63:s ++瓧 F 64:s ++瓩 F 65:s ++瓮 F 66:s ++瓲 F 67:s ++瓰 F 68:s ++瓱 F 69:s ++瓸 F 70:s ++瓷 F 71:s ++甄 F 72:s ++甃 F 73:s ++甅 F 74:s ++甌 F 75:s ++甎 F 76:s ++甍 F 77:s ++甕 F 78:s ++甓 F 79:s ++甞 F 80:s ++甦 F 81:s ++甬 F 82:s ++甼 F 83:s ++畄 F 84:s ++畍 F 85:s ++畊 F 86:s ++畉 F 87:s ++畛 F 88:s ++畆 F 89:s ++畚 F 90:s ++畩 F 91:s ++畤 F 92:s ++畧 F 93:s ++畫 F 94:s ++畭 F 95:s ++畸 F 96:s ++當 F 97:s ++疆 F 98:s ++疇 F 99:s ++畴 F 100:s ++疊 F 101:s ++疉 F 102:s ++疂 F 103:s ++疔 F 104:s ++疚 F 105:s ++疝 F 106:s ++疥 F 107:s ++疣 F 108:s ++痂 F 109:s ++疳 F 110:s ++痃 F 111:s ++疵 F 112:s ++疽 F 113:s ++疸 F 114:s ++疼 F 115:s ++疱 F 116:s ++痍 F 117:s ++痊 F 118:s ++痒 F 119:s ++痙 F 120:s ++痣 F 121:s ++痞 F 122:s ++痾 F 123:s ++痿 F 124:s ++痼 F 125:s ++瘁 F 126:s ++痰 F 127:s ++痺 F 128:s ++痲 F 129:s ++痳 F 130:s ++瘋 F 131:s ++瘍 F 132:s ++瘉 F 133:s ++瘟 F 134:s ++瘧 F 135:s ++瘠 F 136:s ++瘡 F 137:s ++瘢 F 138:s ++瘤 F 139:s ++瘴 F 140:s ++瘰 F 141:s ++瘻 F 142:s ++癇 F 143:s ++癈 F 144:s ++癆 F 145:s ++癜 F 146:s ++癘 F 147:s ++癡 F 148:s ++癢 F 149:s ++癨 F 150:s ++癩 F 151:s ++癪 F 152:s ++癧 F 153:s ++癬 F 154:s ++癰 F 155:s ++癲 F 156:s ++癶 F 157:s ++癸 F 158:s ++發 F 159:s ++皀 F 160:s ++皃 F 161:s ++皈 F 162:s ++皋 F 163:s ++皎 F 164:s ++皖 F 165:s ++皓 F 166:s ++皙 F 167:s ++皚 F 168:s ++皰 F 169:s ++皴 F 170:s ++皸 F 171:s ++皹 F 172:s ++皺 F 173:s ++盂 F 174:s ++盍 F 175:s ++盖 F 176:s ++盒 F 177:s ++盞 F 178:s ++盡 F 179:s ++盥 F 180:s ++盧 F 181:s ++盪 F 182:s ++蘯 F 183:s ++盻 F 184:s ++眈 F 185:s ++眇 F 186:s ++眄 F 187:s ++眩 F 188:s ++眤 F 189:s ++眞 F 190:s ++眥 F 191:s ++眦 F 192:s ++眛 F 193:s ++眷 F 194:s ++眸 F 195:s ++睇 F 196:s ++睚 F 197:s ++睨 F 198:s ++睫 F 199:s ++睛 F 200:s ++睥 F 201:s ++睿 F 202:s ++睾 F 203:s ++睹 F 204:s ++瞎 F 205:s ++瞋 F 206:s ++瞑 F 207:s ++瞠 F 208:s ++瞞 F 209:s ++瞰 F 210:s ++瞶 F 211:s ++瞹 F 212:s ++瞿 F 213:s ++瞼 F 214:s ++瞽 F 215:s ++瞻 F 216:s ++矇 F 217:s ++矍 F 218:s ++矗 F 219:s ++矚 F 220:s ++矜 F 221:s ++矣 F 222:s ++矮 F 223:s ++矼 F 224:s ++砌 F 225:s ++砒 F 226:s ++礦 F 227:s ++砠 F 228:s ++礪 F 229:s ++硅 F 230:s ++碎 F 231:s ++硴 F 232:s ++碆 F 233:s ++硼 F 234:s ++碚 F 235:s ++碌 F 236:s ++碣 F 237:s ++碵 F 238:s ++碪 F 239:s ++碯 F 240:s ++磑 F 241:s ++磆 F 242:s ++磋 F 243:s ++磔 F 244:s ++碾 F 245:s ++碼 F 246:s ++磅 F 247:s ++磊 F 248:s ++磬 F 249:s ++磧 F 250:s ++磚 F 251:s ++磽 F 252:s ++磴 F 253:s ++礇 F 254:s ++礒 F 255:s ++礑 F 0:t ++礙 F 1:t ++礬 F 2:t ++礫 F 3:t ++祀 F 4:t ++祠 F 5:t ++祗 F 6:t ++祟 F 7:t ++祚 F 8:t ++祕 F 9:t ++祓 F 10:t ++祺 F 11:t ++祿 F 12:t ++禊 F 13:t ++禝 F 14:t ++禧 F 15:t ++齋 F 16:t ++禪 F 17:t ++禮 F 18:t ++禳 F 19:t ++禹 F 20:t ++禺 F 21:t ++秉 F 22:t ++秕 F 23:t ++秧 F 24:t ++秬 F 25:t ++秡 F 26:t ++秣 F 27:t ++稈 F 28:t ++稍 F 29:t ++稘 F 30:t ++稙 F 31:t ++稠 F 32:t ++稟 F 33:t ++禀 F 34:t ++稱 F 35:t ++稻 F 36:t ++稾 F 37:t ++稷 F 38:t ++穃 F 39:t ++穗 F 40:t ++穉 F 41:t ++穡 F 42:t ++穢 F 43:t ++穩 F 44:t ++龝 F 45:t ++穰 F 46:t ++穹 F 47:t ++穽 F 48:t ++窈 F 49:t ++窗 F 50:t ++窕 F 51:t ++窘 F 52:t ++窖 F 53:t ++窩 F 54:t ++竈 F 55:t ++窰 F 56:t ++窶 F 57:t ++竅 F 58:t ++竄 F 59:t ++窿 F 60:t ++邃 F 61:t ++竇 F 62:t ++竊 F 63:t ++竍 F 64:t ++竏 F 65:t ++竕 F 66:t ++竓 F 67:t ++站 F 68:t ++竚 F 69:t ++竝 F 70:t ++竡 F 71:t ++竢 F 72:t ++竦 F 73:t ++竭 F 74:t ++竰 F 75:t ++笂 F 76:t ++笏 F 77:t ++笊 F 78:t ++笆 F 79:t ++笳 F 80:t ++笘 F 81:t ++笙 F 82:t ++笞 F 83:t ++笵 F 84:t ++笨 F 85:t ++笶 F 86:t ++筐 F 87:t ++筺 F 88:t ++笄 F 89:t ++筍 F 90:t ++笋 F 91:t ++筌 F 92:t ++筅 F 93:t ++筵 F 94:t ++筥 F 95:t ++筴 F 96:t ++筧 F 97:t ++筰 F 98:t ++筱 F 99:t ++筬 F 100:t ++筮 F 101:t ++箝 F 102:t ++箘 F 103:t ++箟 F 104:t ++箍 F 105:t ++箜 F 106:t ++箚 F 107:t ++箋 F 108:t ++箒 F 109:t ++箏 F 110:t ++筝 F 111:t ++箙 F 112:t ++篋 F 113:t ++篁 F 114:t ++篌 F 115:t ++篏 F 116:t ++箴 F 117:t ++篆 F 118:t ++篝 F 119:t ++篩 F 120:t ++簑 F 121:t ++簔 F 122:t ++篦 F 123:t ++篥 F 124:t ++籠 F 125:t ++簀 F 126:t ++簇 F 127:t ++簓 F 128:t ++篳 F 129:t ++篷 F 130:t ++簗 F 131:t ++簍 F 132:t ++篶 F 133:t ++簣 F 134:t ++簧 F 135:t ++簪 F 136:t ++簟 F 137:t ++簷 F 138:t ++簫 F 139:t ++簽 F 140:t ++籌 F 141:t ++籃 F 142:t ++籔 F 143:t ++籏 F 144:t ++籀 F 145:t ++籐 F 146:t ++籘 F 147:t ++籟 F 148:t ++籤 F 149:t ++籖 F 150:t ++籥 F 151:t ++籬 F 152:t ++籵 F 153:t ++粃 F 154:t ++粐 F 155:t ++粤 F 156:t ++粭 F 157:t ++粢 F 158:t ++粫 F 159:t ++粡 F 160:t ++粨 F 161:t ++粳 F 162:t ++粲 F 163:t ++粱 F 164:t ++粮 F 165:t ++粹 F 166:t ++粽 F 167:t ++糀 F 168:t ++糅 F 169:t ++糂 F 170:t ++糘 F 171:t ++糒 F 172:t ++糜 F 173:t ++糢 F 174:t ++鬻 F 175:t ++糯 F 176:t ++糲 F 177:t ++糴 F 178:t ++糶 F 179:t ++糺 F 180:t ++紆 F 181:t ++紂 F 182:t ++紜 F 183:t ++紕 F 184:t ++紊 F 185:t ++絅 F 186:t ++絋 F 187:t ++紮 F 188:t ++紲 F 189:t ++紿 F 190:t ++紵 F 191:t ++絆 F 192:t ++絳 F 193:t ++絖 F 194:t ++絎 F 195:t ++絲 F 196:t ++絨 F 197:t ++絮 F 198:t ++絏 F 199:t ++絣 F 200:t ++經 F 201:t ++綉 F 202:t ++絛 F 203:t ++綏 F 204:t ++絽 F 205:t ++綛 F 206:t ++綺 F 207:t ++綮 F 208:t ++綣 F 209:t ++綵 F 210:t ++緇 F 211:t ++綽 F 212:t ++綫 F 213:t ++總 F 214:t ++綢 F 215:t ++綯 F 216:t ++緜 F 217:t ++綸 F 218:t ++綟 F 219:t ++綰 F 220:t ++緘 F 221:t ++緝 F 222:t ++緤 F 223:t ++緞 F 224:t ++緻 F 225:t ++緲 F 226:t ++緡 F 227:t ++縅 F 228:t ++縊 F 229:t ++縣 F 230:t ++縡 F 231:t ++縒 F 232:t ++縱 F 233:t ++縟 F 234:t ++縉 F 235:t ++縋 F 236:t ++縢 F 237:t ++繆 F 238:t ++繦 F 239:t ++縻 F 240:t ++縵 F 241:t ++縹 F 242:t ++繃 F 243:t ++縷 F 244:t ++縲 F 245:t ++縺 F 246:t ++繧 F 247:t ++繝 F 248:t ++繖 F 249:t ++繞 F 250:t ++繙 F 251:t ++繚 F 252:t ++繹 F 253:t ++繪 F 254:t ++繩 F 255:t ++繼 F 0:u ++繻 F 1:u ++纃 F 2:u ++緕 F 3:u ++繽 F 4:u ++辮 F 5:u ++繿 F 6:u ++纈 F 7:u ++纉 F 8:u ++續 F 9:u ++纒 F 10:u ++纐 F 11:u ++纓 F 12:u ++纔 F 13:u ++纖 F 14:u ++纎 F 15:u ++纛 F 16:u ++纜 F 17:u ++缸 F 18:u ++缺 F 19:u ++罅 F 20:u ++罌 F 21:u ++罍 F 22:u ++罎 F 23:u ++罐 F 24:u ++网 F 25:u ++罕 F 26:u ++罔 F 27:u ++罘 F 28:u ++罟 F 29:u ++罠 F 30:u ++罨 F 31:u ++罩 F 32:u ++罧 F 33:u ++罸 F 34:u ++羂 F 35:u ++羆 F 36:u ++羃 F 37:u ++羈 F 38:u ++羇 F 39:u ++羌 F 40:u ++羔 F 41:u ++羞 F 42:u ++羝 F 43:u ++羚 F 44:u ++羣 F 45:u ++羯 F 46:u ++羲 F 47:u ++羹 F 48:u ++羮 F 49:u ++羶 F 50:u ++羸 F 51:u ++譱 F 52:u ++翅 F 53:u ++翆 F 54:u ++翊 F 55:u ++翕 F 56:u ++翔 F 57:u ++翡 F 58:u ++翦 F 59:u ++翩 F 60:u ++翳 F 61:u ++翹 F 62:u ++飜 F 63:u ++耆 F 64:u ++耄 F 65:u ++耋 F 66:u ++耒 F 67:u ++耘 F 68:u ++耙 F 69:u ++耜 F 70:u ++耡 F 71:u ++耨 F 72:u ++耿 F 73:u ++耻 F 74:u ++聊 F 75:u ++聆 F 76:u ++聒 F 77:u ++聘 F 78:u ++聚 F 79:u ++聟 F 80:u ++聢 F 81:u ++聨 F 82:u ++聳 F 83:u ++聲 F 84:u ++聰 F 85:u ++聶 F 86:u ++聹 F 87:u ++聽 F 88:u ++聿 F 89:u ++肄 F 90:u ++肆 F 91:u ++肅 F 92:u ++肛 F 93:u ++肓 F 94:u ++肚 F 95:u ++肭 F 96:u ++冐 F 97:u ++肬 F 98:u ++胛 F 99:u ++胥 F 100:u ++胙 F 101:u ++胝 F 102:u ++胄 F 103:u ++胚 F 104:u ++胖 F 105:u ++脉 F 106:u ++胯 F 107:u ++胱 F 108:u ++脛 F 109:u ++脩 F 110:u ++脣 F 111:u ++脯 F 112:u ++腋 F 113:u ++隋 F 114:u ++腆 F 115:u ++脾 F 116:u ++腓 F 117:u ++腑 F 118:u ++胼 F 119:u ++腱 F 120:u ++腮 F 121:u ++腥 F 122:u ++腦 F 123:u ++腴 F 124:u ++膃 F 125:u ++膈 F 126:u ++膊 F 127:u ++膀 F 128:u ++膂 F 129:u ++膠 F 130:u ++膕 F 131:u ++膤 F 132:u ++膣 F 133:u ++腟 F 134:u ++膓 F 135:u ++膩 F 136:u ++膰 F 137:u ++膵 F 138:u ++膾 F 139:u ++膸 F 140:u ++膽 F 141:u ++臀 F 142:u ++臂 F 143:u ++膺 F 144:u ++臉 F 145:u ++臍 F 146:u ++臑 F 147:u ++臙 F 148:u ++臘 F 149:u ++臈 F 150:u ++臚 F 151:u ++臟 F 152:u ++臠 F 153:u ++臧 F 154:u ++臺 F 155:u ++臻 F 156:u ++臾 F 157:u ++舁 F 158:u ++舂 F 159:u ++舅 F 160:u ++與 F 161:u ++舊 F 162:u ++舍 F 163:u ++舐 F 164:u ++舖 F 165:u ++舩 F 166:u ++舫 F 167:u ++舸 F 168:u ++舳 F 169:u ++艀 F 170:u ++艙 F 171:u ++艘 F 172:u ++艝 F 173:u ++艚 F 174:u ++艟 F 175:u ++艤 F 176:u ++艢 F 177:u ++艨 F 178:u ++艪 F 179:u ++艫 F 180:u ++舮 F 181:u ++艱 F 182:u ++艷 F 183:u ++艸 F 184:u ++艾 F 185:u ++芍 F 186:u ++芒 F 187:u ++芫 F 188:u ++芟 F 189:u ++芻 F 190:u ++芬 F 191:u ++苡 F 192:u ++苣 F 193:u ++苟 F 194:u ++苒 F 195:u ++苴 F 196:u ++苳 F 197:u ++苺 F 198:u ++莓 F 199:u ++范 F 200:u ++苻 F 201:u ++苹 F 202:u ++苞 F 203:u ++茆 F 204:u ++苜 F 205:u ++茉 F 206:u ++苙 F 207:u ++茵 F 208:u ++茴 F 209:u ++茖 F 210:u ++茲 F 211:u ++茱 F 212:u ++荀 F 213:u ++茹 F 214:u ++荐 F 215:u ++荅 F 216:u ++茯 F 217:u ++茫 F 218:u ++茗 F 219:u ++茘 F 220:u ++莅 F 221:u ++莚 F 222:u ++莪 F 223:u ++莟 F 224:u ++莢 F 225:u ++莖 F 226:u ++茣 F 227:u ++莎 F 228:u ++莇 F 229:u ++莊 F 230:u ++荼 F 231:u ++莵 F 232:u ++荳 F 233:u ++荵 F 234:u ++莠 F 235:u ++莉 F 236:u ++莨 F 237:u ++菴 F 238:u ++萓 F 239:u ++菫 F 240:u ++菎 F 241:u ++菽 F 242:u ++萃 F 243:u ++菘 F 244:u ++萋 F 245:u ++菁 F 246:u ++菷 F 247:u ++萇 F 248:u ++菠 F 249:u ++菲 F 250:u ++萍 F 251:u ++萢 F 252:u ++萠 F 253:u ++莽 F 254:u ++萸 F 255:u ++蔆 F 0:v ++菻 F 1:v ++葭 F 2:v ++萪 F 3:v ++萼 F 4:v ++蕚 F 5:v ++蒄 F 6:v ++葷 F 7:v ++葫 F 8:v ++蒭 F 9:v ++葮 F 10:v ++蒂 F 11:v ++葩 F 12:v ++葆 F 13:v ++萬 F 14:v ++葯 F 15:v ++葹 F 16:v ++萵 F 17:v ++蓊 F 18:v ++葢 F 19:v ++蒹 F 20:v ++蒿 F 21:v ++蒟 F 22:v ++蓙 F 23:v ++蓍 F 24:v ++蒻 F 25:v ++蓚 F 26:v ++蓐 F 27:v ++蓁 F 28:v ++蓆 F 29:v ++蓖 F 30:v ++蒡 F 31:v ++蔡 F 32:v ++蓿 F 33:v ++蓴 F 34:v ++蔗 F 35:v ++蔘 F 36:v ++蔬 F 37:v ++蔟 F 38:v ++蔕 F 39:v ++蔔 F 40:v ++蓼 F 41:v ++蕀 F 42:v ++蕣 F 43:v ++蕘 F 44:v ++蕈 F 45:v ++蕁 F 46:v ++蘂 F 47:v ++蕋 F 48:v ++蕕 F 49:v ++薀 F 50:v ++薤 F 51:v ++薈 F 52:v ++薑 F 53:v ++薊 F 54:v ++薨 F 55:v ++蕭 F 56:v ++薔 F 57:v ++薛 F 58:v ++藪 F 59:v ++薇 F 60:v ++薜 F 61:v ++蕷 F 62:v ++蕾 F 63:v ++薐 F 64:v ++藉 F 65:v ++薺 F 66:v ++藏 F 67:v ++薹 F 68:v ++藐 F 69:v ++藕 F 70:v ++藝 F 71:v ++藥 F 72:v ++藜 F 73:v ++藹 F 74:v ++蘊 F 75:v ++蘓 F 76:v ++蘋 F 77:v ++藾 F 78:v ++藺 F 79:v ++蘆 F 80:v ++蘢 F 81:v ++蘚 F 82:v ++蘰 F 83:v ++蘿 F 84:v ++虍 F 85:v ++乕 F 86:v ++虔 F 87:v ++號 F 88:v ++虧 F 89:v ++虱 F 90:v ++蚓 F 91:v ++蚣 F 92:v ++蚩 F 93:v ++蚪 F 94:v ++蚋 F 95:v ++蚌 F 96:v ++蚶 F 97:v ++蚯 F 98:v ++蛄 F 99:v ++蛆 F 100:v ++蚰 F 101:v ++蛉 F 102:v ++蠣 F 103:v ++蚫 F 104:v ++蛔 F 105:v ++蛞 F 106:v ++蛩 F 107:v ++蛬 F 108:v ++蛟 F 109:v ++蛛 F 110:v ++蛯 F 111:v ++蜒 F 112:v ++蜆 F 113:v ++蜈 F 114:v ++蜀 F 115:v ++蜃 F 116:v ++蛻 F 117:v ++蜑 F 118:v ++蜉 F 119:v ++蜍 F 120:v ++蛹 F 121:v ++蜊 F 122:v ++蜴 F 123:v ++蜿 F 124:v ++蜷 F 125:v ++蜻 F 126:v ++蜥 F 127:v ++蜩 F 128:v ++蜚 F 129:v ++蝠 F 130:v ++蝟 F 131:v ++蝸 F 132:v ++蝌 F 133:v ++蝎 F 134:v ++蝴 F 135:v ++蝗 F 136:v ++蝨 F 137:v ++蝮 F 138:v ++蝙 F 139:v ++蝓 F 140:v ++蝣 F 141:v ++蝪 F 142:v ++蠅 F 143:v ++螢 F 144:v ++螟 F 145:v ++螂 F 146:v ++螯 F 147:v ++蟋 F 148:v ++螽 F 149:v ++蟀 F 150:v ++蟐 F 151:v ++雖 F 152:v ++螫 F 153:v ++蟄 F 154:v ++螳 F 155:v ++蟇 F 156:v ++蟆 F 157:v ++螻 F 158:v ++蟯 F 159:v ++蟲 F 160:v ++蟠 F 161:v ++蠏 F 162:v ++蠍 F 163:v ++蟾 F 164:v ++蟶 F 165:v ++蟷 F 166:v ++蠎 F 167:v ++蟒 F 168:v ++蠑 F 169:v ++蠖 F 170:v ++蠕 F 171:v ++蠢 F 172:v ++蠡 F 173:v ++蠱 F 174:v ++蠶 F 175:v ++蠹 F 176:v ++蠧 F 177:v ++蠻 F 178:v ++衄 F 179:v ++衂 F 180:v ++衒 F 181:v ++衙 F 182:v ++衞 F 183:v ++衢 F 184:v ++衫 F 185:v ++袁 F 186:v ++衾 F 187:v ++袞 F 188:v ++衵 F 189:v ++衽 F 190:v ++袵 F 191:v ++衲 F 192:v ++袂 F 193:v ++袗 F 194:v ++袒 F 195:v ++袮 F 196:v ++袙 F 197:v ++袢 F 198:v ++袍 F 199:v ++袤 F 200:v ++袰 F 201:v ++袿 F 202:v ++袱 F 203:v ++裃 F 204:v ++裄 F 205:v ++裔 F 206:v ++裘 F 207:v ++裙 F 208:v ++裝 F 209:v ++裹 F 210:v ++褂 F 211:v ++裼 F 212:v ++裴 F 213:v ++裨 F 214:v ++裲 F 215:v ++褄 F 216:v ++褌 F 217:v ++褊 F 218:v ++褓 F 219:v ++襃 F 220:v ++褞 F 221:v ++褥 F 222:v ++褪 F 223:v ++褫 F 224:v ++襁 F 225:v ++襄 F 226:v ++褻 F 227:v ++褶 F 228:v ++褸 F 229:v ++襌 F 230:v ++褝 F 231:v ++襠 F 232:v ++襞 F 233:v ++襦 F 234:v ++襤 F 235:v ++襭 F 236:v ++襪 F 237:v ++襯 F 238:v ++襴 F 239:v ++襷 F 240:v ++襾 F 241:v ++覃 F 242:v ++覈 F 243:v ++覊 F 244:v ++覓 F 245:v ++覘 F 246:v ++覡 F 247:v ++覩 F 248:v ++覦 F 249:v ++覬 F 250:v ++覯 F 251:v ++覲 F 252:v ++覺 F 253:v ++覽 F 254:v ++覿 F 255:v ++觀 F 0:w ++觚 F 1:w ++觜 F 2:w ++觝 F 3:w ++觧 F 4:w ++觴 F 5:w ++觸 F 6:w ++訃 F 7:w ++訖 F 8:w ++訐 F 9:w ++訌 F 10:w ++訛 F 11:w ++訝 F 12:w ++訥 F 13:w ++訶 F 14:w ++詁 F 15:w ++詛 F 16:w ++詒 F 17:w ++詆 F 18:w ++詈 F 19:w ++詼 F 20:w ++詭 F 21:w ++詬 F 22:w ++詢 F 23:w ++誅 F 24:w ++誂 F 25:w ++誄 F 26:w ++誨 F 27:w ++誡 F 28:w ++誑 F 29:w ++誥 F 30:w ++誦 F 31:w ++誚 F 32:w ++誣 F 33:w ++諄 F 34:w ++諍 F 35:w ++諂 F 36:w ++諚 F 37:w ++諫 F 38:w ++諳 F 39:w ++諧 F 40:w ++諤 F 41:w ++諱 F 42:w ++謔 F 43:w ++諠 F 44:w ++諢 F 45:w ++諷 F 46:w ++諞 F 47:w ++諛 F 48:w ++謌 F 49:w ++謇 F 50:w ++謚 F 51:w ++諡 F 52:w ++謖 F 53:w ++謐 F 54:w ++謗 F 55:w ++謠 F 56:w ++謳 F 57:w ++鞫 F 58:w ++謦 F 59:w ++謫 F 60:w ++謾 F 61:w ++謨 F 62:w ++譁 F 63:w ++譌 F 64:w ++譏 F 65:w ++譎 F 66:w ++證 F 67:w ++譖 F 68:w ++譛 F 69:w ++譚 F 70:w ++譫 F 71:w ++譟 F 72:w ++譬 F 73:w ++譯 F 74:w ++譴 F 75:w ++譽 F 76:w ++讀 F 77:w ++讌 F 78:w ++讎 F 79:w ++讒 F 80:w ++讓 F 81:w ++讖 F 82:w ++讙 F 83:w ++讚 F 84:w ++谺 F 85:w ++豁 F 86:w ++谿 F 87:w ++豈 F 88:w ++豌 F 89:w ++豎 F 90:w ++豐 F 91:w ++豕 F 92:w ++豢 F 93:w ++豬 F 94:w ++豸 F 95:w ++豺 F 96:w ++貂 F 97:w ++貉 F 98:w ++貅 F 99:w ++貊 F 100:w ++貍 F 101:w ++貎 F 102:w ++貔 F 103:w ++豼 F 104:w ++貘 F 105:w ++戝 F 106:w ++貭 F 107:w ++貪 F 108:w ++貽 F 109:w ++貲 F 110:w ++貳 F 111:w ++貮 F 112:w ++貶 F 113:w ++賈 F 114:w ++賁 F 115:w ++賤 F 116:w ++賣 F 117:w ++賚 F 118:w ++賽 F 119:w ++賺 F 120:w ++賻 F 121:w ++贄 F 122:w ++贅 F 123:w ++贊 F 124:w ++贇 F 125:w ++贏 F 126:w ++贍 F 127:w ++贐 F 128:w ++齎 F 129:w ++贓 F 130:w ++賍 F 131:w ++贔 F 132:w ++贖 F 133:w ++赧 F 134:w ++赭 F 135:w ++赱 F 136:w ++赳 F 137:w ++趁 F 138:w ++趙 F 139:w ++跂 F 140:w ++趾 F 141:w ++趺 F 142:w ++跏 F 143:w ++跚 F 144:w ++跖 F 145:w ++跌 F 146:w ++跛 F 147:w ++跋 F 148:w ++跪 F 149:w ++跫 F 150:w ++跟 F 151:w ++跣 F 152:w ++跼 F 153:w ++踈 F 154:w ++踉 F 155:w ++跿 F 156:w ++踝 F 157:w ++踞 F 158:w ++踐 F 159:w ++踟 F 160:w ++蹂 F 161:w ++踵 F 162:w ++踰 F 163:w ++踴 F 164:w ++蹊 F 165:w ++蹇 F 166:w ++蹉 F 167:w ++蹌 F 168:w ++蹐 F 169:w ++蹈 F 170:w ++蹙 F 171:w ++蹤 F 172:w ++蹠 F 173:w ++踪 F 174:w ++蹣 F 175:w ++蹕 F 176:w ++蹶 F 177:w ++蹲 F 178:w ++蹼 F 179:w ++躁 F 180:w ++躇 F 181:w ++躅 F 182:w ++躄 F 183:w ++躋 F 184:w ++躊 F 185:w ++躓 F 186:w ++躑 F 187:w ++躔 F 188:w ++躙 F 189:w ++躪 F 190:w ++躡 F 191:w ++躬 F 192:w ++躰 F 193:w ++軆 F 194:w ++躱 F 195:w ++躾 F 196:w ++軅 F 197:w ++軈 F 198:w ++軋 F 199:w ++軛 F 200:w ++軣 F 201:w ++軼 F 202:w ++軻 F 203:w ++軫 F 204:w ++軾 F 205:w ++輊 F 206:w ++輅 F 207:w ++輕 F 208:w ++輒 F 209:w ++輙 F 210:w ++輓 F 211:w ++輜 F 212:w ++輟 F 213:w ++輛 F 214:w ++輌 F 215:w ++輦 F 216:w ++輳 F 217:w ++輻 F 218:w ++輹 F 219:w ++轅 F 220:w ++轂 F 221:w ++輾 F 222:w ++轌 F 223:w ++轉 F 224:w ++轆 F 225:w ++轎 F 226:w ++轗 F 227:w ++轜 F 228:w ++轢 F 229:w ++轣 F 230:w ++轤 F 231:w ++辜 F 232:w ++辟 F 233:w ++辣 F 234:w ++辭 F 235:w ++辯 F 236:w ++辷 F 237:w ++迚 F 238:w ++迥 F 239:w ++迢 F 240:w ++迪 F 241:w ++迯 F 242:w ++邇 F 243:w ++迴 F 244:w ++逅 F 245:w ++迹 F 246:w ++迺 F 247:w ++逑 F 248:w ++逕 F 249:w ++逡 F 250:w ++逍 F 251:w ++逞 F 252:w ++逖 F 253:w ++逋 F 254:w ++逧 F 255:w ++逶 F 0:x ++逵 F 1:x ++逹 F 2:x ++迸 F 3:x ++遏 F 4:x ++遐 F 5:x ++遑 F 6:x ++遒 F 7:x ++逎 F 8:x ++遉 F 9:x ++逾 F 10:x ++遖 F 11:x ++遘 F 12:x ++遞 F 13:x ++遨 F 14:x ++遯 F 15:x ++遶 F 16:x ++隨 F 17:x ++遲 F 18:x ++邂 F 19:x ++遽 F 20:x ++邁 F 21:x ++邀 F 22:x ++邊 F 23:x ++邉 F 24:x ++邏 F 25:x ++邨 F 26:x ++邯 F 27:x ++邱 F 28:x ++邵 F 29:x ++郢 F 30:x ++郤 F 31:x ++扈 F 32:x ++郛 F 33:x ++鄂 F 34:x ++鄒 F 35:x ++鄙 F 36:x ++鄲 F 37:x ++鄰 F 38:x ++酊 F 39:x ++酖 F 40:x ++酘 F 41:x ++酣 F 42:x ++酥 F 43:x ++酩 F 44:x ++酳 F 45:x ++酲 F 46:x ++醋 F 47:x ++醉 F 48:x ++醂 F 49:x ++醢 F 50:x ++醫 F 51:x ++醯 F 52:x ++醪 F 53:x ++醵 F 54:x ++醴 F 55:x ++醺 F 56:x ++釀 F 57:x ++釁 F 58:x ++釉 F 59:x ++釋 F 60:x ++釐 F 61:x ++釖 F 62:x ++釟 F 63:x ++釡 F 64:x ++釛 F 65:x ++釼 F 66:x ++釵 F 67:x ++釶 F 68:x ++鈞 F 69:x ++釿 F 70:x ++鈔 F 71:x ++鈬 F 72:x ++鈕 F 73:x ++鈑 F 74:x ++鉞 F 75:x ++鉗 F 76:x ++鉅 F 77:x ++鉉 F 78:x ++鉤 F 79:x ++鉈 F 80:x ++銕 F 81:x ++鈿 F 82:x ++鉋 F 83:x ++鉐 F 84:x ++銜 F 85:x ++銖 F 86:x ++銓 F 87:x ++銛 F 88:x ++鉚 F 89:x ++鋏 F 90:x ++銹 F 91:x ++銷 F 92:x ++鋩 F 93:x ++錏 F 94:x ++鋺 F 95:x ++鍄 F 96:x ++錮 F 97:x ++錙 F 98:x ++錢 F 99:x ++錚 F 100:x ++錣 F 101:x ++錺 F 102:x ++錵 F 103:x ++錻 F 104:x ++鍜 F 105:x ++鍠 F 106:x ++鍼 F 107:x ++鍮 F 108:x ++鍖 F 109:x ++鎰 F 110:x ++鎬 F 111:x ++鎭 F 112:x ++鎔 F 113:x ++鎹 F 114:x ++鏖 F 115:x ++鏗 F 116:x ++鏨 F 117:x ++鏥 F 118:x ++鏘 F 119:x ++鏃 F 120:x ++鏝 F 121:x ++鏐 F 122:x ++鏈 F 123:x ++鏤 F 124:x ++鐚 F 125:x ++鐔 F 126:x ++鐓 F 127:x ++鐃 F 128:x ++鐇 F 129:x ++鐐 F 130:x ++鐶 F 131:x ++鐫 F 132:x ++鐵 F 133:x ++鐡 F 134:x ++鐺 F 135:x ++鑁 F 136:x ++鑒 F 137:x ++鑄 F 138:x ++鑛 F 139:x ++鑠 F 140:x ++鑢 F 141:x ++鑞 F 142:x ++鑪 F 143:x ++鈩 F 144:x ++鑰 F 145:x ++鑵 F 146:x ++鑷 F 147:x ++鑽 F 148:x ++鑚 F 149:x ++鑼 F 150:x ++鑾 F 151:x ++钁 F 152:x ++鑿 F 153:x ++閂 F 154:x ++閇 F 155:x ++閊 F 156:x ++閔 F 157:x ++閖 F 158:x ++閘 F 159:x ++閙 F 160:x ++閠 F 161:x ++閨 F 162:x ++閧 F 163:x ++閭 F 164:x ++閼 F 165:x ++閻 F 166:x ++閹 F 167:x ++閾 F 168:x ++闊 F 169:x ++濶 F 170:x ++闃 F 171:x ++闍 F 172:x ++闌 F 173:x ++闕 F 174:x ++闔 F 175:x ++闖 F 176:x ++關 F 177:x ++闡 F 178:x ++闥 F 179:x ++闢 F 180:x ++阡 F 181:x ++阨 F 182:x ++阮 F 183:x ++阯 F 184:x ++陂 F 185:x ++陌 F 186:x ++陏 F 187:x ++陋 F 188:x ++陷 F 189:x ++陜 F 190:x ++陞 F 191:x ++陝 F 192:x ++陟 F 193:x ++陦 F 194:x ++陲 F 195:x ++陬 F 196:x ++隍 F 197:x ++隘 F 198:x ++隕 F 199:x ++隗 F 200:x ++險 F 201:x ++隧 F 202:x ++隱 F 203:x ++隲 F 204:x ++隰 F 205:x ++隴 F 206:x ++隶 F 207:x ++隸 F 208:x ++隹 F 209:x ++雎 F 210:x ++雋 F 211:x ++雉 F 212:x ++雍 F 213:x ++襍 F 214:x ++雜 F 215:x ++霍 F 216:x ++雕 F 217:x ++雹 F 218:x ++霄 F 219:x ++霆 F 220:x ++霈 F 221:x ++霓 F 222:x ++霎 F 223:x ++霑 F 224:x ++霏 F 225:x ++霖 F 226:x ++霙 F 227:x ++霤 F 228:x ++霪 F 229:x ++霰 F 230:x ++霹 F 231:x ++霽 F 232:x ++霾 F 233:x ++靄 F 234:x ++靆 F 235:x ++靈 F 236:x ++靂 F 237:x ++靉 F 238:x ++靜 F 239:x ++靠 F 240:x ++靤 F 241:x ++靦 F 242:x ++靨 F 243:x ++勒 F 244:x ++靫 F 245:x ++靱 F 246:x ++靹 F 247:x ++鞅 F 248:x ++靼 F 249:x ++鞁 F 250:x ++靺 F 251:x ++鞆 F 252:x ++鞋 F 253:x ++鞏 F 254:x ++鞐 F 255:x ++鞜 F 0:y ++鞨 F 1:y ++鞦 F 2:y ++鞣 F 3:y ++鞳 F 4:y ++鞴 F 5:y ++韃 F 6:y ++韆 F 7:y ++韈 F 8:y ++韋 F 9:y ++韜 F 10:y ++韭 F 11:y ++齏 F 12:y ++韲 F 13:y ++竟 F 14:y ++韶 F 15:y ++韵 F 16:y ++頏 F 17:y ++頌 F 18:y ++頸 F 19:y ++頤 F 20:y ++頡 F 21:y ++頷 F 22:y ++頽 F 23:y ++顆 F 24:y ++顏 F 25:y ++顋 F 26:y ++顫 F 27:y ++顯 F 28:y ++顰 F 29:y ++顱 F 30:y ++顴 F 31:y ++顳 F 32:y ++颪 F 33:y ++颯 F 34:y ++颱 F 35:y ++颶 F 36:y ++飄 F 37:y ++飃 F 38:y ++飆 F 39:y ++飩 F 40:y ++飫 F 41:y ++餃 F 42:y ++餉 F 43:y ++餒 F 44:y ++餔 F 45:y ++餘 F 46:y ++餡 F 47:y ++餝 F 48:y ++餞 F 49:y ++餤 F 50:y ++餠 F 51:y ++餬 F 52:y ++餮 F 53:y ++餽 F 54:y ++餾 F 55:y ++饂 F 56:y ++饉 F 57:y ++饅 F 58:y ++饐 F 59:y ++饋 F 60:y ++饑 F 61:y ++饒 F 62:y ++饌 F 63:y ++饕 F 64:y ++馗 F 65:y ++馘 F 66:y ++馥 F 67:y ++馭 F 68:y ++馮 F 69:y ++馼 F 70:y ++駟 F 71:y ++駛 F 72:y ++駝 F 73:y ++駘 F 74:y ++駑 F 75:y ++駭 F 76:y ++駮 F 77:y ++駱 F 78:y ++駲 F 79:y ++駻 F 80:y ++駸 F 81:y ++騁 F 82:y ++騏 F 83:y ++騅 F 84:y ++駢 F 85:y ++騙 F 86:y ++騫 F 87:y ++騷 F 88:y ++驅 F 89:y ++驂 F 90:y ++驀 F 91:y ++驃 F 92:y ++騾 F 93:y ++驕 F 94:y ++驍 F 95:y ++驛 F 96:y ++驗 F 97:y ++驟 F 98:y ++驢 F 99:y ++驥 F 100:y ++驤 F 101:y ++驩 F 102:y ++驫 F 103:y ++驪 F 104:y ++骭 F 105:y ++骰 F 106:y ++骼 F 107:y ++髀 F 108:y ++髏 F 109:y ++髑 F 110:y ++髓 F 111:y ++體 F 112:y ++髞 F 113:y ++髟 F 114:y ++髢 F 115:y ++髣 F 116:y ++髦 F 117:y ++髯 F 118:y ++髫 F 119:y ++髮 F 120:y ++髴 F 121:y ++髱 F 122:y ++髷 F 123:y ++髻 F 124:y ++鬆 F 125:y ++鬘 F 126:y ++鬚 F 127:y ++鬟 F 128:y ++鬢 F 129:y ++鬣 F 130:y ++鬥 F 131:y ++鬧 F 132:y ++鬨 F 133:y ++鬩 F 134:y ++鬪 F 135:y ++鬮 F 136:y ++鬯 F 137:y ++鬲 F 138:y ++魄 F 139:y ++魃 F 140:y ++魏 F 141:y ++魍 F 142:y ++魎 F 143:y ++魑 F 144:y ++魘 F 145:y ++魴 F 146:y ++鮓 F 147:y ++鮃 F 148:y ++鮑 F 149:y ++鮖 F 150:y ++鮗 F 151:y ++鮟 F 152:y ++鮠 F 153:y ++鮨 F 154:y ++鮴 F 155:y ++鯀 F 156:y ++鯊 F 157:y ++鮹 F 158:y ++鯆 F 159:y ++鯏 F 160:y ++鯑 F 161:y ++鯒 F 162:y ++鯣 F 163:y ++鯢 F 164:y ++鯤 F 165:y ++鯔 F 166:y ++鯡 F 167:y ++鰺 F 168:y ++鯲 F 169:y ++鯱 F 170:y ++鯰 F 171:y ++鰕 F 172:y ++鰔 F 173:y ++鰉 F 174:y ++鰓 F 175:y ++鰌 F 176:y ++鰆 F 177:y ++鰈 F 178:y ++鰒 F 179:y ++鰊 F 180:y ++鰄 F 181:y ++鰮 F 182:y ++鰛 F 183:y ++鰥 F 184:y ++鰤 F 185:y ++鰡 F 186:y ++鰰 F 187:y ++鱇 F 188:y ++鰲 F 189:y ++鱆 F 190:y ++鰾 F 191:y ++鱚 F 192:y ++鱠 F 193:y ++鱧 F 194:y ++鱶 F 195:y ++鱸 F 196:y ++鳧 F 197:y ++鳬 F 198:y ++鳰 F 199:y ++鴉 F 200:y ++鴈 F 201:y ++鳫 F 202:y ++鴃 F 203:y ++鴆 F 204:y ++鴪 F 205:y ++鴦 F 206:y ++鶯 F 207:y ++鴣 F 208:y ++鴟 F 209:y ++鵄 F 210:y ++鴕 F 211:y ++鴒 F 212:y ++鵁 F 213:y ++鴿 F 214:y ++鴾 F 215:y ++鵆 F 216:y ++鵈 F 217:y ++鵝 F 218:y ++鵞 F 219:y ++鵤 F 220:y ++鵑 F 221:y ++鵐 F 222:y ++鵙 F 223:y ++鵲 F 224:y ++鶉 F 225:y ++鶇 F 226:y ++鶫 F 227:y ++鵯 F 228:y ++鵺 F 229:y ++鶚 F 230:y ++鶤 F 231:y ++鶩 F 232:y ++鶲 F 233:y ++鷄 F 234:y ++鷁 F 235:y ++鶻 F 236:y ++鶸 F 237:y ++鶺 F 238:y ++鷆 F 239:y ++鷏 F 240:y ++鷂 F 241:y ++鷙 F 242:y ++鷓 F 243:y ++鷸 F 244:y ++鷦 F 245:y ++鷭 F 246:y ++鷯 F 247:y ++鷽 F 248:y ++鸚 F 249:y ++鸛 F 250:y ++鸞 F 251:y ++鹵 F 252:y ++鹹 F 253:y ++鹽 F 254:y ++麁 F 255:y ++麈 F 0:z ++麋 F 1:z ++麌 F 2:z ++麒 F 3:z ++麕 F 4:z ++麑 F 5:z ++麝 F 6:z ++麥 F 7:z ++麩 F 8:z ++麸 F 9:z ++麪 F 10:z ++麭 F 11:z ++靡 F 12:z ++黌 F 13:z ++黎 F 14:z ++黏 F 15:z ++黐 F 16:z ++黔 F 17:z ++黜 F 18:z ++點 F 19:z ++黝 F 20:z ++黠 F 21:z ++黥 F 22:z ++黨 F 23:z ++黯 F 24:z ++黴 F 25:z ++黶 F 26:z ++黷 F 27:z ++黹 F 28:z ++黻 F 29:z ++黼 F 30:z ++黽 F 31:z ++鼇 F 32:z ++鼈 F 33:z ++皷 F 34:z ++鼕 F 35:z ++鼡 F 36:z ++鼬 F 37:z ++鼾 F 38:z ++齊 F 39:z ++齒 F 40:z ++齔 F 41:z ++齣 F 42:z ++齟 F 43:z ++齠 F 44:z ++齡 F 45:z ++齦 F 46:z ++齧 F 47:z ++齬 F 48:z ++齪 F 49:z ++齷 F 50:z ++齲 F 51:z ++齶 F 52:z ++龕 F 53:z ++龜 F 54:z ++龠 F 55:z ++堯 F 56:z ++槇 F 57:z ++遙 F 58:z ++瑤 F 59:z +--- groff-1.18.1.orig/font/devX75/DESC ++++ groff-1.18.1/font/devX75/DESC +@@ -1,5 +1,17 @@ + styles R I B BI +-fonts 6 0 0 0 0 0 S ++fonts 8 0 0 0 0 0 S M G ++fontset B G 2E00..9FFF ++fontset CB G 2E00..9FFF ++fontset HB G 2E00..9FFF ++fontset NB G 2E00..9FFF ++fontset TB G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset CB G FF00..FFEF ++fontset HB G FF00..FFEF ++fontset NB G FF00..FFEF ++fontset TB G FF00..FFEF ++fontset - M FF00..FFEF + sizes 8 10 12 14 18 24 0 + res 75 + X11 +--- groff-1.18.1.orig/font/devX75/Makefile.sub ++++ groff-1.18.1/font/devX75/Makefile.sub +@@ -1,2 +1,13 @@ + DEV=X75 +-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S ++DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G ++CLEANADD=M G ++ ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @cat $(srcdir)/M.proto > M ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' M > G +--- groff-1.18.1.orig/font/devX75/M.proto ++++ groff-1.18.1/font/devX75/M.proto +@@ -0,0 +1,6 @@ ++name M ++spacewidth 2 ++charset ++u2E00..u9FFF 10 0 ++uFF00..uFFEF 10 0 ++ +--- groff-1.18.1.orig/font/devX75-12/DESC ++++ groff-1.18.1/font/devX75-12/DESC +@@ -1,5 +1,17 @@ + styles R I B BI +-fonts 6 0 0 0 0 0 S ++fonts 8 0 0 0 0 0 S M G ++fontset B G 2E00..9FFF ++fontset CB G 2E00..9FFF ++fontset HB G 2E00..9FFF ++fontset NB G 2E00..9FFF ++fontset TB G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset CB G FF00..FFEF ++fontset HB G FF00..FFEF ++fontset NB G FF00..FFEF ++fontset TB G FF00..FFEF ++fontset - M FF00..FFEF + sizes 8 10 12 14 18 24 0 + res 75 + X11 +--- groff-1.18.1.orig/font/devX75-12/Makefile.sub ++++ groff-1.18.1/font/devX75-12/Makefile.sub +@@ -1,2 +1,13 @@ + DEV=X75-12 +-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S ++DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G ++CLEANADD=M G ++ ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @cat $(srcdir)/M.proto > M ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' M > G +--- groff-1.18.1.orig/font/devX75-12/M.proto ++++ groff-1.18.1/font/devX75-12/M.proto +@@ -0,0 +1,5 @@ ++name M ++spacewidth 2 ++charset ++u2E00..u9FFF 12 0 ++uFF00..uFFEF 12 0 +--- groff-1.18.1.orig/font/devX100/DESC ++++ groff-1.18.1/font/devX100/DESC +@@ -1,5 +1,17 @@ + styles R I B BI +-fonts 6 0 0 0 0 0 S ++fonts 8 0 0 0 0 0 S M G ++fontset B G 2E00..9FFF ++fontset CB G 2E00..9FFF ++fontset HB G 2E00..9FFF ++fontset NB G 2E00..9FFF ++fontset TB G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset CB G FF00..FFEF ++fontset HB G FF00..FFEF ++fontset NB G FF00..FFEF ++fontset TB G FF00..FFEF ++fontset - M FF00..FFEF + sizes 8 10 12 14 18 24 0 + res 100 + X11 +--- groff-1.18.1.orig/font/devX100/Makefile.sub ++++ groff-1.18.1/font/devX100/Makefile.sub +@@ -1,2 +1,13 @@ + DEV=X100 +-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S ++DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G ++CLEANADD=M G ++ ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @cat $(srcdir)/M.proto > M ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' M > G +--- groff-1.18.1.orig/font/devX100/M.proto ++++ groff-1.18.1/font/devX100/M.proto +@@ -0,0 +1,5 @@ ++name M ++spacewidth 3 ++charset ++u2E00..u9FFF 20 0 ++uFF00..uFFEF 20 0 +--- groff-1.18.1.orig/font/devX100-12/DESC ++++ groff-1.18.1/font/devX100-12/DESC +@@ -1,5 +1,17 @@ + styles R I B BI +-fonts 6 0 0 0 0 0 S ++fonts 8 0 0 0 0 0 S M G ++fontset B G 2E00..9FFF ++fontset CB G 2E00..9FFF ++fontset HB G 2E00..9FFF ++fontset NB G 2E00..9FFF ++fontset TB G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset CB G FF00..FFEF ++fontset HB G FF00..FFEF ++fontset NB G FF00..FFEF ++fontset TB G FF00..FFEF ++fontset - M FF00..FFEF + sizes 8 10 12 14 18 24 0 + res 100 + X11 +--- groff-1.18.1.orig/font/devX100-12/Makefile.sub ++++ groff-1.18.1/font/devX100-12/Makefile.sub +@@ -1,2 +1,14 @@ + DEV=X100-12 +-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S ++DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S M G ++CLEANADD=M G ++ ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @cat $(srcdir)/M.proto > M ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' M > G ++ +--- groff-1.18.1.orig/font/devX100-12/M.proto ++++ groff-1.18.1/font/devX100-12/M.proto +@@ -0,0 +1,5 @@ ++name M ++spacewidth 4 ++charset ++u2E00..u9FFF 20 0 ++uFF00..uFFEF 20 0 +--- groff-1.18.1.orig/font/devhtml/DESC.proto ++++ groff-1.18.1/font/devhtml/DESC.proto +@@ -3,7 +3,11 @@ + vert 40 + unitwidth 10 + sizes 6 8 10 12 14 16 18 0 +-fonts 9 R I B BI CR CI CB CBI S ++fonts 11 R I B BI CR CI CB CBI S M G ++fontset B G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset - M FF00..FFEF + tcommand + html + postpro post-grohtml +--- groff-1.18.1.orig/font/devhtml/Makefile.sub ++++ groff-1.18.1/font/devhtml/Makefile.sub +@@ -1,8 +1,10 @@ + DEV=html + PROTOFONTS=R I B BI CR CI CB CBI + FONTS=$(PROTOFONTS) S +-DEVFILES=$(FONTS) DESC +-CLEANADD=$(FONTS) DESC ++WFONTS=M G ++ALLFONTS=$(FONTS) $(WFONTS) ++DEVFILES=$(ALLFONTS) DESC ++CLEANADD=$(ALLFONTS) DESC + + RES=240 + CPI=10 +@@ -13,8 +15,8 @@ + @-rm -f $@ + @(charwidth=`expr $(RES) / $(CPI)` ; \ + sed -e "s/^name [A-Z]*$$/name $@/" \ +- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \ +- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \ ++ -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \ ++ -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \ + -e "s/^internalname .*$$/internalname $@/" \ + -e "/^internalname/s/CR/4/" \ + -e "/^internalname/s/BI/3/" \ +@@ -29,6 +31,19 @@ + @sed -e "s/^res .*$$/res $(RES)/" \ + -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \ + -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \ +- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \ ++ -e "s/^fonts .*$$/fonts `set $(ALLFONTS); echo $$#` $(ALLFONTS)/" \ + $(srcdir)/DESC.proto >$@ + ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @(wcharwidth=`expr $(RES) / $(CPI) \* 2`; \ ++ spacewidth=`expr $(RES) / $(CPI)`; \ ++ sed -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \ ++ -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \ ++ $(srcdir)/M.proto > $@) ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' M > G +--- groff-1.18.1.orig/font/devhtml/M.proto ++++ groff-1.18.1/font/devhtml/M.proto +@@ -0,0 +1,5 @@ ++name M ++spacewidth 16 ++charset ++u2E00..u9FFF 16,14,2 0 ++uFF00..uFFEF 16,14,2 0 +--- groff-1.18.1.orig/font/devlj4/Makefile.sub ++++ groff-1.18.1/font/devlj4/Makefile.sub +@@ -22,9 +22,9 @@ + echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>DESC + cat $(srcdir)/DESC.in >>DESC + if test "$(PAGE)" = A4; then \ +- echo "papersize a4" >>DESC; \ ++ echo "papersize /etc/papersize a4" >>DESC; \ + else \ +- echo "papersize letter" >>DESC; \ ++ echo "papersize /etc/papersize letter" >>DESC; \ + fi + test -z '$(LJ4PRINT)' || echo print '$(LJ4PRINT)' >>DESC + +--- groff-1.18.1.orig/font/devlbp/Makefile.sub ++++ groff-1.18.1/font/devlbp/Makefile.sub +@@ -13,9 +13,9 @@ + -rm -f DESC + cat $(srcdir)/DESC.in >>DESC + if test "$(PAGE)" = A4; then \ +- echo "papersize a4" >>DESC; \ ++ echo "papersize /etc/papersize a4" >>DESC; \ + else \ +- echo "papersize letter" >>DESC; \ ++ echo "papersize /etc/papersize letter" >>DESC; \ + fi + test -z '$(LBPPRINT)' || echo print '$(LBPPRINT)' >>DESC + +--- groff-1.18.1.orig/font/devascii/Makefile.sub ++++ groff-1.18.1/font/devascii/Makefile.sub +@@ -12,8 +12,8 @@ + @-rm -f $@ + @(charwidth=`expr $(RES) / $(CPI)` ; \ + sed -e "s/^name [A-Z]*$$/name $@/" \ +- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \ +- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \ ++ -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \ ++ -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \ + -e "s/^internalname .*$$/internalname $@/" \ + -e "/^internalname/s/BI/3/" \ + -e "/^internalname/s/B/2/" \ +--- groff-1.18.1.orig/font/devutf8/DESC.proto ++++ groff-1.18.1/font/devutf8/DESC.proto +@@ -3,6 +3,10 @@ + vert 40 + unitwidth 10 + sizes 10 0 +-fonts 4 R I B BI ++fonts 6 R I B BI M G ++fontset B G 2E00..9FFF ++fontset B G FF00..FFEF ++fontset - M 2E00..9FFF ++fontset - M FF00..FFEF + tcommand + postpro grotty +--- groff-1.18.1.orig/font/devutf8/Makefile.sub ++++ groff-1.18.1/font/devutf8/Makefile.sub +@@ -1,7 +1,8 @@ + DEV=utf8 + FONTS=R I B BI +-DEVFILES=$(FONTS) DESC +-CLEANADD=$(FONTS) DESC ++WFONTS=M G ++DEVFILES=$(FONTS) $(WFONTS) DESC ++CLEANADD=$(FONTS) $(WFONTS) DESC + + RES=240 + CPI=10 +@@ -12,8 +13,8 @@ + @-rm -f $@ + @(charwidth=`expr $(RES) / $(CPI)` ; \ + sed -e "s/^name [A-Z]*$$/name $@/" \ +- -e "s/^\\([^ ]*\\) [0-9]+ /\\1 $$charwidth /" \ +- -e "s/^spacewidth [0-9]+$$/spacewidth $$charwidth/" \ ++ -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \ ++ -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \ + -e "s/^internalname .*$$/internalname $@/" \ + -e "/^internalname/s/BI/3/" \ + -e "/^internalname/s/B/2/" \ +@@ -21,12 +22,27 @@ + -e "/^internalname .*[^ 0-9]/d" \ + $(srcdir)/R.proto >$@) + ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ (wcharwidth=`expr $(RES) / $(CPI) \* 2` ; \ ++ spacewidth=`expr $(RES) / $(CPI)` ; \ ++ sed -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \ ++ -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \ ++ $(srcdir)/M.proto > $@) ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' \ ++ -e 's/internalname 4/internalname 5/' M > G ++ + DESC: DESC.proto + @echo Making $@ + @-rm -f $@ + @sed -e "s/^res .*$$/res $(RES)/" \ + -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \ + -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \ +- -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \ ++ -e "s/^fonts .*$$/fonts `set $(FONTS) $(WFONTS); echo $$#` $(FONTS) $(WFONTS)/" \ + $(srcdir)/DESC.proto >$@ + +--- groff-1.18.1.orig/font/devutf8/M.proto ++++ groff-1.18.1/font/devutf8/M.proto +@@ -0,0 +1,6 @@ ++name M ++internalname 4 ++spacewidth 48 ++charset ++u2E00..u9FFF 48 0 ++uFF00..uFFEF 48 0 +--- groff-1.18.1.orig/font/devascii8/DESC.proto ++++ groff-1.18.1/font/devascii8/DESC.proto +@@ -0,0 +1,8 @@ ++res 240 ++hor 24 ++vert 40 ++unitwidth 10 ++sizes 10 0 ++fonts 4 R I B BI ++tcommand ++postpro grotty +--- groff-1.18.1.orig/font/devascii8/Makefile.sub ++++ groff-1.18.1/font/devascii8/Makefile.sub +@@ -0,0 +1,31 @@ ++DEV=ascii8 ++FONTS=R I B BI ++DEVFILES=$(FONTS) DESC ++CLEANADD=$(FONTS) DESC ++ ++RES=240 ++CPI=10 ++LPI=6 ++ ++$(FONTS): R.proto ++ @echo Making $@ ++ @-rm -f $@ ++ @(charwidth=`expr $(RES) / $(CPI)` ; \ ++ sed -e "s/^name [A-Z]*$$/name $@/" \ ++ -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \ ++ -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \ ++ -e "s/^internalname .*$$/internalname $@/" \ ++ -e "/^internalname/s/BI/3/" \ ++ -e "/^internalname/s/B/2/" \ ++ -e "/^internalname/s/I/1/" \ ++ -e "/^internalname .*[^ 0-9]/d" \ ++ $(srcdir)/R.proto >$@) ++ ++DESC: DESC.proto ++ @echo Making $@ ++ @-rm -f $@ ++ @sed -e "s/^res .*$$/res $(RES)/" \ ++ -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \ ++ -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \ ++ -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \ ++ $(srcdir)/DESC.proto >$@ +--- groff-1.18.1.orig/font/devascii8/R.proto ++++ groff-1.18.1/font/devascii8/R.proto +@@ -0,0 +1,262 @@ ++name R ++internalname 0 ++spacewidth 24 ++charset ++! 24 0 0041 ++" 24 0 0042 ++dq " ++lq " ++rq " ++# 24 0 0043 ++sh " ++$ 24 0 0044 ++Do " ++% 24 0 0045 ++& 24 0 0046 ++' 24 0 0047 ++aa " ++fm " ++aq " ++cq " ++( 24 0 0050 ++) 24 0 0051 ++* 24 0 0052 ++** " +++ 24 0 0053 ++pl " ++, 24 0 0054 ++\- 24 0 0055 ++hy " ++- " ++mi " ++en " ++. 24 0 0056 ++/ 24 0 0057 ++sl " ++f/ " ++0 24 0 0060 ++1 24 0 0061 ++2 24 0 0062 ++3 24 0 0063 ++4 24 0 0064 ++5 24 0 0065 ++6 24 0 0066 ++7 24 0 0067 ++8 24 0 0070 ++9 24 0 0071 ++: 24 0 0072 ++; 24 0 0073 ++< 24 0 0074 ++la " ++fo " ++= 24 0 0075 ++eq " ++> 24 0 0076 ++ra " ++fc " ++? 24 0 0077 ++@ 24 0 0100 ++at " ++A 24 0 0101 ++*A " ++B 24 0 0102 ++*B " ++C 24 0 0103 ++D 24 0 0104 ++E 24 0 0105 ++*E " ++F 24 0 0106 ++G 24 0 0107 ++H 24 0 0110 ++*Y " ++I 24 0 0111 ++*I " ++J 24 0 0112 ++K 24 0 0113 ++*K " ++L 24 0 0114 ++M 24 0 0115 ++*M " ++N 24 0 0116 ++*N " ++O 24 0 0117 ++ci " ++*O " ++P 24 0 0120 ++*R " ++Q 24 0 0121 ++R 24 0 0122 ++S 24 0 0123 ++T 24 0 0124 ++*T " ++U 24 0 0125 ++V 24 0 0126 ++W 24 0 0127 ++X 24 0 0130 ++*X " ++Y 24 0 0131 ++*U " ++Z 24 0 0132 ++*Z " ++[ 24 0 0133 ++lB " ++\ 24 0 0134 ++rs " ++] 24 0 0135 ++rB " ++a^ 24 0 0136 ++^ " ++ha " ++_ 24 0 0137 ++ru " ++ul " ++` 24 0 0140 ++oq " ++ga " ++a 24 0 0141 ++b 24 0 0142 ++c 24 0 0143 ++d 24 0 0144 ++e 24 0 0145 ++f 24 0 0146 ++g 24 0 0147 ++h 24 0 0150 ++i 24 0 0151 ++.i " ++j 24 0 0152 ++k 24 0 0153 ++l 24 0 0154 ++m 24 0 0155 ++n 24 0 0156 ++o 24 0 0157 ++*o " ++p 24 0 0160 ++q 24 0 0161 ++r 24 0 0162 ++s 24 0 0163 ++t 24 0 0164 ++u 24 0 0165 ++v 24 0 0166 ++w 24 0 0167 ++x 24 0 0170 ++mu " ++y 24 0 0171 ++z 24 0 0172 ++lC 24 0 0173 ++{ " ++ba 24 0 0174 ++or " ++bv " ++br " ++| " ++lb " ++lc " ++lf " ++lk " ++lt " ++rb " ++rc " ++rf " ++rk " ++rt " ++rC 24 0 0175 ++} " ++a~ 24 0 0176 ++~ " ++ap " ++ti " ++char161 24 0 0241 ++char162 24 0 0242 ++char163 24 0 0243 ++char164 24 0 0244 ++char165 24 0 0245 ++char166 24 0 0246 ++char167 24 0 0247 ++char168 24 0 0250 ++char169 24 0 0251 ++char170 24 0 0252 ++char171 24 0 0253 ++char172 24 0 0254 ++char173 24 0 0255 ++char174 24 0 0256 ++char175 24 0 0257 ++char176 24 0 0260 ++char177 24 0 0261 ++char178 24 0 0262 ++char179 24 0 0263 ++char180 24 0 0264 ++char181 24 0 0265 ++char182 24 0 0266 ++char183 24 0 0267 ++char184 24 0 0270 ++char185 24 0 0271 ++char186 24 0 0272 ++char187 24 0 0273 ++char188 24 0 0274 ++char189 24 0 0275 ++char190 24 0 0276 ++char191 24 0 0277 ++char192 24 0 0300 ++char193 24 0 0301 ++char194 24 0 0302 ++char195 24 0 0303 ++char196 24 0 0304 ++char197 24 0 0305 ++char198 24 0 0306 ++char199 24 0 0307 ++char200 24 0 0310 ++char201 24 0 0311 ++char202 24 0 0312 ++char203 24 0 0313 ++char204 24 0 0314 ++char205 24 0 0315 ++char206 24 0 0316 ++char207 24 0 0317 ++char208 24 0 0320 ++char209 24 0 0321 ++char210 24 0 0322 ++char211 24 0 0323 ++char212 24 0 0324 ++char213 24 0 0325 ++char214 24 0 0326 ++char215 24 0 0327 ++char216 24 0 0330 ++char217 24 0 0331 ++char218 24 0 0332 ++char219 24 0 0333 ++char220 24 0 0334 ++char221 24 0 0335 ++char222 24 0 0336 ++char223 24 0 0337 ++char224 24 0 0340 ++char225 24 0 0341 ++char226 24 0 0342 ++char227 24 0 0343 ++char228 24 0 0344 ++char229 24 0 0345 ++char230 24 0 0346 ++char231 24 0 0347 ++char232 24 0 0350 ++char233 24 0 0351 ++char234 24 0 0352 ++char235 24 0 0353 ++char236 24 0 0354 ++char237 24 0 0355 ++char238 24 0 0356 ++char239 24 0 0357 ++char240 24 0 0360 ++char241 24 0 0361 ++char242 24 0 0362 ++char243 24 0 0363 ++char244 24 0 0364 ++char245 24 0 0365 ++char246 24 0 0366 ++char247 24 0 0367 ++char248 24 0 0370 ++char249 24 0 0371 ++char250 24 0 0372 ++char251 24 0 0373 ++char252 24 0 0374 ++char253 24 0 0375 ++char254 24 0 0376 ++char255 24 0 0377 +--- groff-1.18.1.orig/font/devnippon/DESC.proto ++++ groff-1.18.1/font/devnippon/DESC.proto +@@ -0,0 +1,12 @@ ++res 240 ++hor 24 ++vert 40 ++unitwidth 10 ++sizes 10 0 ++fonts 6 R I B BI M G ++fontset B G 2E00..9FFF ++fontset - M 2E00..9FFF ++fontset B G FF00..FFEF ++fontset - M FF00..FFEF ++tcommand ++postpro grotty +--- groff-1.18.1.orig/font/devnippon/Makefile.sub ++++ groff-1.18.1/font/devnippon/Makefile.sub +@@ -0,0 +1,48 @@ ++DEV=nippon ++FONTS=R I B BI ++WFONTS=M G ++ALLFONTS=$(FONTS) $(WFONTS) ++DEVFILES=$(ALLFONTS) DESC ++CLEANADD=$(ALLFONTS) DESC ++ ++RES=240 ++CPI=10 ++LPI=6 ++ ++$(FONTS): R.proto ++ @echo Making $@ ++ @-rm -f $@ ++ @(charwidth=`expr $(RES) / $(CPI)` ; \ ++ sed -e "s/^name [A-Z]*$$/name $@/" \ ++ -e "s/^\\([^ ]*\\) [0-9][0-9]* /\\1 $$charwidth /" \ ++ -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \ ++ -e "s/^internalname .*$$/internalname $@/" \ ++ -e "/^internalname/s/BI/3/" \ ++ -e "/^internalname/s/B/2/" \ ++ -e "/^internalname/s/I/1/" \ ++ -e "/^internalname .*[^ 0-9]/d" \ ++ $(srcdir)/R.proto >$@) ++ ++M: M.proto ++ @echo Making M ++ @-rm -f M ++ @(wcharwidth=`expr $(RES) / $(CPI) \* 2` ; \ ++ spacewidth=`expr $(RES) / $(CPI)` ; \ ++ sed -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$spacewidth/" \ ++ -e "s/^u\\([0-9A-F]*\\)..u\\([0-9A-F]*\\) [0-9][0-9]*/u\\1..u\\2 $$wcharwidth/" \ ++ $(srcdir)/M.proto > $@) ++ ++G: M ++ @echo Making G ++ @-rm -f G ++ @sed -e 's/name M/name G/' \ ++ -e 's/internalname 4/internalname 5/' M > G ++ ++DESC: DESC.proto ++ @echo Making $@ ++ @-rm -f $@ ++ @sed -e "s/^res .*$$/res $(RES)/" \ ++ -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \ ++ -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \ ++ -e "s/^fonts .*$$/fonts `set $(ALLFONTS); echo $$#` $(ALLFONTS)/" \ ++ $(srcdir)/DESC.proto >$@ +--- groff-1.18.1.orig/font/devnippon/M.proto ++++ groff-1.18.1/font/devnippon/M.proto +@@ -0,0 +1,6 @@ ++name M ++internalname 4 ++spacewidth 48 ++charset ++u2E00..u9FFF 48 0 ++uFF00..uFFEF 48 0 +--- groff-1.18.1.orig/font/devnippon/R.proto ++++ groff-1.18.1/font/devnippon/R.proto +@@ -0,0 +1,167 @@ ++name R ++internalname 0 ++spacewidth 24 ++charset ++! 24 0 0041 ++" 24 0 0042 ++dq " ++lq " ++rq " ++# 24 0 0043 ++sh " ++$ 24 0 0044 ++Do " ++% 24 0 0045 ++& 24 0 0046 ++' 24 0 0047 ++aa " ++fm " ++aq " ++cq " ++( 24 0 0050 ++) 24 0 0051 ++* 24 0 0052 ++** " +++ 24 0 0053 ++pl " ++, 24 0 0054 ++\- 24 0 0055 ++hy " ++- " ++mi " ++en " ++. 24 0 0056 ++/ 24 0 0057 ++sl " ++f/ " ++0 24 0 0060 ++1 24 0 0061 ++2 24 0 0062 ++3 24 0 0063 ++4 24 0 0064 ++5 24 0 0065 ++6 24 0 0066 ++7 24 0 0067 ++8 24 0 0070 ++9 24 0 0071 ++: 24 0 0072 ++; 24 0 0073 ++< 24 0 0074 ++la " ++fo " ++= 24 0 0075 ++eq " ++> 24 0 0076 ++ra " ++fc " ++? 24 0 0077 ++@ 24 0 0100 ++at " ++A 24 0 0101 ++*A " ++B 24 0 0102 ++*B " ++C 24 0 0103 ++D 24 0 0104 ++E 24 0 0105 ++*E " ++F 24 0 0106 ++G 24 0 0107 ++H 24 0 0110 ++*Y " ++I 24 0 0111 ++*I " ++J 24 0 0112 ++K 24 0 0113 ++*K " ++L 24 0 0114 ++M 24 0 0115 ++*M " ++N 24 0 0116 ++*N " ++O 24 0 0117 ++ci " ++*O " ++P 24 0 0120 ++*R " ++Q 24 0 0121 ++R 24 0 0122 ++S 24 0 0123 ++T 24 0 0124 ++*T " ++U 24 0 0125 ++V 24 0 0126 ++W 24 0 0127 ++X 24 0 0130 ++*X " ++Y 24 0 0131 ++*U " ++Z 24 0 0132 ++*Z " ++[ 24 0 0133 ++lB " ++\ 24 0 0134 ++rs " ++] 24 0 0135 ++rB " ++a^ 24 0 0136 ++^ " ++ha " ++_ 24 0 0137 ++ru " ++ul " ++` 24 0 0140 ++oq " ++ga " ++a 24 0 0141 ++b 24 0 0142 ++c 24 0 0143 ++d 24 0 0144 ++e 24 0 0145 ++f 24 0 0146 ++g 24 0 0147 ++h 24 0 0150 ++i 24 0 0151 ++.i " ++j 24 0 0152 ++k 24 0 0153 ++l 24 0 0154 ++m 24 0 0155 ++n 24 0 0156 ++o 24 0 0157 ++*o " ++p 24 0 0160 ++q 24 0 0161 ++r 24 0 0162 ++s 24 0 0163 ++t 24 0 0164 ++u 24 0 0165 ++v 24 0 0166 ++w 24 0 0167 ++x 24 0 0170 ++mu " ++y 24 0 0171 ++z 24 0 0172 ++lC 24 0 0173 ++{ " ++ba 24 0 0174 ++or " ++bv " ++br " ++| " ++lb " ++lc " ++lf " ++lk " ++lt " ++rb " ++rc " ++rf " ++rk " ++rt " ++rC 24 0 0175 ++} " ++a~ 24 0 0176 ++~ " ++ap " ++ti " +--- groff-1.18.1.orig/tmac/Makefile.sub ++++ groff-1.18.1/tmac/Makefile.sub +@@ -25,15 +25,18 @@ + html.tmac www.tmac \ + eqnrc \ + troffrc troffrc-end \ +- hyphen.us ++ hyphen.us \ ++ andocj.tmac \ ++ euc-jp.tmac + SPECIALFILES=an.tmac man.tmac s.tmac ms.tmac +-STRIPFILES=e.tmac doc.tmac doc-old.tmac +-MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms ++STRIPFILES=e.tmac doc.tmac doc-old.tmac docj.tmac ++MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms docj-ditroff docj-nroff + mdocdir=$(tmacdir)/mdoc + CLEANADD=\ + stamp-wrap stamp-sed *-wrap man.tmac-sed ms.tmac-sed \ + stamp-strip e.tmac-s doc.tmac-s doc-old.tmac-s \ +- doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s ++ doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s \ ++ docj.tmac-s docj-ditroff-s docj-nroff-s + tmac_s_prefix= + tmac_an_prefix= + tmac_wrap= +--- groff-1.18.1.orig/tmac/troffrc ++++ groff-1.18.1/tmac/troffrc +@@ -13,7 +13,9 @@ + .do ds troffrc!X100 X.tmac + .do ds troffrc!X100-12 X.tmac + .do ds troffrc!ascii tty.tmac ++.do ds troffrc!ascii8 tty.tmac + .do ds troffrc!latin1 tty.tmac ++.do ds troffrc!nippon tty.tmac + .do ds troffrc!utf8 tty.tmac + .do ds troffrc!cp1047 tty.tmac + .do ds troffrc!lj4 lj4.tmac +@@ -36,4 +38,7 @@ + .\" Load hyphenation patterns from `hyphen.us' (in the tmac directory). + .do hpf hyphen.us + . ++.\" for Japanese hack ++.if "\V[LANG]"ja_JP.eucJP" .do mso euc-jp.tmac ++. + .\" Don't let blank lines creep in here. +--- groff-1.18.1.orig/tmac/tty.tmac ++++ groff-1.18.1/tmac/tty.tmac +@@ -68,7 +68,7 @@ + .ie '\*(.T'cp1047' \ + . do mso cp1047.tmac + .el \ +-. if '\*(.T'latin1' \ ++. if !'\*(.T'ascii' \ + . do mso latin1.tmac + . + .\" If you want the character definitions in tty-char.tmac to be loaded +--- groff-1.18.1.orig/tmac/andocj.tmac ++++ groff-1.18.1/tmac/andocj.tmac +@@ -0,0 +1,12 @@ ++.\" Load either tmac.an or tmac.doc. ++.if !\n(.g .ab These macros require groff. ++.de Dd ++.rm Dd ++.do mso tmac.docj ++\\*(Dd\\ ++.. ++.de TH ++.rm TH ++.do mso tmac.an ++\\*(TH\\ ++.. +--- groff-1.18.1.orig/tmac/docj-ditroff ++++ groff-1.18.1/tmac/docj-ditroff +@@ -0,0 +1,305 @@ ++.\" Copyright (c) 1991 The Regents of the University of California. ++.\" All rights reserved. ++.\" ++.\" Redistribution and use in source and binary forms, with or without ++.\" modification, are permitted provided that the following conditions ++.\" are met: ++.\" 1. Redistributions of source code must retain the above copyright ++.\" notice, this list of conditions and the following disclaimer. ++.\" 2. Redistributions in binary form must reproduce the above copyright ++.\" notice, this list of conditions and the following disclaimer in the ++.\" documentation and/or other materials provided with the distribution. ++.\" 3. All advertising materials mentioning features or use of this software ++.\" must display the following acknowledgement: ++.\" This product includes software developed by the University of ++.\" California, Berkeley and its contributors. ++.\" 4. Neither the name of the University nor the names of its contributors ++.\" may be used to endorse or promote products derived from this software ++.\" without specific prior written permission. ++.\" ++.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ++.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ++.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++.\" SUCH DAMAGE. ++.\" ++.\" @(#)doc-ditroff 5.8 (Berkeley) 8/5/91 ++.\" ++.\" tmac.mdoc-ditroff ++.if \n(.g .if !rC .nr C 0 ++.ds aD \fI\s10 ++.ds aR \f(CO\s10 ++.ds cM \f(CB\s10 ++.ds dF \fR\s10 ++.ds eM \fI\s10 ++.ds eR \fC\s10 ++.ds eV \fC\s10 ++.ds fA \f(CO\s10 ++.ds fD \f(CB\s10 ++.ds fL \f(CB\s10 ++.ds fN \f(CB\s10 ++.ds fP \fP\s0 ++.ds fS \s0 ++.ds fT \f(CO\s10 ++.ds Hs \fR\s10 ++.ds iC \f(CB\s10 ++.ds lI \fC ++.ds lP \fR\|(\|\fP\s10 ++.ds lp \fR(\fP\s10 ++.ds rP \fR\|)\|\fP\s10 ++.ds rp \fR)\fP\s10 ++.ds lB \fR\^[\^\fP\s10 ++.ds rB \fR\^]\fP\s10 ++.ds mL \fB\s10 ++.ds nM \f(CB\s10 ++.ds nO \fR\s10 ++.ds nT \s0 ++.ds pA \fC\s10 ++.ds Pu \fR{\ .\ ,\ :\ ;\ (\ )\ [\ ]\ \fR} ++.ds rA \fR\s10 ++.ds rT \f(CO\s10 ++.ds sH \fB\s10 ++.ds sP \s0 ++.ds sY \fB\s10 ++.ds sX \fR\s10 ++.ds tF \fR ++.ds tN \s9 ++.ds vA \fI\s10 ++.ds Vs \fR\s10 ++.ds vT \f(CB\s10 ++.ds xR \fC\s10 ++.tr *\(** ++.nr sI \w\fC,u*5 ++.nr Ti \n(sIu ++.nr Pp .5v ++.ds lS \0 ++.nr lS \w'\0'u ++.nr dI 6n ++.de pL ++.nr Hm .5i ++.nr Fm .5i ++.nr ll 6.5i ++.ll 6.5i ++.nr lt 6.5i ++.lt 6.5i ++.nr po 1i ++.po 1.i ++.nr dV .5v ++.. ++.ds <= \(<= ++.ds >= \(>= ++.ie \n(.g \{\ ++. ds Lq \(lq ++. ds Rq \(rq ++.\} ++.el \{\ ++. ds Lq \&`` ++. ds Rq \&'' ++.\} ++.ds ua \(ua ++.ds aa \(aa ++.ds ga \(ga ++.ds sR \&' ++.ds sL \&` ++.ds q \&" ++.ds Pi \(*p ++.ds Ne \(!= ++.ds Le \(<= ++.ds Ge \(>= ++.ds Lt < ++.ds Gt > ++.ds Pm \(+- ++.ds If \(if ++.ds Na \fINaN\fP ++.ds Ba \fR\&|\fP ++.nr gX 0 ++.de hK ++.ds hT \\*(dT ++.if !"\\*(cH"Null" \{\ ++. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|) ++. el .as hT \\|(\\|\\*(cH\\|) ++.\} ++.if "\\*(cH"Null" \{\ ++. if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|) ++.\} ++.wh 0 hM ++.wh -1.25i fM ++.nr nL \\n(nl ++.ie \\n(gX==1 \{\ ++. rm n1 ++. bp ++.\} ++.el \{\ ++' bp ++.\} ++.if \\n(nL>0 \{\ ++. if !\\nC \{\ ++. nr % 1 ++. \} ++.\} ++.nr gX 0 ++.em lM ++.. ++.nr fW \w\fC0 ++.de sW ++.nr sW \w\fC\\$1 ++.ie \\n(sW>=\\n(fW \{\ ++. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 ++. el .nr sW \\n(sW/\\n(fW ++.\} ++.el \{\ ++. ie \\n(sW>0 .nr sW 1 ++. el .nr sW 0 ++.\} ++.. ++.de aW ++.nr sW \w\fC\\*(A\\$1 ++.ie \\n(sW>=\\n(fW \{\ ++. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 ++. el .nr sW \\n(sW/\\n(fW ++.\} ++.el \{\ ++. ie \\n(sW>0 .nr sW 1 ++. el .nr sW 0 ++.\} ++.. ++.de Ql ++.if \\n(aC==0 \{\ ++. ds mN Ql ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. nr fV \\n(.$ ++. fV ++.\} ++.nr aP \\n(aP+1 ++.aW \\n(aP ++.nr aP \\n(aP-1 ++.if \\n(sW>2 .Li ++.if \\n(sW<=2 \{\ ++. if (\\n(aP>0) \{\ ++. ds A\\n(aP Li ++. nr aP \\n(aP -1 ++. \} ++. if (\\n(aP==0) \{\ ++. rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 ++. rm S1 S2 S3 S4 S5 S6 S7 S8 S9 ++. rn A8 A9 ++. rn A7 A8 ++. rn A6 A7 ++. rn A5 A6 ++. rn A4 A5 ++. rn A3 A4 ++. rn A2 A3 ++. rn A1 A2 ++. ds A1 Li ++. nr fV \\n(aC+1 ++. nr aC 0 ++. fV ++. \} ++. ds qL \&\\*(sL ++. ds qR \&\\*(sR ++. En ++.\} ++.. ++.de Sh ++.nr nS 0 ++.nr sE 0 ++.nr iS 0 ++'ad ++.ie "\\$1"NAME" \{\ ++. hK ++' in 0 ++.\} ++.el \{\ ++. ie "\\$1"名前" \{\ ++. hK ++' in 0 ++. \} ++. el \{\ ++. ie "\\$1"名称" \{\ ++. hK ++' in 0 ++. \} ++. el \{\ ++. nr nS 0 ++. nr nA 0 ++. nr nF 0 ++. nr nT 0 ++. nr nY 0 ++. nr oT 0 ++. if "\\$1"SYNOPSIS" \{\ ++. na ++. nr nS 1 ++. \} ++. if "\\$1"書式" \{\ ++. na ++. nr nS 1 ++. \} ++. if "\\$1"DESCRIPTION" \{\ ++. nr fY 0 ++. nr fZ 0 ++. nr fB 0 ++. nr Fb 0 ++. ds Fb ++. \} ++. if "\\$1"説明" \{\ ++. nr fY 0 ++. nr fZ 0 ++. nr fB 0 ++. nr Fb 0 ++. ds Fb ++. \} ++. if "\\$1"解説" \{\ ++. nr fY 0 ++. nr fZ 0 ++. nr fB 0 ++. nr Fb 0 ++. ds Fb ++. \} ++. if "\\$1"SEE" \{\ ++. nr nA 1 ++. na ++. \} ++. if "\\$1"関連項目" \{\ ++. nr nA 1 ++. na ++. \} ++. if "\\$1"FILES" .nr nF 1 ++. if "\\$1"ファイル" .nr nF 1 ++. if "\\$1"関連ファイル" .nr nF 1 ++. if "\\$1"STANDARDS" .nr nT 1 ++. if "\\$1"準拠" .nr nT 1 ++. if "\\$1"規格" .nr nT 1 ++. if "\\$1"AUTHORS" .nr nY 1 ++. if "\\$1"著者" .nr nY 1 ++. if "\\$1"作者" .nr nY 1 ++. if "\\$1"SEE" .nr sE 1 ++. if "\\$1"関連項目" .nr sE 1 ++. in 0 ++. nr aN 0 ++. \} ++. \} ++.\} ++.pL ++'sp ++.ns ++.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ++.if !\\n(cR .ne 3 ++'fi ++\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 ++\&\fP\s0\& ++.in \\n(.iu+\\n(Tiu ++.ns ++.. +--- groff-1.18.1.orig/tmac/docj-nroff ++++ groff-1.18.1/tmac/docj-nroff +@@ -0,0 +1,247 @@ ++.\" Copyright (c) 1991 The Regents of the University of California. ++.\" All rights reserved. ++.\" ++.\" Redistribution and use in source and binary forms, with or without ++.\" modification, are permitted provided that the following conditions ++.\" are met: ++.\" 1. Redistributions of source code must retain the above copyright ++.\" notice, this list of conditions and the following disclaimer. ++.\" 2. Redistributions in binary form must reproduce the above copyright ++.\" notice, this list of conditions and the following disclaimer in the ++.\" documentation and/or other materials provided with the distribution. ++.\" 3. All advertising materials mentioning features or use of this software ++.\" must display the following acknowledgement: ++.\" This product includes software developed by the University of ++.\" California, Berkeley and its contributors. ++.\" 4. Neither the name of the University nor the names of its contributors ++.\" may be used to endorse or promote products derived from this software ++.\" without specific prior written permission. ++.\" ++.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ++.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ++.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++.\" SUCH DAMAGE. ++.\" ++.\" @(#)doc-nroff 5.6 (Berkeley) 8/5/91 ++.\" ++.\" tmac.mdoc-nroff ++.ds aD \fI ++.ds aR \fI ++.ds cM \fB ++.ds dF \fR ++.ds eM \fI ++.ds eR \fR ++.ds eV \fR ++.ds fA \fI ++.ds fD \fB ++.ds fL \fB ++.ds fN \fB ++.ds fP \fP ++.ds fS ++.ds fT \fI ++.ds Hs \fR ++.ds iC \fB ++.ds lI \fR ++.ds lP \fR\|(\fP ++.ds rP \fR\|)\fP ++.ds lp \fR\|(\fP ++.ds rp \fR\|)\fP ++.ds lB \fR\|[\|\fP ++.ds rB \fR\|]\fP ++.ds mL \fB ++.ds nM \fB ++.ds nO \fR ++.ds pA \fI ++.ds Pu {\ .\ ,\ ;\ :\ (\ )\ [\ ]} ++.ds rA \fR ++.ds rT \fI ++.ds sH \fB ++.ds sP ++.ds sY \fB ++.ds sX \fI ++.ds tF \fR ++.ds tN ++.ds vA \fI ++.ds Vs \fR ++.ds vT \fB ++.ds xR \fR ++.nr sI .5i ++.nr Ti .5i ++.nr cR 1 ++.nr Pp 1v ++.ds lS \0\0 ++.nr lS \w'\0\0'u ++.nr dI 6n ++.de pL ++.ie \\n(cR .nr Hm 0 ++.el .nr Hm .5i ++.nr Fm .5i ++.nr ll 78n ++.ll 78n ++.nr lt 78n ++.lt 78n ++.nr po 0i ++.po 0i ++.nr dV 1v ++.ad l ++.na ++.. ++.ds <= \&<\&= ++.ds >= \&>\&= ++.ds Rq '' ++.ds Lq `` ++.ds ua ^ ++.ds aa \' ++.ds ga \` ++.ds sL ` ++.ds sR ' ++.ds q \&" ++.ds Pi pi ++.ds Ne != ++.ds Le <= ++.ds Ge >= ++.ds Lt < ++.ds Gt > ++.ds Pm +- ++.ds If infinity ++.ds Na \fINaN\fP ++.ds Ba \fR\&|\fP ++ ++.de hK ++.nr % 1 ++.ds hT \\*(dT ++.if !"\\*(cH"Null" \{\ ++. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|) ++. el .as hT \\|(\\|\\*(cH\\|) ++.\} ++.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|) ++.ie \\n(cR \{\ ++. hM ++. wh -1v fM ++.\} ++.el \{\ ++. wh 0 hM ++. wh -1.167i fM ++.\} ++.if \\n(nl==0:\\n(nl==-1 'bp ++.em lM ++.. ++.nr fW \w'0' ++.de sW ++.nr sW \w\\$1 ++.ie \\n(sW>=\\n(fW \{\ ++. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 ++. el .nr sW \\n(sW/\\n(fW ++.\} ++.el .nr sW 0 ++.. ++.de aW ++.nr sW \w\\*(A\\$1 ++.ie \\n(sW>=\\n(fW \{\ ++. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 ++. el .nr sW \\n(sW/\\n(fW ++.\} ++.el .nr sW 0 ++.. ++.de Ql ++.if \\n(aC==0 \{\ ++. ds mN Ql ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++.\} ++.ds qL \&\\*(sL ++.ds qR \&\\*(sR ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.de Sh ++.nr nS 0 ++.nr sE 0 ++.nr iS 0 ++.ie "\\$1"NAME" \{\ ++. hK ++' in 0 ++.\} ++.el \{\ ++. ie "\\$1"名前" \{\ ++. hK ++' in 0 ++. \} ++. el \{\ ++. ie "\\$1"名称" \{\ ++. hK ++' in 0 ++. \} ++. el \{\ ++. nr nS 0 ++. nr nA 0 ++. nr nF 0 ++. nr nT 0 ++. nr nY 0 ++. nr aN 0 ++. nr oT 0 ++. if "\\$1"SEE" .nr nA 1 ++. if "\\$1"関連項目" .nr nA 1 ++. if "\\$1"FILES" .nr nF 1 ++. if "\\$1"ファイル" .nr nF 1 ++. if "\\$1"関連ファイル" .nr nF 1 ++. if "\\$1"STANDARDS" .nr nT 1 ++. if "\\$1"準拠" .nr nT 1 ++. if "\\$1"規格" .nr nT 1 ++. if "\\$1"SYNOPSIS" .nr nS 1 ++. if "\\$1"書式" .nr nS 1 ++. if "\\$1"DESCRIPTION" \{\ ++. rr fB ++. rr Fb ++. ds Fb ++. nr fY 0 ++. nr fZ 0 ++. \} ++. if "\\$1"説明" \{\ ++. rr fB ++. rr Fb ++. ds Fb ++. nr fY 0 ++. nr fZ 0 ++. \} ++. if "\\$1"解説" \{\ ++. rr fB ++. rr Fb ++. ds Fb ++. nr fY 0 ++. nr fZ 0 ++. \} ++. if "\\$1"AUTHORS" .nr nY 1 ++. if "\\$1"著者" .nr nY 1 ++. if "\\$1"作者" .nr nY 1 ++. in 0 ++. \} ++. \} ++.\} ++.pL ++'sp ++.ns ++.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ++.if !\\n(cR .ne 3 ++'fi ++\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 ++\&\fP\s0\& ++.in \\n(.iu+\\n(Tiu ++.if "\\$1"SEE" .nr sE 1 ++.ns ++.. +--- groff-1.18.1.orig/tmac/docj.tmac ++++ groff-1.18.1/tmac/docj.tmac +@@ -0,0 +1,3427 @@ ++.\" Copyright (c) 1991 The Regents of the University of California. ++.\" All rights reserved. ++.\" ++.\" Redistribution and use in source and binary forms, with or without ++.\" modification, are permitted provided that the following conditions ++.\" are met: ++.\" 1. Redistributions of source code must retain the above copyright ++.\" notice, this list of conditions and the following disclaimer. ++.\" 2. Redistributions in binary form must reproduce the above copyright ++.\" notice, this list of conditions and the following disclaimer in the ++.\" documentation and/or other materials provided with the distribution. ++.\" 3. All advertising materials mentioning features or use of this software ++.\" must display the following acknowledgement: ++.\" This product includes software developed by the University of ++.\" California, Berkeley and its contributors. ++.\" 4. Neither the name of the University nor the names of its contributors ++.\" may be used to endorse or promote products derived from this software ++.\" without specific prior written permission. ++.\" ++.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ++.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ++.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++.\" SUCH DAMAGE. ++.\" ++.\" @(#)doc 5.8 (Berkeley) 8/5/91 ++.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be ++.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename ++.\" `tmac.doc-common' would be too long); when using groff, the doc-* files ++.\" are loaded using the `mso' request. ++.\" ++.\" .mdoc-parse - attempt to parse troff request arguments ++.\" %beginstrip% ++.if \n(.g \{\ ++.cp 0 ++.ftr C CR ++.\} ++.if \n(.g .ig ++.de sO ++.so /usr/share/tmac/\\$1 ++.. ++.if !\n(.g .ig ++.de sO ++.mso mdoc/\\$1 ++.. ++.if t \{\ ++. sO docj-ditroff ++.\} ++.if n \{\ ++. sO docj-nroff ++.\} ++.sO doc-common ++.sO doc-syms ++.\" NS Db macro - start/stop DEBUG MODE ++.\" NS Db register DEBUG MODE ++.\" NS iN register DEBUG MODE (inline if 1, to stderr if 0 (default)) ++.nr Db 0 ++.de Db ++.ie \\n(.$==0 \{\ ++. ie \\n(Db==0 \{\ ++.tm DEBUGGING ON ++. nr Db 1 ++. \} ++. el \{\ ++.tm DEBUGGING OFF ++. nr Db 0 ++. \} ++.\} ++.el \{\ ++. if "\\$1"on" \{\ ++.tm DEBUGGING ON ++. nr Db 1 ++. \} ++. if "\\$1"off" \{\ ++.tm DEBUGGING OFF ++. nr Db 0 ++. \} ++.\} ++.. ++.\" NS aV macro - parse argument vector (recursive) (.aV arg ... ) ++.\" NS fV macro - parse argument vector (recursive) (.fV) ++.\" NS aC register argument counter (aV/fV) ++.\" NS fV register argument counter (must set to \\n(.$ prior to reuqest) (fV) ++.\" NS A[0-9] argument vector (aV/fV) ++.\" NS C[0-9] reg. arg type(1=macro, 2=arg, 3=punct-suf, 4=punct-pre) (aV/fV) ++.\" NS S[0-9] space vector (sV) ++.\" NS aP register argument pointer (aV) ++.\" NS yU local string used for debugging ++.\" NS iI local register (indent for inline debug mode) ++.\" NS mN name of calling request (set in each user requestable macro) ++.de aV ++.nr aC \\n(aC+1 ++.ie "\\$1"|" \{\ ++. if "\\*(mN"Op" .ds A\\n(aC \fR\\$1\fP ++. if "\\*(mN"Ar" .ds A\\n(aC \fR\\$1\fP ++. if "\\*(mN"Fl" .ds A\\n(aC \fR\\$1\fP ++. if "\\*(mN"Cm" .ds A\\n(aC \fR\\$1\fP ++. if "\\*(mN"It" .ds A\\n(aC \fR\\$1\fP ++.\} ++.el .ds A\\n(aC \\$1 ++.aU \\n(aC ++.nr C\\n(aC \\n(aT ++.s\\n(aT ++.if \\n(Db \{\ ++. if \\n(aT==1 .ds yU Executable ++. if \\n(aT==2 .ds yU String ++. if \\n(aT==3 .ds yU Closing Punctuation or suffix ++. if \\n(aT==4 .ds yU Opening Punctuation or prefix ++. if \\n(iN==1 \{\ ++. br ++. nr iI \\n(.iu ++. in -\\n(iIu ++. if \\n(aC==1 \{\ ++\&\fBDEBUG(argv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c ++. \} ++\&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW ++\&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU ++. \} ++. if \\n(iN==0 \{\ ++. if \\n(aC==1 \{\ ++. tm DEBUG(argv) MACRO: `.\\*(mN' Line #: \\n(.c ++. \} ++. tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW ++. tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU ++. \} ++.\} ++.ie \\n(.$==1 \{\ ++. nr aP 0 ++. ie \\n(dZ==1 \{\ ++. if \\n(oM>1 .as b1 \\*(S0 ++. \} ++. el \{\ ++. if \\n(oM>0 \{\ ++. if \\n(fC==0 .as b1 \\*(S0 ++. \} ++. \} ++. ds S0 \\*(S\\n(aC ++. if \\n(Db \{\ ++. if \\n(iN==1 \{\ ++\&MACRO REQUEST: \t.\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 ++. br ++. in \\n(iIu ++. \} ++. if \\n(iN==0 \{\ ++.tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 ++. \} ++. \} ++.\} ++.el .aV \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.de fV ++.nr aC \\n(aC+1 ++.if "\\*(A\\n(aC"|" \{\ ++. if "\\*(mN"Op" .ds A\\n(aC \fR\\*(A\\n(aC\fP ++. if "\\*(mN"Ar" .ds A\\n(aC \fR\\*(A\\n(aC\fP ++. if "\\*(mN"Fl" .ds A\\n(aC \fR\&\\*(A\\n(aC\fP ++. if "\\*(mN"Cm" .ds A\\n(aC \fR\\*(A\\n(aC\fP ++. if "\\*(mN"It" .ds A\\n(aC \fR\\*(A\\n(aC\fP ++.\} ++.aU \\n(aC ++.nr C\\n(aC \\n(aT ++.s\\n(aT ++.if \\n(Db \{\ ++. if \\n(aT==1 .ds yU Executable ++. if \\n(aT==2 .ds yU String ++. if \\n(aT==3 .ds yU Closing Punctuation or suffix ++. if \\n(aT==4 .ds yU Opening Punctuation or prefix ++. if \\n(iN==1 \{\ ++. br ++. nr iI \\n(.iu ++. in -\\n(iIu ++. if \\n(aC==1 \{\ ++\&\fBDEBUG(fargv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c ++. \} ++\&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW ++\&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU ++. \} ++. if \\n(iN==0 \{\ ++. if \\n(aC==1 \{\ ++. tm DEBUG(fargv) MACRO: `.\\*(mN' Line #: \\n(.c ++. \} ++. tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW ++. tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU ++. \} ++.\} ++.ie \\n(fV==1 \{\ ++. nr aP 0 ++. ie \\n(dZ==1 \{\ ++. if \\n(oM>1 .as b1 \\*(S0 ++. \} ++. el \{\ ++. if \\n(oM>0 \{\ ++. if \\n(fC==0 .as b1 \\*(S0 ++. \} ++. \} ++. ds S0 \\*(S\\n(aC ++. nr fV 0 ++. if \\n(Db \{\ ++. ie \\n(iN \{\ ++\&\tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 ++. br ++. in \\n(iIu ++. \} ++. el \{\ ++.tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 ++. \} ++. \} ++.\} ++.el \{\ ++. nr fV \\n(fV-1 ++. fV ++.\} ++.. ++.\" NS aX macro - stuff saved strings into `b1' (used by -diag list) ++.de aX ++.nr aP \\n(aP+1 ++.as b1 \&\\*(A\\n(aP ++.ie \\n(fV==1 \{\ ++. nr aP 0 ++. nr fV 0 ++.\} ++.el \{\ ++. as b1 \&\\*(sV ++. nr fV \\n(fV-1 ++. aX ++.\} ++.. ++.\" NS aI macro - append arg to arg vector: .aI [arg] [type] (used by .En only) ++.de aI ++.ie \\n(aC<9 \{\ ++. nr aC \\n(aC+1 ++. ds A\\n(aC \\$1 ++. nr C\\n(aC \\$2 ++. s\\$2 ++. ds xV S\\n(aC ++.\} ++.el \{\ ++. tm Usage: Too many arguments (maximum of 8 accepted) (#\\n(.c) ++. tm \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 ++.\} ++.. ++.\" ++.\" NS aZ macro - print buffer (pB) and clean up arg vectors (aY) ++.de aZ ++.pB ++.aY ++.. ++.\" NS aY macro - clean up arg vector ++.de aY ++.rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 ++.rm A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 ++.rm S1 S2 S3 S4 S5 S6 S7 S8 S9 ++.nr aC 0 ++.nr aP 0 ++.. ++.\" NS pB macro - test for end of vector (eol) (print b1 buffer or divert) ++.de pB ++.ie \\n(dZ==1 \{\ ++. if \\n(oM==1 \{\&\\*(b1 ++. rm S0 ++. ds b1 ++. \} ++. if \\n(oM==0 \{\ ++. x2 ++. \} ++.\} ++.el \{\ ++. ie \\n(oM==0 \{\&\\*(b1 ++. rm S0 ++. ds b1 ++. \} ++. el \{\ ++. if ((\\n(sM==1)&(\\n(tP==0)) \{\ ++. x1 ++. \} ++. \} ++.\} ++.hy ++.. ++.\" NS x1 macro - save buffer and divert if tP flag set ++.\" NS eB diversion string ++.\" NS b2 string save of buffer ++.\" NS lK register count of lines read from input file ++.de x1 ++.nr dZ \\n(dZ+1 ++.ds b2 \\*(b1 ++.ds b1 ++.nr lK \\n(.c ++.ev 2 ++.fi ++.di eB ++.. ++.\" ++.\" NS x2 macro - end diversion and print ++.\" NS b0 string local temporary ++.de x2 ++.br ++.di ++.ev ++.ie (\\n(.c-\\n(lK>1) \{\ ++. ds b0 \&\\*(eB\\ ++. ds b1 \\*(b2\\*(b0\\*(b1 ++.\} ++.el .ds b1 \\*(b2\\*(b1 ++\&\\*(b1 ++.rm eB b2 b0 b1 ++.nr dZ \\n(dZ-1 ++.. ++.\" NS Fl macro - flags (appends - and prints flags) ++.\" NS cF register save current font ++.\" NS cZ register save current font size ++.de Fl ++.as b1 \&\\*(fL ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. as b1 \&\|\-\|\fP\s0 ++. pB ++. \} ++. el \{\ ++. ds mN Fl ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>0 \{\ ++. ie (\\n(aC-\\n(aP)==0 \{\ ++. as b1 \&\|\-\fP\s0 ++. aZ ++. \} ++. el \{\ ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 \{\ ++. as b1 \&\|\-\fP\s0 ++. \\*(A\\n(aP ++. \} ++. el \{\ ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. if \\n(C\\n(aP==3 \{\ ++. as b1 \&\|\-\| ++. \} ++. fR ++. \} ++. \} ++.\} ++.. ++.\" ++.\" NS fR macro - Fl flag recursion routine (special handling) ++.\" NS jM local register ++.\" NS jN local register ++.\" ++.de fR ++.hy 0 ++.nr jM \\n(C\\n(aP ++.ie \\n(jM==1 \{\ ++. as b1 \&\fP\s0 ++. \\*(A\\n(aP ++.\} ++.el \{\ ++. nr jN \\n(aP ++. ie \\n(jM==2 \{\ ++. ie !"\\*(A\\n(aP"\\*(Ba" \{\ ++. ie !"\\*(A\\n(aP"\fR|\fP" \{\ ++. ie "\\*(A\\n(aP"-" .as b1 \&\|\-\^\-\| ++. el .as b1 \&\|\-\\*(A\\n(aP ++. \} ++. el .as b1 \&\\*(A\\n(aP ++. \} ++. el .as b1 \&\\*(A\\n(aP ++. \} ++. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0 ++. ie \\n(aC==\\n(aP \{\ ++. if \\n(jM==4 .as b1 \&\|\- ++. as b1 \&\fP\s0 ++. aZ ++. \} ++. el \{\ ++. nr aP \\n(aP+1 ++. ie ((\\n(C\\n(aP==3)&(\\n(C\\n(jN==4)) .as b1 \&\|\- ++. el .as b1 \&\\*(S\\n(jN ++. fR \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.rr jM jN ++.. ++.\" ++.\" NS nR macro - general name recursion routine ++.\" NS jM local register ++.\" NS jN local register ++.de nR ++.hy 0 ++.nr jM \\n(C\\n(aP ++.ie \\n(jM==1 \{\ ++. as b1 \&\f\\n(cF\s\\n(cZ ++. \\*(A\\n(aP ++.\} ++.el \{\ ++. nr jN \\n(aP ++. ie \\n(jM==2 .as b1 \&\\*(A\\n(aP ++. el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0 ++. ie \\n(aC==\\n(aP \{\ ++. as b1 \&\f\\n(cF\s\\n(cZ ++. aZ ++. \} ++. el \{\ ++. nr aP \\n(aP+1 ++. as b1 \&\\*(S\\n(jN ++. nR ++. \} ++.\} ++.rr jM jN ++.. ++.\" NS Ar macro - command line `argument' macro ++.\" ++.de Ar ++.as b1 \\*(aR ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. as b1 file\ ...\fP\s0 ++. pB ++. \} ++. el \{\ ++. ds mN Ar ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>0 \{\ ++. ie (\\n(aC-\\n(aP)==0 \{\ ++. as b1 \&file\ ...\fP\s0 ++. aZ ++. \} ++. el \{\ ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 \{\ ++. as b1 \&file\ ...\fP\s0 ++. \\*(A\\n(aP ++. \} ++. el \{\ ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. if \\n(C\\n(aP==3 \{\ ++. as b1 \&file\ ... ++. \} ++. nR ++. \} ++. \} ++.\} ++.. ++.\" NS Ad macro - Addresses ++.de Ad ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Ad address ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Ad ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(aD ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Cd macro - Config declaration (for section 4 SYNOPSIS) (not callable) ++.\" needs work - not very translatable ++.de Cd ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Cd Configuration file declaration (#\\n(.c) ++. el \{\ ++. ds mN Cd ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.br ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(nM ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. ie \\n(nS \{\ ++. if "\\*(mN"Cd" \{\ ++. rs ++. ie \\n(nS>1 .br ++. el \{\ ++. if \\n(iS==0 .nr iS \\n(Dsu ++. \} ++. in +\\n(iSu ++. ti -\\n(iSu ++. nr nS \\n(nS+1 ++. \} ++. nR ++. in -\\n(iSu ++. \} ++. el .nR ++.\} ++.. ++.\" NS Cm macro - Interactive command modifier (flag) ++.de Cm ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Cm Interactive command modifier ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Cm ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(cM ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Dv macro - define variable ++.de Dv ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Dv define_variable ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Dv ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(eR ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Em macro - Emphasis ++.de Em ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. tm Usage: .Em text ... \\*(Pu (#\\n(.c) ++. \} ++. el \{\ ++. ds mN Em ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(eM ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Er macro - Errnotype ++.de Er ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Er ERRNOTYPE ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Er ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(eR ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Ev macro - Environment variable ++.de Ev ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Ev ENVIRONMENT_VARIABLE ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Ev ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(eV ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Fd macro - function declaration - not callable (& no err check) ++.\" NS fD register subroutine test (in synopsis only) ++.\" NS fY register subroutine count (in synopsis only) (fortran only) ++.\" NS fZ register also subroutine count (in synopsis only) ++.de Fd ++.ds mN Fd ++.if \\n(nS>0 \{\ ++.\" if a variable type was the last thing given, want vertical space ++. if \\n(fX>0 \{\ ++. Pp ++. nr fX 0 ++. \} ++.\" if a subroutine was the last thing given, want vertical space ++. if \\n(fZ>0 \{\ ++. ie \\n(fD==0 \{\ ++. Pp ++. rs ++. \} ++. el .br ++. \} ++. nr fD \\n(fD+1 ++.\} ++.nr cF \\n(.f ++.nr cZ \\n(.s ++\&\\*(fD\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.br ++.ft \\n(cF ++.fs \\n(cZ ++.. ++.\" NS Fr macro - function return value - not callable (at the moment) ++.de Fr ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Fr Function_return_value... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Fr ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(aR ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Ic macro - Interactive command ++.de Ic ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Ic Interactive command ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Ic ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(iC ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Li macro - literals ++.de Li ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage .Li argument ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Li ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(lI ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Or macro - Pipe symbol (OR) ++.de Or ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Or ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Or ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(iC ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Ms macro - Math symbol ++.de Ms ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Ms Math symbol ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Ms ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(sY ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Nm macro - Name of command or page topic ++.\" NS n1 string - save first invocation of .Nm ++.\" NS iS register - indent second command line in a synopsis ++.de Nm ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. ie "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c) ++. el \&\\*(nM\\*(n1\fP\s0 ++. \} ++. el \{\ ++. ds mN Nm ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>0 \{\ ++. ie \\n(aC==\\n(aP \{\ ++. as b1 \&\\*(nM\\*(n1\fP\s0 ++. aZ ++. \} ++. el \{\ ++. as b1 \\*(nM ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 \{\ ++. as b1 \&\\*(n1\fP\s0 ++. \\*(A\\n(aP ++. \} ++. el \{\ ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. if \\n(nS \{\ ++. if "\\*(mN"Nm" \{\ ++. rs ++. in -\\n(iSu ++. ie \\n(nS>1 .br ++. el \{\ ++. if \\n(iS==0 \{\ ++. sw \\$1 ++. nr iS ((\\n(sWu+1)*\\n(fW)u ++. \} ++. \} ++. in +\\n(iSu ++. ti -\\n(iSu ++. nr nS \\n(nS+1 ++. \} ++. \} ++. if "\\*(n1"" .ds n1 \\*(A\\n(aP ++. nR ++. \} ++. \} ++.\} ++.. ++.\" NS Pa macro - Pathname ++.de Pa ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 \&\\*(pA~\fP\s0 ++. el \{\ ++. ds mN Pa ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(pA ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Sy macro - Symbolics ++.de Sy ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Sy symbolic_text ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Sy ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(sY ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Tn macro - Trade Name Macro ++.de Tn ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Tn ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(tN\\*(tF ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS nN macro - Trade Name Macro for inside of reference ++.de nN ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Tn ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(tN ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS Va macro - variable name macro ++.de Va ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Va variable_name(s) ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Va ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. as b1 \\*(vA ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" ++.\" NS No macro - Normal text macro (default text style if mess up) ++.de No ++.as b1 \\*(nO ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .No must be called with arguments (#\\n(.c) ++. el \{\ ++. ds mN No ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 \{\ ++. \\*(A\\n(aP ++. \} ++. el \{\ ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++. \} ++.\} ++.. ++.\"------------------------------------------------------------------------ ++.\" NS Op macro - Option Expression ++.de Op ++.if \\n(aC==0 \{\ ++. ds mN Op ++.\} ++.\" .ds qL \&\\*(lO ++.\" .ds qR \&\\*(rO ++.ds qL \&\\*(lB ++.ds qR \&\\*(rB ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ++.. ++.\" NS Aq macro - Enclose string in angle brackets ++.de Aq ++.if \\n(aC==0 .ds mN Aq ++.ds qL \&< ++.ds qR \&> ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Bq macro - Enclose string in square brackets ++.de Bq ++.if \\n(aC==0 .ds mN Bq ++.ds qL \&\\*(lB ++.ds qR \&\\*(rB ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Dq macro - Enclose string in double quotes ++.de Dq ++.if \\n(aC==0 .ds mN Dq ++.ds qL \&\\*(Lq ++.ds qR \&\\*(Rq ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Eq macro - Enclose string in double quotes ++.de Eq ++.if \\n(aC==0 .ds mN Eq ++.ds qL \\$1 ++.ds qR \\$2 ++.En \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Pq macro - Enclose string in parenthesis ++.de Pq ++.if \\n(aC==0 .ds mN Pq ++.ds qL \&\\*(lP ++.ds qR \&\\*(rP ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Ql macro - Quoted literal is in file mdocj-[dit|n|g]roff (too large ++.\" an if-else to carry along recursively for `if n ...') ++.\" ++.\" NS Sq macro - Enclose string in single quotes ++.de Qq ++.if \\n(aC==0 .ds mN Qq ++.ds qL \&\\*q ++.ds qR \&\\*q ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Sq macro - Enclose string in single quotes ++.de Sq ++.if \\n(aC==0 .ds mN Sq ++.ds qL \&\\*(sL ++.ds qR \&\\*(sR ++.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" ++.\" NS Es macro - Set up strings for .En call ++.de Es ++.if \\n(aC==0 \{\ ++. ie \\n(.$>2 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. el \{\ ++. ds qL \\$1 ++. ds qR \\$2 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. ds qL \\*(A\\n(aP ++. nr aP \\n(aP+1 ++. ds qR \\*(A\\n(aP ++. ie \\n(aC>\\n(aP .c\\n(C\\n(aP ++. el .aZ ++.\} ++.. ++.\" .tm En beg arg(A[\\n(aP])==\\*(A\\n(aP; ++.\" .tm En oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC ++.\" NS En macro - Enclose string with given args (eg [ and ] etc) ++.\" NS qL string variable set by calling macro ++.\" NS qR string variable set by calling macro ++.\" NS aJ register (for vR) ++.de En ++.ie \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. as b1 \&\\*(qL\\*(qR ++. pB ++. \} ++. el \{\ ++.\". as mN (En) ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. as b1 \&\\*(qL ++. \} ++.\} ++.el \{\ ++. as b1 \&\\*(qL ++.\} ++.if \\n(aC>0 \{\ ++. ie (\\n(aC-\\n(aP)==0 \{\ ++. as b1 \&\\*(qR ++. aZ ++. \} ++. el \{\ ++. ie \\n(C\\n(aC==3 \{\ ++. nr aJ \\n(aC-1 ++. vR ++. nr aJ \\n(aJ+1 ++. ds A\\n(aJ \&\\*(qR\\*(A\\n(aJ ++. nr aJ 0 ++. \} ++. el .aI \&\\*(qR 3 ++. nr aP \\n(aP+1 ++. if \\n(C\\n(aP==1 .\\*(A\\n(aP ++. if \\n(C\\n(aP>1 \{\ ++. nr aP \\n(aP-1 ++. No ++. \} ++. \} ++.\} ++.. ++.\" NS vR macro - vector routine (for En, trace backwards past trail punct) ++.de vR ++.if \\n(C\\n(aJ==3 \{\ ++. nr aJ \\n(aJ-1 ++. vR ++.\} ++.. ++.\"------------------------------------------------------------------------ ++.\" NS Ao macro - Angle open ++.de Ao ++.if \\n(aC==0 .ds mN Ao ++.ds qL \&< ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Ac macro - Angle close ++.de Ac ++.if \\n(aC==0 .ds mN Ac ++.ds qR \&> ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Bo macro - Bracket open ++.de Bo ++.if \\n(aC==0 .ds mN Bo ++.ds qL \&[ ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Bc macro - Bracket close ++.de Bc ++.if \\n(aC==0 .ds mN Bc ++.ds qR \&] ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Do macro - Double Quote open ++.de Do ++.if \\n(aC==0 .ds mN Do ++.ds qL \&\\*(Lq ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Dc macro - Double Quote close ++.de Dc ++.if \\n(aC==0 .ds mN Dc ++.ds qR \&\\*(Rq ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Eo macro - Enclose open ++.de Eo ++.if \\n(aC==0 .ds mN Eo ++.ds qL \\$1 ++.eO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Ec macro - Enclose close ++.de Ec ++.if \\n(aC==0 .ds mN Ec ++.ds qR \\$1 ++.eC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Oo macro - Option open ++.de Oo ++.if \\n(aC==0 .ds mN Oo ++.ds qL \&[ ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Oc macro - Option close ++.de Oc ++.if \\n(aC==0 .ds mN Oc ++.ds qR \&] ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Po macro - Parenthesis open ++.de Po ++.if \\n(aC==0 .ds mN Po ++.ds qL \&( ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Pc macro - Parenthesis close ++.de Pc ++.if \\n(aC==0 .ds mN Pc ++.ds qR \&) ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Qo macro - Straight Double Quote open ++.de Qo ++.if \\n(aC==0 .ds mN Qo ++.ds qL \&\\*q ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Qc macro - Straight Double Quote close ++.de Qc ++.if \\n(aC==0 .ds mN Qc ++.ds qR \&\\*q ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS So macro - Single Quote open ++.de So ++.if \\n(aC==0 .ds mN So ++.ds qL \&\\*(sL ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Sc macro - Single Quote close ++.de Sc ++.if \\n(aC==0 .ds mN Sc ++.ds qR \&\\*(sR ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Xo macro - Extend open (continue) ++.de Xo ++.if \\n(aC==0 .ds mN Xo ++.\" .nr mN 1 ++.ds qL ++.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS Xe macro - Extend close (end) ++.de Xc ++.\" .nr mN 0 ++.if \\n(aC==0 .ds mN Xc ++.ds qR ++.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS eO macro - enclose string open ++.\" NS oM register (extension possible) ++.de eO ++.nr oM \\n(oM+1 ++.\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ; ++.ie \\n(aC==0 \{\ ++. ie \\n(.$>0 \{\ ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. as b1 \\*(qL ++. \} ++. el \{\ ++. as b1 \\*(qL ++. if (\\n(dZ==0)&(\\n(sM==1) \{\ ++. nr dZ \\n(dZ+1 ++. ds b2 \\*(b1 ++. ds b1 ++. nr lK \\n(.c ++. ev 2 ++. fi ++. di eB ++. \} ++. \} ++.\} ++.el \{\ ++. as b1 \\*(qL ++.\} ++.ie \\n(aC>0 \{\ ++. if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 .\\*(A\\n(aP ++. el \{\ ++. nr aP \\n(aP-1 ++. No ++. \} ++. \} ++. if \\n(aC==\\n(aP \{\ ++. if \\n(tP==1 \{\ ++.\" .tm SETTING Xt!!! ++. nr Xt 1 ++. \} ++.\".\" . ds S0 ++.\"CHANGED ds S0 \\*(iV ++. aY ++. \} ++.\} ++.el \{\ ++. if \\n(oM>1 .as b1 \\*(sV ++.\} ++.. ++.\" ++.\" NS eC macro - enclose string close ++.\" NS aa local register ++.de eC ++.nr oM \\n(oM-1 ++.\" tm eC last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ; ++.as b1 \\*(qR ++.if \\n(aC==0 \{\ ++. ie \\n(.$>0 \{\ ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++. el \{\ ++. ie "\\*(xB"" \{\ ++. pB ++. \} ++. el \{\ ++. pB ++.\\*(L\\n(lC ++. nr Xt 0 ++. ds xB ++. \} ++. \} ++.\} ++.if \\n(aC>0 \{\ ++. ie \\n(aC==\\n(aP \{\ ++. ie \\n(oM==0 \{\ ++. aZ ++. \} ++. el .aY ++. \} ++. el \{\ ++. nr aa \\n(aP+1 ++. if \\n(C\\n(aa==2 .as b1 \\*(S\\n(aC ++.\" tm CURRENT arg (aP==\\*(A\\n(aP and ap+1==\\*(A\\n(aa) tP==\\n(tP Xt==\\n(Xt ++. rr aa ++. if \\n(tP>0 \{\ ++.\" tm UNSETTING Xt==\\n(Xt!!!! ++. if \\n(Xt>0 .nr Xt \\n(Xt-1 ++.\" tm NOW Xt==\\n(Xt!!!! ++. \} ++. No ++. \} ++.\} ++.. ++.\"------------------------------------------------------------------------ ++.\" NS Pf macro - Prefix (calls .pF) ++.de Pf ++.if \\n(aC==0 .ds mN Pf ++.ds qL \&\\$1 ++.pF \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" NS pF macro - Prefix (for prefixing open quotes, brackets etc) ++.de pF ++.ie \\n(aC==0 \{\ ++. as b1 \&\\*(qL ++. ie \\n(.$<2 \{\ ++. tm Warning: Missing arguments - prefix .Pf) ++. pB ++. \} ++. el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.\} ++.el \{\ ++. ie (\\n(aC-\\n(aP)>1 \{\ ++. nr aP \\n(aP+1 ++. as b1 \&\\*(A\\n(aP ++. \} ++. el .tm Warning: .Pf: trailing prefix (#\\n(.c) ++.\} ++.if \\n(aC>0 \{\ ++. ie (\\n(aC-\\n(aP)==0 .aZ ++. el \{\ ++. nr aP \\n(aP+1 ++. c\\n(C\\n(aP ++. \} ++.\} ++.. ++.\" NS Ns macro - remove space (space remove done by .aV or .fV) ++.de Ns ++.if \\n(aC==0 \{\ ++. ds mN Ns ++. ie \\n(.$>0 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. el .tm Usage: .Ns must be called with arguments (#\\n(.c) ++.\} ++.No ++.. ++.de Ap ++.if \\n(aC==0 \{\ ++. ds mN Ap ++. tm Usage: Ap "cannot be first request on a line (no .Ap)" (#\\n(.c) ++.\} ++.as b1 \&' ++.No ++.. ++.\" NS Hv macro - Hard (unpaddable) Space vector ++.\" NS iV string inter-vector space ++.\" NS sV string inter-argument space ++.de Hv ++.ds iV \\*(sV ++.ds sV \\*(hV ++.. ++.\" NS Sv macro - Soft Space vector (troff limitation) ++.de Sv ++.ds sV \\*(iV ++.. ++.\" NS Tv macro - Tab Space vector ++.de Tv ++.ds sV \\*(tV ++.. ++.\" NS Sm macro - Space mode ++.\" NS sM register - default is one (space mode on) ++.nr sM 1 ++.de Sm ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm "Usage: .Sm [off | on]" (#\\n(.c) ++. el \{\ ++. ds mN Sm ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>0 \{\ ++. nr aP \\n(aP+1 ++. if "\\*(A\\n(aP"on" \{\ ++. ds sV \\*(iV ++. nr sM 1 ++. \} ++. if "\\*(A\\n(aP"off" \{\ ++. ds sV ++. rm S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 ++. nr sM 0 ++. \} ++. ie \\n(aC>\\n(aP \{\ ++. No ++. \} ++. el .aY ++.\} ++.. ++.\"------------------------------------------------------------------------ ++.\" Size and Argument type macros ++.\" NS aT macro - argument type ++.\" NS aU macro - argument type (same as .aT but uses A[1-9] strings ++.\" NS aT register argument type ++.if \n(.g \{\ ++.de aT ++.nr aT 0 ++.ie \\n(sW>2:(\A'\\$1'==0) \{\ ++. nr aT 2 ++.\} ++.el \{\ ++. if \\n(sW==1 \{\ ++. ie \\n(z\\$1>2 \{\ ++. nr aT \\n(z\\$1 ++. \} ++. el .nr aT 2 ++. \} ++. if \\n(sW==2 \{\ ++. ie \\n(\\$1 \{\ ++. nr aT 1 ++. \} ++. el .nr aT 2 ++. \} ++.\} ++.. ++.de aU ++.nr aT 0 ++.aW \\$1 ++.ie \\n(sW>2:(\A'\\*(A\\$1'==0) .nr aT 2 ++.el \{\ ++. if \\n(sW==1 \{\ ++. ie \\n(z\\*(A\\$1>2 \{\ ++. nr aT \\n(z\\*(A\\$1 ++. \} ++. el .nr aT 2 ++. \} ++. if \\n(sW==2 \{\ ++. ie (\\n(\\*(A\\$1) \{\ ++. nr aT 1 ++. \} ++. el .nr aT 2 ++. \} ++.\} ++.. ++.\} ++.if !\n(.g \{\ ++.de aT ++.nr aT 0 ++.ie \\n(sW>2 \{\ ++. nr aT 2 ++.\} ++.el \{\ ++. if \\n(sW==1 \{\ ++. ie \\n(z\\$1>2 \{\ ++. nr aT \\n(z\\$1 ++. \} ++. el .nr aT 2 ++. \} ++. if \\n(sW==2 \{\ ++. ie \\n(\\$1 \{\ ++. nr aT 1 ++. \} ++. el .nr aT 2 ++. \} ++.\} ++.. ++.de aU ++.nr aT 0 ++.aW \\$1 ++.ie \\n(sW>2 .nr aT 2 ++.el \{\ ++. if \\n(sW==1 \{\ ++. ie \\n(z\\*(A\\$1>2 \{\ ++. nr aT \\n(z\\*(A\\$1 ++. \} ++. el .nr aT 2 ++. \} ++. if \\n(sW==2 \{\ ++. ie (\\n(\\*(A\\$1) \{\ ++. nr aT 1 ++. \} ++. el .nr aT 2 ++. \} ++.\} ++.. ++.\} ++.\" NS s1 macro - set spacing for class type 1 ++.\" NS s2 macro - set spacing for class type 2 ++.\" NS s3 macro - set spacing for class type 3 ++.\" NS s1 macro - set spacing for class type 1 ++.\" NS s2 macro - set spacing for class type 2 ++.\" NS s3 macro - set spacing for class type 3 ++.\" NS s4 macro - set spacing for class type 4 ++.\" NS S[0-9] string spacing ++.\" NS xX local register ++.\" NS aa local register ++.de s0 ++.tm MDOC-ERROR: bogus type 0 (can't set space '\\*(A\\n(aC') (#\\n(.c) ++.. ++.de s1 ++.if \\n(\\*(A\\n(aC==3 \{\ ++. nr xX \\n(aC-1 ++. rm S\\n(xX ++. ds S\\n(aC \\*(sV ++.\} ++.if \\n(\\*(A\\n(aC==2 \{\ ++. nr xX \\n(aC-1 ++.\" this kludge can probably go away, but need to double check first ++. ie "\\*(A\\n(aC"Nb" .ds S\\n(xX \\*(hV ++. el .rm S\\n(xX ++.\} ++.. ++.de s2 ++.ds S\\n(aC \\*(sV ++.. ++.de s3 ++.if \\n(aC>1 \{\ ++. nr xX \\n(aC-1 ++. rm S\\n(xX ++.\} ++.ds S\\n(aC \\*(sV ++.. ++.de s4 ++.nr aa 0 ++.. ++.\" Class switches (on current argument aP) ++.\" NS c0 macro - catch errors (non-existent class type 0) ++.\" NS c1 macro - call request if type 1 ++.\" NS c2 macro - call .No if type 2 ++.\" NS c3 macro - call .No if type 3 ++.\" NS c4 macro - call .No if type 4 ++.de c0 ++.tm MDOC-ERROR: bogus class 0 (can't determine '\\*(A\\n(aC') (#\\n(.c) ++.. ++.de c1 ++.\\*(A\\n(aP ++.. ++.de c2 ++.nr aP \\n(aP-1 ++.No ++.. ++.de c3 ++.nr aP \\n(aP-1 ++.No ++.. ++.de c4 ++.nr aP \\n(aP-1 ++.No ++.. ++.\" NS y1 macro - ignore if class 1 ++.\" NS y2 macro - ignore if class 2 ++.\" NS y3 macro - append if type 3 ++.\" NS y4 macro - append if type 4 ++.de y1 ++.nr aa 1 ++.. ++.de y2 ++.nr aa 1 ++.. ++.de y3 ++.as b1 \\*(A\\n(aP ++.nr aP \\n(aP+1 ++.n\\C\\n(aP ++.. ++.de y4 ++.as b1 \\*(A\\n(aP ++.nr aP \\n(aP+1 ++.n\\C\\n(aP ++.. ++.\"-------------------------------------------------------------------------- ++.\" Ns Bf macro - Begin Font Mode (will be begin-mode/end-mode in groff & TeX) ++.\" Ns Ef macro - End Font Mode ++.de Bf ++.ds mN Bf ++.ie \\n(.$>0 \{\ ++. nr bF \\n(.f ++. nr bZ \\n(.s ++. if "\\$1"Em" \&\\*(eM\c ++. if "\\$1"Li" \&\\*(lI\c ++. if "\\$1"Sy" \&\\*(sY\c ++. if "\\$1"-emphasis" \&\\*(eM\c ++. if "\\$1"-literal" \&\\*(lI\c ++. if "\\$1"-symbolic" \&\\*(sY\c ++.\} ++.el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c) ++.. ++.de Ef ++.ds mN Ef ++.ie \\n(.$>0 .tm Usage .Ef (does not take arguments) (#\\n(.c) ++.el \&\f\\n(bF\s\\n(bZ ++.. ++.\" Ns Bk macro - Begin Keep ++.\" Ns Ek macro - End Keep ++.\" Ns kS string - keep type ++.de Bk ++.ds mN Bk ++.ie \\n(.$==0 \{\ ++.tm Usage: .Bk [-lines | -words] (#\\n(.c) ++.\} ++.el \{\ ++. if !"\\*(kS"" .tm .Bk: nesting keeps not implemented yet. (#\\n(.c) ++. if "\\$1"-lines" .tm .Bd -lines: Not implemented yet. (#\\n(.c) ++. if "\\$1"-words" .Hv ++. ds kS \\$1 ++.\} ++.. ++.de Ek ++.ds mN Ek ++.ie \\n(.$>0 .tm Usage .Ek (does not take arguments) (#\\n(.c) ++.el \{\ ++. if "\\*(kS"-lines" .tm .Bd -lines: Not implemented yet. (#\\n(.c) ++. if "\\*(kS"-words" .Sv ++. rm kS ++.\} ++.. ++.\" NS Bd macro - Begin Display display-type [offset string] ++.\" NS Ed macro - end Display ++.\" NS O[0-9] registers - stack of indent ++.\" NS d[0-9] registers - display-type stack ++.de Bd ++.ds mN Bd ++.ie \\n(.$==0 \{\ ++.tm Usage: .Bd [-literal | -filled | -ragged | -unfilled] [-offset [string]] [-compact] (#\\n(.c) ++.\} ++.el \{\ ++. ds aa ++. nr bV 0 ++. nr iD 0 ++. nr dP \\n(dP+1 ++. if "\\$1"-literal" \{\ ++. nr iD \\n(iD+1 ++. ds d\\n(dP dL ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. ie t \{\&\\*(lI ++' ta 9n 18n 27n 36n 45n 54n 63n 72n ++. \} ++. el \{\ ++' ta 8n 16n 24n 32n 40n 48n 56n 64n 72n ++. \} ++. nf ++. \} ++. if "\\$1"-filled" \{\ ++. nr iD \\n(iD+1 ++. ds d\\n(dP dF ++. br ++. \} ++. if "\\$1"-ragged" \{\ ++. nr iD \\n(iD+1 ++. ds d\\n(dP dR ++. na ++. \} ++. if "\\$1"-unfilled" \{\ ++. nr iD \\n(iD+1 ++. ds d\\n(dP dU ++. nf ++. \} ++.\" .tm Here is argc: \\n(.$ and here is iD \\n(iD ++. if ((\\n(iD>=1)&(\\n(.$>\\n(iD)) \{\ ++. bV \\$2 \\$3 \\$4 ++. \} ++. if \\n(O\\n(dP>0 'in \\n(.iu+\\n(O\\n(dPu ++. if (\\n(bV==0) \{\ ++. if (\\n(nS==0) \{\ ++. ie "\\*(d\\n(dP"dR" .sp \\n(dVu ++. el 'sp \\n(dVu ++. \} ++. \} ++. if \\n(cR==0 .ne 2v ++. nr bV 0 ++. nr iD 0 ++.\} ++.. ++.\" NS bV macro - resolve remaining .Bd arguments ++.de bV ++.\" .tm in bV with args: \\$1 \\$2 \\$3 ++.nr iD 1 ++.ds bY ++.if "\\$1"-offset" \{\ ++. ds bY \\$2 ++. if "\\*(bY"left" \{\ ++. nr iD \\n(iD+1 ++. nr O\\n(dP 0 ++. \} ++. if "\\*(bY"right" \{\ ++. nr iD \\n(iD+1 ++. nr O\\n(dP (\\n(.l/3)u ++. \} ++. if "\\*(bY"center" \{\ ++. nr iD \\n(iD+1 ++. nr O\\n(dP (\\n(.l-\\n(.i)/4u ++. \} ++. if "\\*(bY"indent" \{\ ++. nr iD \\n(iD+1 ++. nr O\\n(dP \\n(dIu ++. \} ++. if "\\*(bY"indent-two" \{\ ++. nr iD \\n(iD+1 ++. nr O\\n(dP \\n(dIu+\\n(dIu ++. \} ++. if \\n(iD==1 \{\ ++. nr iD \\n(iD+1 ++. sW "\\*(bY" ++. ie \\n(sW>2 \{\ ++. ie ((\\*(bY>9n)&(\\*(bY<100n)) \{\ ++. nr O\\n(dP \\*(bY ++. \} ++. el .nr O\\n(dP (\\n(sW)*\\n(fWu ++. \} ++. el \{\ ++. if \\n(sW==2 .aT \\*(bY ++. ie \\n(aT==1 \{\ ++. nr O\\n(dP \\n(\\*(bY ++. \} ++. el .nr O\\n(dP \\*(bY ++. \} ++. \} ++.\} ++.if "\\$1"-compact" \{\ ++. nr bV 1 ++.\} ++.if \\n(iD<\\n(.$ \{\ ++. ie "\\*(bY"" \{\ ++. bV \\$2 \\$3 ++. \} ++. el \{\ ++. bV \\$3 ++. \} ++.\} ++.. ++.\" NS Ed macro - end display ++.de Ed ++.ds mN Ed ++.br ++.if \\n(dP==0 .tm mdoc: Extraneous .Ed ++.if "\\*(d\\n(dP"dL" \{\ ++. ft \\n(cF ++. fz \\n(cZ ++.\} ++.in \\n(.iu-\\n(O\\n(dPu ++.rr O\\n(dP ++.rm d\\n(dP ++.nr dP \\n(dP-1 ++.fi ++.if t .ad ++.. ++.\"-------------------------------------------------------------------------- ++.\" NS Bl macro - begin list (.Bl list-type) ++.\" NS L[0-9] registers - stack of list types ++.de Bl ++.ie \\n(.$==0 \{\ ++.tm Usage: .Bl [[-hang | -tag] [-width]] [ -item | -enum | -bullet | -diag] (#\\n(.c) ++.\} ++.el \{\ ++. ds mN Bl ++. nr aP 0 ++. nr lC \\n(lC+1 ++. ds A1 \\$2 ++. ds A2 \\$3 ++. ds A3 \\$4 ++. ds A4 \\$5 ++. ds A5 \\$6 ++. ds A6 \\$7 ++. ds A7 \\$8 ++. ds A8 \\$9 ++. nr fV \\n(.$-1 ++. if "\\$1"-hang" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC hL ++. nr w\\n(lC 6n ++. nr tC 1 ++. \} ++. if "\\$1"-tag" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC tL ++. nr tC 1 ++. \} ++. if "\\$1"-item" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC iT ++. nr tC 1 ++. \} ++. if "\\$1"-enum" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC nU ++. nr w\\n(lC 3n ++. nr tC 1 ++. \} ++. if "\\$1"-bullet" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC bU ++. nr w\\n(lC 2n ++. nr tC 1 ++. \} ++. if "\\$1"-dash" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC hU ++. nr w\\n(lC 2n ++. nr tC 1 ++. \} ++. if "\\$1"-hyphen" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC hU ++. nr w\\n(lC 2n ++. nr tC 1 ++. \} ++. if "\\$1"-inset" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC lL ++. nr tC 1 ++. \} ++. if "\\$1"-diag" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC mL ++. nr mL 1 ++. \} ++. if "\\$1"-ohang" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC oL ++. nr tC 1 ++. \} ++. if "\\$1"-column" \{\ ++. nr aP \\n(aP+1 ++. ds L\\n(lC cL ++. \} ++. ie \\n(aP==0 \{\ ++. tm \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. tm Usage: .Bl [[-inset|-tag] -width] [-item|-enum|-bullet|-diag] (#\\n(.c) ++. \} ++. el \{\ ++. tY ++. if (\\n(aP==1)&(\\n(aP<\\n(.$) \{\ ++. nr aP 0 ++. lV ++. if "\\*(L\\n(lC"cL" \{\ ++. W\\n(wV ++. nr w\\n(lC 0 ++' in -\\n(eWu ++. ie \\n(v\\n(lC==1 \{\ ++. nr aa 0 ++. \} ++. el \{\ ++. sp \\n(dVu ++. \} ++. nf ++. nr wV 0 ++. \} ++. \} ++. \} ++. nr aP 0 ++.\" . ds b1 ++. aY ++.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC ++.\} ++.. ++.if \n(.g \{\ ++. nr i 10 ++. while \ni<100 \{\ ++. nr num!\nin 1 ++. nr i +1 ++. \} ++.\} ++.\" NS lV macro - resolve remaining .Bl arguments ++.de lV ++.nr aP \\n(aP+1 ++.if \\n(fV>=\\n(aP \{\ ++. nr iD 0 ++. if "\\*(A\\n(aP"-compact" \{\ ++. nr iD 1 ++. nr v\\n(lC 1 ++. \} ++. if "\\*(A\\n(aP"-width" \{\ ++. nr iD 1 ++. nr aP \\n(aP+1 ++. nr tW 1 ++. ds t\\n(lC TagwidtH ++. ds tS \\*(A\\n(aP ++. aW \\n(aP ++. ie \\n(sW>2 \{\ ++. nr w\\n(lC (\\n(sW)*\\n(fWu ++. if \\n(sW==3 \{\ ++. ie \\n(.g \{\ ++. if \A'\\*(tS' .if r num!\\*(tS \{\ ++. nr w\\n(lC \\*(tS ++. \} ++. \} ++. el \{\ ++. if (\\*(tS>9n)&(\\*(tS<99n) \{\ ++. nr w\\n(lC \\*(tSu ++. \} ++. \} ++. \} ++. \} ++. el \{\ ++. aT \\*(tS ++. ie \\n(aT==1 \{\ ++. nr w\\n(lC \\n(\\*(tS ++. \} ++. el \{\ ++. nr w\\n(lC \\*(tSu ++. \} ++. \} ++. \} ++. if "\\*(A\\n(aP"-offset" \{\ ++. nr iD 1 ++. nr aP \\n(aP+1 ++. ie "\\*(A\\n(aP"indent" \{\ ++. nr o\\n(lC \\n(Dsu ++. \} ++. el \{\ ++. ds tS \\*(A\\n(aP ++. aW \\n(aP ++. ie \\n(sW>2 \{\ ++. nr o\\n(lC (\\n(sW)*\\n(fWu ++. ie \\n(.g \{\ ++. if \A'\\*(tS' .if r num!\\*(tS \{\ ++. nr o\\n(lC \\*(tS ++. \} ++. \} ++. el \{\ ++. if (\\*(tS>9n)&(\\*(tS<100n) \{\ ++. nr o\\n(lC \\*(tS ++. \} ++. \} ++. \} ++. el \{\ ++. ie \\n(C\\n(aP==1 .nr o\\n(lC \\n(\\*(tS ++. el .nr o\\n(lC \\*(tS ++. \} ++. \} ++. \} ++. if \\n(iD==0 \{\ ++. if "\\*(L\\n(lC"cL" \{\ ++. nr wV \\n(wV+1 ++. ds A\\n(wV \\*(A\\n(aP ++. \} ++. \} ++. if \\n(fV>\\n(aP .lV ++.\} ++.. ++.\" NS El macro - end list ++.\" NS iD local register ++.de El ++.ie \\n(.$>0 \{\ ++. tm Usage: .El (#\\n(.c) ++.\} ++.el \{\ ++. ds mN El ++. nr iD 0 ++. if "\\*(L\\n(lC"cL" \{\ ++. nr iD 1 ++. cC ++. \} ++. if "\\*(L\\n(lC"nU" \{\ ++. nr nU 0 ++. \} ++. if \\n(mL>0 \{\ ++. nr iD 1 ++. nr mL 0 ++. tZ ++. nr lC \\n(lC-1 ++. tY ++. \} ++. if "\\*(L\\n(lC"iT" \{\ ++' in \\n(.iu-\\n(o\\n(lCu ++. tZ ++. nr lC \\n(lC-1 ++. tY ++. nr iD 1 ++. \} ++. if "\\*(L\\n(lC"oL" \{\ ++' in \\n(.iu-\\n(o\\n(lCu ++. tZ ++. nr lC \\n(lC-1 ++. tY ++. nr iD 1 ++. \} ++. if "\\*(L\\n(lC"lL" \{\ ++' in \\n(.iu-\\n(o\\n(lCu ++. tZ ++. nr lC \\n(lC-1 ++. tY ++. nr iD 1 ++. \} ++. if \\n(iD==0 \{\ ++. lE ++. \} ++. br ++. nr iD 0 ++.\} ++.. ++.\" NS It macro - list item ++.\" NS iD local register ++.\" NS aA save pA font string for section FILES (no underline if nroff) ++.de It ++.if "\\*(L\\n(lC"" \{\ ++. tm Usage .Bl -list-type [-width [string] | -compact | -offset [string]] (#\\n(.c) ++. tm .It \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 ++.\} ++.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC ++.ne 3v ++.ie \\n(.$>0 \{\ ++. ds mN It ++. ds b1 ++. nr iD 0 ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. if "\\*(L\\n(lC"mL" \{\ ++. nr iD 1 ++. nr aP 0 ++. aX ++. \\*(L\\n(lC ++. \} ++. if "\\*(L\\n(lC"cL" \{\ ++. ds b1 ++. nr aP 0 ++. nr iD 1 ++. \\*(L\\n(lC ++. \} ++. if "\\*(L\\n(lC"iT" \{\ ++. nr aP 0 ++. nr iD 1 ++. \\*(L\\n(lC ++. \} ++. if \\n(iD==0 \{\ ++. fV ++.\" tm ------------------------------------------------------------------------ ++.\" tm It list-type==\\*(L\\n(lC, aP==\\n(aP ++.\" tm It beg arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC ++. nr oM \\n(oM+1 ++. nr tP 1 ++. nr aP \\n(aP+1 ++. nr tX \\n(C\\n(aP ++. ds tX \\*(A\\n(aP ++. if \\n(nF==1 \{\ ++. ds aA \\*(pA ++. if n .ds pA \\*(nO ++. \} ++. ie \\n(C\\n(aP==1 \{\ ++. \\*(A\\n(aP ++. \} ++. el \{\ ++. nr aP \\n(aP-1 ++. No ++. \} ++.\" tm in It here is b1==\\*(b1 ++.\" tm It mid arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC ++. ie \\n(Xt==1 .ds xB \&\\*(L\\n(lC ++. el .\\*(L\\n(lC ++. \} ++. nr iD 0 ++.\} ++.el .\\*(L\\n(lC ++.. ++.\" NS lL macro - .It item of list-type inset ++.de lL ++.lY ++.br ++\&\\*(b1 ++.nr oM \\n(oM-1 ++.nr tP 0 ++.ds b1 ++.aY ++'fi ++.. ++.\" NS hL macro - .It item of list-type hanging label (as opposed to tagged) ++.de hL ++.lX ++.nr bb \\n(w\\n(lCu+\\n(lSu ++.ti -\\n(bbu ++.ie \w\\*(b1u>=(\\n(w\\n(lCu) \&\\*(b1 ++.el \&\\*(b1\h'|\\n(bbu'\c ++.nr oM \\n(oM-1 ++.ds b1 ++.nr tP 0 ++.aY ++'fi ++.. ++.\" NS oL macro - .It item of list-type overhanging label ++.de oL ++.lY ++\&\\*(b1 ++.br ++.nr oM \\n(oM-1 ++.ds b1 ++.nr tP 0 ++.aY ++'fi ++.. ++.\" NS iT macro - .It item of list-type [empty label] ++.de iT ++.lY ++.br ++.\" .ds b1 ++.aY ++'fi ++.. ++.\" NS nU macro - Enumerated list ++.\" NS nU register count ++.\" NS hU macro - Hyphen paragraph list (sub bullet list) ++.\" NS bU macro - Bullet paragraph list ++.de nU ++.nr oM \\n(oM+1 ++.nr nU \\n(nU+1 ++.ds b1 \&\\n(nU. ++.uL ++.. ++.de bU ++.nr oM \\n(oM+1 ++.nr bU \\n(bU+1 ++.ds b1 \&\\*(sY\&\(bu\fP ++.uL ++.. ++.de hU ++.nr oM \\n(oM+1 ++.nr bU \\n(bU+1 ++.ds b1 \&\\*(sY\&\-\fP ++.uL ++.. ++.\" NS uL macro - .It item of list-type enum/bullet/hyphen ++.de uL ++.lX ++.nr bb \\n(w\\n(lCu+\\n(lSu ++.ti -\\n(bbu ++.ie \w\\*(b1u>=(\\n(w\\n(lCu) \&\\*(b1 ++.el \&\\*(b1\h'|\\n(bbu'\c ++.nr oM \\n(oM-1 ++.\" .nr dZ \\n(dZ+1 ++.ds b1 ++.nr tP 0 ++.aY ++'fi ++.. ++.\" NS mL macro - .It item of list-type diagnostic-message ++.de mL ++.nr cF \\n(.f ++.nr cZ \\n(.s ++.ie \\n(mL==1 \{\ ++. nr zB \\n(.c ++. ie (\\n(zB-\\n(zA)>1 .Pp ++. el .br ++. nr zA \\n(zB ++. nr zB 0 ++.\} ++.el \{\ ++. nr zA \\n(.c ++. br ++.\} ++\&\\*(sY\\*(b1\f\\n(cF\s\\n(cZ\\*(lS\c ++.aY ++.ds b1 ++'fi ++.. ++.\" NS tL macro - .It item of list-type "tag" ++.de tL ++.\" tm in tL here is b1==\\*(b1 ++.if \\n(tW==0 .lW ++.lX ++.nr bb \\n(w\\n(lCu+\\n(lSu ++.ti -\\n(bbu ++.ie (\w\\*(b1u)>(\\n(w\\n(lCu) \{\&\\*(b1 ++. br ++.\} ++.el \&\\*(b1\h'|\\n(bbu'\c ++.if \\n(nF==1 \{\ ++. if n .ds pA \\*(aA ++.\} ++.nr oM \\n(oM-1 ++.nr tP 0 ++.\" .nr dZ \\n(dZ+1 ++.ds b1 ++.aY ++'fi ++.. ++.\" NS lW macro - resolve unknown label/tag width (if .Bl [inset | tag] only) ++.de lW ++.if !"TagwidtH"\\*(t\\n(lC" \{\ ++. ie \\n(tX==1 \{\ ++. ds t\\n(lN \\*(tX ++. nr w\\n(lN \\n(\\*(tX ++. \} ++. el \{\ ++. ds t\\n(lN No ++. nr w\\n(lN \\n(No ++. \} ++. if !"\\*(t\\n(lC"\\*(t\\n(lN" .nr tC 1 ++.\} ++.. ++.\" NS lX macro - set up vertical spacing (if compact) and offset+indent (all) ++.de lX ++.ie \\n(tC \{\ ++. nr tC 0 ++. nr tW 0 ++. if \\n(v\\n(lC==0 .sp \\n(dVu ++. in \\n(.iu+\\n(w\\n(lCu+\\n(o\\n(lCu+\\n(lSu ++.\} ++.el \{\ ++. ie \\n(v\\n(lC==1 \{\ ++. nr aa 0 ++. \} ++. el \{\ ++. sp \\n(dVu ++. \} ++.\} ++.if !\\n(cR .ne 2v ++.. ++.\" NS lY macro - set up vertical spacing (if compact) and offset+indent (all) ++.de lY ++.ie \\n(tC \{\ ++. nr tC 0 ++. nr tW 0 ++. if \\n(v\\n(lC==0 .sp \\n(dVu ++. in \\n(.iu+\\n(o\\n(lCu ++.\} ++.el \{\ ++. ie \\n(v\\n(lC==1 \{\ ++. nr aa 0 ++. \} ++. el \{\ ++. sp \\n(dVu ++. \} ++.\} ++.if !\\n(cR .ne 2v ++.. ++.\" NS tS temporary string ++.\" NS hL macro - hanging list function ++.\" NS tS temporary string ++.\" NS hL macro - hanging list function ++.\" NS lT macro - tagged list function ++.\" NS lE macro - list end function ++.\" NS tX string (initial string) ++.\" NS tX register (initial class) ++.\" NS tC parameter change flag ++.\" NS Xt save current list-type flag ++.\" NS lC register - list type stack counter ++.\" NS tP register tag flag (for diversions) ++.\" NS w[0-9] register tag stack (nested tags) ++.\" NS t[0-9] register tag string stack (nested tags) ++.\" NS o[0-9] register offset stack (nested tags) ++.\" NS v[0-9] register vertical tag break stack ++.\" NS h[0-9] register horizontal tag stack (continuous if 1, break if 0) ++.nr lC 0 ++.nr wV 0 ++.nr w1 0 ++.nr o1 0 ++.nr v1 0 ++.nr h1 0 ++.ds t\n(lC ++.de lE ++.\" IN lC o[\\n(lC]==\\n(o\\n(lC, w[\\n(lC]==\\n(w\\n(lC, ++.ie \\n(o\\n(lC>0 \{\ ++' in \\n(.iu-(\\n(w\\n(lCu)-(\\n(o\\n(lCu)-\\n(lSu ++. rr o\\n(lC ++.\} ++.el 'in \\n(.iu-\\n(w\\n(lCu-\\n(lSu ++.if \\n(lC<=0 .tm Extraneous .El call (#\\n(.c) ++.tZ ++.nr lC \\n(lC-1 ++.tY ++.. ++.\" NS tY macro - set up next block for list ++.\" NS tZ macro - decrement stack ++.\" NS tY register (next possible lC value) ++.de tY ++.nr tY (\\n(lC+1) ++.nr w\\n(tY 0 ++.nr h\\n(tY 0 ++.nr o\\n(tY 0 ++.ds t\\n(tY \\*(t\\n(lC ++.ds L\\n(tY ++.nr v\\n(tY 0 ++.. ++.de tZ ++.rm L\\n(tY ++.rr w\\n(tY ++.rr h\\n(tY ++.rr o\\n(tY ++.rm t\\n(tY ++.rr v\\n(tY ++.nr tY \\n(tY-1 ++.. ++.\" initial values ++.nr w1 0 ++.nr o1 0 ++.nr h1 0 ++.ds t1 ++.nr v1 0 ++.nr tY 1 ++.\" NS Xr macro - cross reference (man page only) ++.de Xr ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Xr ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c) ++. el \{\ ++. ie \\n(C\\n(aP>2 .y\\n(C\\n(aP ++. el \{\ ++. as b1 \&\\*(xR\\*(A\\n(aP\fP\s0 ++. if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. if \\n(C\\n(aP==2 \{\ ++. as b1 \&(\\*(A\\n(aP) ++. nr aP \\n(aP+1 ++. \} ++. if \\n(aC>=\\n(aP \{\ ++. c\\n(C\\n(aP ++. \} ++. \} ++. \} ++. aZ ++. \} ++.\} ++.. ++.\" NS Sx macro - cross section reference ++.de Sx ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Sx Usage: .Sx Section Header \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Sx ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. as b1 \\*(sX ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS cC macro - column-list end-list ++.\" NS eW macro - column indent width ++.\" NS cI register - column indent width ++.\" NS W[1-5] macro - establish tabs for list-type column ++.de cC ++'in \\n(.iu-\\n(o\\n(lCu-\\n(w\\n(lCu ++.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ++.fi ++.tZ ++.nr lC \\n(lC-1 ++.tY ++.. ++.de W1 ++.ta \w\\*(A1 u ++.nr eW \w\\*(A1 u ++'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu ++.. ++.de W2 ++.ta \w\\*(A1 u +\w\\*(A2 u ++.nr eW \w\\*(A1 u+\w\\*(A2 u ++'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu ++.. ++.de W3 ++.ta \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u ++.nr eW \w\\*(A1 u+\w\\*(A2 u+\w\\*(A3 u ++'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu ++.. ++.de W4 ++.ta \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u ++.nr eW \w\\*(A1 u+\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u ++'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu ++.. ++.de W5 ++.ta \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u ++.nr eW \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u ++' in \\n(.iu+\\n(eWu+\\n(o\\n(lCu ++.. ++.\" This is packed abnormally close, intercol width should be an option ++.de W6 ++.ta \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u +\w\\*(A6 ++.nr eW \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u +\w\\*(A6 ++' in \\n(.iu+\\n(eWu+\\n(o\\n(lCu ++.. ++.\" NS cL macro - column items ++.de cL ++.if \\n(w\\n(lC==0 .nr w\\n(lC \\n(eWu ++.if \\n(.u==0 \{\ ++. fi ++' in \\n(.iu+\\n(eWu ++.\} ++.ti -\\n(eWu ++.fV ++.nr aP \\n(aP+1 ++.ie \\n(aC>=\\n(aP \{\ ++. if "\\*(A\\n(aP"Ta" \{\ ++. nr jJ \\n(aP-1 ++. rm S\\n(jJ ++. rr jJ ++. \} ++. c\\n(C\\n(aP ++.\} ++.el .tm Usage: .It column_string [Ta [column_string ...] ] (#\\n(.c) ++.. ++.\" NS Ta macro - append tab (\t) ++.de Ta ++.ie \\n(aC>0 \{\ ++. nr aP \\n(aP+1 ++. ie \\n(aC>=\\n(aP \{\ ++. if "\\*(A\\n(aP"Ta" \{\ ++. nr jJ \\n(aP-1 ++. rm S\\n(jJ ++. rr jJ ++. \} ++. as b1 \\t ++. c\\n(C\\n(aP ++. \} ++. el \{\ ++. as b1 \\t\\c ++. rm S\\n(aP ++. pB ++. aY ++.\" . ds b1 ++. \} ++.\} ++.el \{\ ++. tm Usage: Ta must follow column entry: e.g. (#\\n(.c) ++. tm .It column_string [Ta [column_string ...] ] ++.\} ++.. ++.\" ++.\" NS Dl macro - display (one line) literal ++.de Dl ++'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ++.in \\n(.iu+\\n(Dsu ++.ie \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. tm Usage: .Dl argument ... (#\\n(.c) ++. \} ++. el \{\ ++. ds mN Dl ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. Li ++. \} ++.\} ++.el \{\ ++. tm Usage: .Dl not callable by other macros (#\\n(.c) ++.\} ++.in \\n(.iu-\\n(Dsu ++.. ++.\" ++.\" NS D1 macro - display (one line) ++.de D1 ++'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i ++.in \\n(.iu+\\n(Dsu ++.ie \\n(aC==0 \{\ ++. ie \\n(.$==0 \{\ ++. tm Usage: .D1 argument ... (#\\n(.c) ++. \} ++. el \{\ ++. ds mN D1 ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. nr aP \\n(aP+1 ++. ie \\n(C\\n(aP==1 .\\*(A\\n(aP ++. el .No ++. \} ++.\} ++.el \{\ ++. tm Usage: .D1 not callable by other macros (#\\n(.c) ++.\} ++.in \\n(.iu-\\n(Dsu ++.. ++.\" NS Ex macro - DEFUNCT ++.de Ex ++.tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" ++.\" NS Ex macro - DEFUNCT ++.de Ex ++.tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.. ++.\" ++.\" NS Vt macro - Variable type (for forcing old style variable declarations) ++.\" this is not done in the same manner as .Ot for fortrash - clean up later ++.de Vt ++.\" if a function declaration was the last thing given, want vertical space ++.if \\n(fD>0 \{\ ++. Pp ++. nr fD 0 ++.\} ++.\" if a subroutine was the last thing given, want vertical space ++.if \\n(fZ>0 \{\ ++. ie \\n(fX==0 \{\ ++. Pp ++. rs ++. \} ++. el .br ++.\} ++.nr fX \\n(fX+1 ++.nr cF \\n(.f ++.nr cZ \\n(.s ++\\*(fT\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.ie \\n(oT==0 .br ++.el \&\ \& ++.ft \\n(cF ++.fs \\n(cZ ++.. ++.\" ++.\" NS Ft macro - Function type ++.nr fZ 0 ++.de Ft ++.if \\n(nS>0 \{\ ++. if \\n(fZ>0 \{\ ++. Pp ++. nr fD 0 ++. nr fX 0 ++. \} ++. if \\n(fD>0 \{\ ++. Pp ++. nr fD 0 ++. nr fX 0 ++. \} ++. if \\n(fX>0 \{\ ++. Pp ++. nr fX 0 ++. \} ++. nr fY 1 ++.\} ++.nr cF \\n(.f ++.nr cZ \\n(.s ++\&\\*(fT\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.ft \\n(cF ++.fs \\n(cZ ++.\" .br ++.. ++.\" ++.\" NS Ot macro - Old Function type (fortran - no newline) ++.\" Ns oT register ++.nr oT 0 ++.de Ot ++.nr oT 1 ++.if \\n(nS>0 \{\ ++. if \\n(fZ>0 \{\ ++. Pp ++. nr fD 0 ++. nr fX 0 ++. \} ++. if \\n(fD>0 \{\ ++. Pp ++. nr fD 0 ++. nr fX 0 ++. \} ++. if \\n(fX>0 \{\ ++. Pp ++. nr fX 0 ++. \} ++. nr fY 1 ++.\} ++.if \\n(.$==4 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3 \\$4 ++.if \\n(.$==3 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3 ++.if \\n(.$==2 .as b1 \&\\*(fT\&\\$1 \\$2 ++.if \\n(.$==1 .as b1 \&\\*(fT\&\\$1 ++.as b1 \&\ \fP ++.. ++.\" ++.\" NS Fa macro - Function arguments ++.de Fa ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Fa Function Arguments ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Fa ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.ie \\n(fC>0 \{\ ++. fC ++.\} ++.el \{\ ++. if \\n(aC>\\n(aP \{\ ++. as b1 \\*(fA ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++. if \\n(nS>0 \{\ ++. if \\n(fZ>0 .br ++. \} ++. \} ++.\} ++.. ++.\" NS fC macro - interal .Fa for .FO and .Fc ++.de fC ++.ie \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++.\" . nr aa \\n(aP ++.\" . if \\n(nS>0 \{\ ++. ds Fb ++. nr fB 0 ++. nr Fb 0 ++. fB \\*(A\\n(aP ++. if \\n(fB>1 \{\ ++. rm A\\n(aP ++. rn Fb A\\n(aP ++. \} ++.\" . \} ++. if \\n(fC>1 \{\ ++. as b1 \&\f\\n(cF\s\\n(cZ,\\*(S\\n(aP\\*(fA\\*(A\\n(aP\fP\s0 ++.\" . as b1 \&\\,\\*(S\\n(aP\fP\s0\\*(fA\\*(A\\n(aP\fP\s0 ++. \} ++. if \\n(fC==1 \{\ ++. as b1 \&\|\\*(fA\\*(A\\n(aP\fP\s0 ++. \} ++. nr fC \\n(fC+1 ++. fC ++.\} ++.el \{\ ++. aY ++.\} ++.. ++.\" NS Fn macro - functions ++.\" NS fY register - dick with old style function declarations (fortran) ++.\" NS fZ register - break a line when more than one function in a synopsis ++.\" ++.de Fn ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Fn function_name function_arg(s) ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN Fn ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(nS>0 \{\ ++.\" if there is/has been more than one subroutine declaration ++. if \\n(fY==0 \{\ ++. if \\n(fZ>0 \{\ ++. Pp ++. nr fX 0 ++. nr fD 0 ++. \} ++. \} ++. if \\n(fY==1 \{\ ++. br ++. nr fX 0 ++. nr fD 0 ++. nr fY 0 ++. \} ++. if \\n(fD>0 \{\ ++. Pp ++. nr fX 0 ++. \} ++. if \\n(fX>0 \{\ ++. Pp ++. nr fD 0 ++. \} ++. nr fZ \\n(fZ+1 ++. nr fY 0 ++. rs ++. ie \\n(nS>1 .br ++. el \{\ ++. if \\n(iS==0 \{\ ++. nr iS ((8)*\\n(fW)u ++. \} ++. \} ++. in +\\n(iSu ++. ti -\\n(iSu ++. nr nS \\n(nS+1 ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp ++. ie \\n(aC>\\n(aP \{\ ++. as b1 \\*(fA ++. nr aP \\n(aP+1 ++. f\\n(C\\n(aP ++. \} ++. el \{\ ++. as b1 \|\\*(rp ++. aZ ++. \} ++. if \\n(nS>0 \{\ ++. in -\\n(iSu ++. \} ++.\} ++.. ++.\" ++.\" NS f1 macro - class switch ++.\" NS f2 macro - handle function arguments ++.\" NS f3 macro - punctuation ++.\" NS f4 macro - write out function ++.de f1 ++.as b1 \\*(rp\f\\n(cF\s\\n(cZ ++.\\*(A\\n(aP ++.. ++.de f2 ++.if \\n(nS>0 \{\ ++. ds Fb ++. nr fB 0 ++. nr Fb 0 ++. fB \\*(A\\n(aP ++. if \\n(fB>1 \{\ ++. rm A\\n(aP ++. rn Fb A\\n(aP ++. \} ++.\} ++.as b1 \\*(A\\n(aP ++.ie \\n(aC>\\n(aP \{\ ++. nr aa \\n(aP ++. nr aP \\n(aP+1 ++. if \\n(C\\n(aP==2 \{\ ++. as b1 \&\|\f\\n(cF\s\\n(cZ,\\*(S\\n(aa\fP\s0\| ++. \} ++. f\\n(C\\n(aP ++.\} ++.el \{\ ++. as b1 \\*(rp\f\\n(cF\s\\n(cZ ++. aZ ++.\} ++.. ++.de f3 ++.as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(A\\n(aP ++.ie \\n(aC>\\n(aP \{\ ++. No ++.\} ++.el .aZ ++.. ++.de f4 ++.as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(S\\n(aP\\*(A\\n(aP ++.ie \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. No ++.\} ++.el .aZ ++.. ++.de Fo ++.hy 0 ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .Fo function_name ++. el \{\ ++. ds mN Fo ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(nS>0 \{\ ++.\" if there is/has been more than one subroutine declaration ++. if \\n(fY==0 \{\ ++. if \\n(fZ>0 \{\ ++. Pp ++. nr fX 0 ++. nr fD 0 ++. \} ++. \} ++. if \\n(fY==1 \{\ ++. br ++. nr fX 0 ++. nr fD 0 ++. nr fY 0 ++. \} ++. if \\n(fD>0 \{\ ++. Pp ++. nr fX 0 ++. \} ++. if \\n(fX>0 \{\ ++. Pp ++. nr fD 0 ++. \} ++. nr fZ \\n(fZ+1 ++. nr fY 0 ++. rs ++. ie \\n(nS>1 .br ++. el \{\ ++. if \\n(iS==0 \{\ ++. nr iS ((8)*\\n(fW)u ++. \} ++. \} ++. in +\\n(iSu ++. ti -\\n(iSu ++. nr nS \\n(nS+1 ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr oM \\n(oM+1 ++. nr fC 1 ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp ++. aY ++.\} ++.. ++.de Fc ++.if \\n(aC==0 \{\ ++. if \\n(.$>0 \{\ ++. ds mN Fo ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.nr fC 0 ++.nr oM \\n(oM-1 ++.as b1 \|\\*(rp ++.ie \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. \\*(A\\n(aP ++.\} ++.el \{\ ++. aZ ++.\} ++.if \\n(nS>0 \{\ ++. in -\\n(iSu ++.\} ++.hy ++.. ++.\" NS fb macro - if SYNOPSIS, set hard space inbetween function args ++.\" NS fb register - count of words in a function argument ++.\" NS Fb register - counter ++.\" NS Fb string - temporary string ++.de fB ++.\" .tm fB==\\n(fB, Fb==\\n(Fb, 1==\\$1 2==\\$2 3==\\$3 4==\\$4 5==\\$5 6==\\$6 ++.if \\n(fB==0 \{\ ++. nr fB \\n(.$ ++. nr Fb 0 ++. ds Fb ++.\} ++.nr Fb \\n(Fb+1 ++.as Fb \&\\$1 ++.if \\n(Fb<\\n(fB \{\ ++. as Fb \&\\*(hV ++. fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.\} ++.. ++.\" NS Fc - Function close - not implemented yet ++.\" NS Fo - Function open - not implemented yet ++.\" ++.\" Very crude references, stash all reference info into strings (usual ++.\" use of b1 buffer, then b1 contents copied to string of retrievable ++.\" naming convention), print out reference on .Re request and clean up. ++.\" Ordering very limited, no fancy citations, but can do articles, journals ++.\" and books - need to add several missing options (like city etc). ++.\" should be able to grab a refer entry, massage it a wee bit (prefix ++.\" a `.' to the %[A-Z]) and not worry (ha!) ++.\" ++.\" NS Rs macro - Reference Start ++.\" NS rS register - Reference Start flag ++.\" NS rS string - Reference Start buffer name for next save (of b1 buffer) ++.de Rs ++.nr rS 1 ++.rC ++.if \\n(nA==1 .Pp ++.nr Kl 0 ++.. ++.\" NS Re macro - Reference End ++.de Re ++.rZ ++.rC ++.nr rS 0 ++.. ++.\" NS rC macro - reference cleanup ++.de rC ++.nr uK 0 ++.nr jK 0 ++.nr nK 0 ++.nr oK 0 ++.nr qK 0 ++.nr rK 0 ++.nr tK 0 ++.nr vK 0 ++.nr dK 0 ++.nr pK 0 ++.nr bK 0 ++.ds rS ++.rm U1 U2 U3 U4 U5 U6 U7 U8 ++.rm uK jK nK oK rK qK tK vK dK pK bK ++.. ++.\" NS rZ macro - reference print ++.de rZ ++.if \\n(uK \{\&\\*(U1, ++. nr aK 1 ++. if (\\n(uK>1 \{\ ++. aK ++. \} ++. nr Kl -\\n(uK ++.\} ++.if \\n(tK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \{\ ++. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q. ++. \} ++. el \{\&\\*(eM\\*(tK\\*(nO. ++. \} ++. \} ++. if \\n(Kl>0 \{\ ++. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q, ++. \} ++. el \{\&\\*(eM\\*(tK\\*(nO, ++. \} ++. \} ++.\} ++.if \\n(bK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(eM\\*(bK\\*(nO. ++. if \\n(Kl>0 \&\\*(eM\\*(bK\\*(nO, ++.\} ++.if \\n(jK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(eM\\*(jK\\*(nO. ++. if \\n(Kl>0 \&\\*(eM\\*(jK\\*(nO, ++.\} ++.if \\n(rK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(rK. ++. if \\n(Kl>0 \&\\*(rK, ++.\} ++.if \\n(nK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(nK. ++. if \\n(Kl>0 \&\\*(nK, ++.\} ++.if \\n(vK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(vK. ++. if \\n(Kl>0 \&\\*(vK, ++.\} ++.if \\n(pK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(pK. ++. if \\n(Kl>0 \&\\*(pK, ++.\} ++.if \\n(qK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(qK. ++. if \\n(Kl>0 \&\\*(qK, ++.\} ++.if \\n(dK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(dK. ++. if \\n(Kl>0 \&\\*(dK, ++.\} ++.if \\n(oK \{\ ++. nr Kl \\n(Kl-1 ++. if \\n(Kl==0 \&\\*(oK. ++. if \\n(Kl>0 \&\\*(oK, ++.\} ++.if \\n(Kl>0 .tm unresolved reference problem ++.. ++.\" NS aK macro - print out reference authors ++.de aK ++.nr aK \\n(aK+1 ++.ie (\\n(uK-\\n(aK)==0 \{\&and \\*(U\\n(aK, ++.\} ++.el \{\&\\*(U\\n(aK, ++. aK ++.\} ++.. ++.\" NS %A macro - reference author(s) ++.\" NS uK register - reference author(s) counter ++.\" NS U[1-9] strings - reference author(s) names ++.de %A ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%A Author_name (#\\n(.c) ++. el \{\ ++. nr uK \\n(uK+1 ++. nr Kl \\n(Kl+1 ++. ds rS U\\n(uK ++. ds mN %A ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %B macro - [reference] Book Name ++.\" NS bK string - Book Name ++.\" NS bK register - Book Name flag ++.de %B ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%B Book Name (#\\n(.c) ++. el \{\ ++. ds mN %B ++. if \\n(rS>0 \{\ ++. nr bK \\n(bK+1 ++. nr Kl \\n(Kl+1 ++. ds rS bK ++. \} ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. ie \\n(rS==0 \{\ ++. as b1 \&\\*(eM ++. nR ++. \} ++. el .rR ++.\} ++.. ++.\" NS %D macro - [reference] Date ++.\" NS dK string - Date String ++.\" NS dK register - Date flag ++.de %D ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%D Date (#\\n(.c) ++. el \{\ ++. ds mN %D ++. nr dK \\n(dK+1 ++. nr Kl \\n(Kl+1 ++. ds rS dK ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %J macro - [reference] Journal Name ++.\" NS jK register - [reference] Journal Name flag ++.\" NS jK string - [reference] Journal Name ++.de %J ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%J Journal Name (#\\n(.c) ++. el \{\ ++. ds mN %J ++. nr jK \\n(jK+1 ++. ds rS jK ++. nr Kl \\n(Kl+1 ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %N macro - [reference] issue number ++.\" NS nK register - [reference] issue number flag ++.\" NS nK string - [reference] issue number ++.de %N ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%N issue number (#\\n(.c) ++. el \{\ ++. nr nK \\n(nK+1 ++. nr Kl \\n(Kl+1 ++. ds rS nK ++. ds mN %N ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %O macro - [reference] optional information ++.\" NS oK register - [reference] optional information flag ++.\" NS oK string - [reference] optional information ++.de %O ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%O optional information ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN %O ++. nr oK \\n(oK+1 ++. nr Kl \\n(Kl+1 ++. ds rS oK ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %P macro - [reference] page numbers ++.\" NS pK register - [reference] page number flag ++.\" NS pK string - [reference] page number ++.de %P ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%P page numbers ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN %P ++. nr pK \\n(pK+1 ++. nr Kl \\n(Kl+1 ++. ds rS pK ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %Q macro - Corporate or Foreign Author ++.\" NS qK string - Corporate or Foreign Author ++.\" NS qK register - Corporate or Foreign Author flag ++.de %Q ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%Q Corporate or Foreign Author (#\\n(.c) ++. el \{\ ++. ds mN %Q ++. nr qK \\n(qK+1 ++. nr Kl \\n(Kl+1 ++. ds rS qK ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %R macro - [reference] report name ++.\" NS rK string - [reference] report name ++.\" NS rK register - [reference] report flag ++.de %R ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%R reference report (#\\n(.c) ++. el \{\ ++. ds mN %R ++. nr rK \\n(rK+1 ++. nr Kl \\n(Kl+1 ++. ds rS rK ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS %T macro - reference title ++.\" NS tK string - reference title ++.\" NS tK register - reference title flag ++.de %T ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%T (#\\n(.c) ++. el \{\ ++. ds mN %T ++. if \\n(rS>0 \{\ ++. nr tK \\n(tK+1 ++. nr Kl \\n(Kl+1 ++. ds rS tK ++. \} ++. ds A1 \\$1 ++. ds A2 \\$2 ++. ds A3 \\$3 ++. ds A4 \\$4 ++. ds A5 \\$5 ++. ds A6 \\$6 ++. ds A7 \\$7 ++. ds A8 \\$8 ++. ds A9 \\$9 ++. nr fV \\n(.$ ++. fV ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++.\" . ie \\n(jS==1 \{\ ++.\" . nr cF \\n(.f ++.\" . nr cZ \\n(.s ++.\" . ds qL \&\\*(Lq\\*(rA ++.\" . ds qR \&\\*(Rq\f\\n(cF\s\\n(cZ ++.\" . En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++.\" . \} ++.\" . el \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. ie \\n(rS==0 \{\ ++. as b1 \&\\*(eM ++. nR ++. \} ++. el .rR ++.\" . \} ++.\} ++.. ++.\" NS %V macro - reference volume ++.\" NS vK string - reference volume ++.\" NS vK register - reference volume flag ++.de %V ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .%V Volume , ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN %V ++. nr vK \\n(vK+1 ++. nr Kl \\n(Kl+1 ++. ds rS vK ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. rR ++.\} ++.. ++.\" NS rR macro - reference recursion routine ++.\" NS jM local register ++.\" NS jN local register ++.de rR ++.hy 0 ++.nr jM \\n(C\\n(aP ++.ie \\n(jM==1 \{\ ++.\" . as b1 \&\f\\n(cF\s\\n(cZ ++. ie "\\*(A\\n(aP"Tn" \{\ ++. nN ++. \} ++. el \{\ ++. if \\n(aC>8 .tm Usage: \\*(mN - maximum 8 arguments (#\\n(.c) ++. aI rR 1 ++. \\*(A\\n(aP ++. \} ++.\} ++.el \{\ ++. nr jN \\n(aP ++. ie \\n(jM==2 .as b1 \&\\*(A\\n(aP ++. el .as b1 \&\\*(A\\n(aP ++.\" . el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0 ++. ie \\n(aC==\\n(aP \{\ ++.\" . as b1 \&\f\\n(cF\s\\n(cZ ++. rD ++. \} ++. el \{\ ++. nr aP \\n(aP+1 ++. as b1 \&\\*(S\\n(jN ++. rR ++. \} ++.\} ++.rr jM jN ++.. ++.\" NS rD macro - save b1 buffer in to appropriate name ++.de rD ++.as \\*(rS \\*(b1 ++.ds b1 ++.ds rS ++.aY ++.. ++.\" NS Hf macro - source include header files. ++.de Hf ++.Pp ++File: ++.Pa \\$1 ++.Pp ++.nr cF \\n(.f ++.nr cZ \\n(.s ++.ie t \{\ ++\&\\*(lI ++.br ++.ta +9n 18n 27n 36n 45n 54n 63n 72n ++.\} ++.el \{\ ++.ta +8n 16n 24n 32n 40n 48n 56n 64n 72n ++.\} ++.nf ++.so \\$1 ++.fi ++.ft \\n(cF ++.fz \\n(cZ ++.Pp ++.. ++.\" NS An macro - author name ++.\" NS aN register ++.nr aN 0 ++.de An ++.if \\n(nY==1 \{\ ++. ie \\n(aN==1 \{\ ++. br ++. \} ++. el \{\ ++. nr aN 1 ++. \} ++.\} ++.if \\n(aC==0 \{\ ++. ie \\n(.$==0 .tm Usage: .An author_name ... \\*(Pu (#\\n(.c) ++. el \{\ ++. ds mN An ++. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 ++. \} ++.\} ++.if \\n(aC>\\n(aP \{\ ++. nr aP \\n(aP+1 ++. nr cF \\n(.f ++. nr cZ \\n(.s ++. nR ++.\} ++.. ++.\" NS Sf macro -defunct ++.de Sf ++.tm .Sf defunct, use prefix or Ns ++.. ++.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. ++.\" Ns Rv macro - return values ++.\" Ns rV string - standard return message ++.de Rv ++.ie \\n(.$==0 \{\ ++.tm Usage: .Rv [-std] (#\\n(.c) ++.\} ++.el \{\ ++. ds mN Rv ++.\" . nr aP 0 ++.\" . nr lR \\n(lR+1 ++.\" . ds A1 \\$2 ++.\" . ds A2 \\$3 ++.\" . ds A3 \\$4 ++.\" . ds A4 \\$5 ++.\" . ds A5 \\$6 ++.\" . ds A6 \\$7 ++.\" . ds A7 \\$8 ++.\" . ds A8 \\$9 ++.\" . nr fV \\n(.$-1 ++. if "\\$1"-std" \{\ ++. nr cH \\*(cH ++. if (\\n(cH<2):(\\n(cH>3) .tm Usage: .Rv -std sections 2 and 3 only ++. br ++\&The ++.Fn \\$2 ++\&\\*(rV ++. \} ++.\} ++.. +--- groff-1.18.1.orig/tmac/euc-jp.tmac ++++ groff-1.18.1/tmac/euc-jp.tmac +@@ -0,0 +1,7 @@ ++.\" euc-jp.tmac ++.\" ++.cflags 256 ,:;>} ++.cflags 256 、。,.・:;?!)〕]}」』】ぁぃぅぇぉっゃゅょー ++.cflags 256 ァィゥェォッャュョ ++.cflags 512 (〔[{「『【 ++.hc ‐ +--- groff-1.18.1.orig/contrib/pic2graph/pic2graph.sh ++++ groff-1.18.1/contrib/pic2graph/pic2graph.sh +@@ -44,7 +44,7 @@ + do + case $1 in + -unsafe) +- groffpic_opts="-U" ++ groffpic_opts="-U";; + -format) + format=$2 + shift;; +@@ -73,7 +73,7 @@ + # 2. Process through eqn and pic to emit troff markup. + # 3. Process through groff to emit Postscript. + # 4. Use convert(1) to crop the PostScript and turn it into a bitmap. +-tmp=/usr/tmp/pic2graph-$$ ++tmp=/tmp/pic2graph-$$ + trap "rm ${tmp}.*" 0 2 15 + (echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") | \ + groff -e -p $groffpic_opts -Tps >${tmp}.ps \ +--- groff-1.18.1.orig/contrib/eqn2graph/eqn2graph.sh ++++ groff-1.18.1/contrib/eqn2graph/eqn2graph.sh +@@ -63,7 +63,7 @@ + # 2. Process through eqn(1) to emit troff markup. + # 3. Process through groff(1) to emit Postscript. + # 4. Use convert(1) to crop the Postscript and turn it into a bitmap. +-tmp=/usr/tmp/eqn2graph-$$ ++tmp=/tmp/eqn2graph-$$ + trap "rm ${tmp}.*" 0 2 15 + read equation + (echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"${equation}"'$') | \ +--- groff-1.18.1.orig/Makefile.in ++++ groff-1.18.1/Makefile.in +@@ -136,7 +136,11 @@ + # directory will be always added. + # `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the + # current nor in the home directory. ++ifeq (,$(extratmacdirs)) + tmacpath=$(systemtmacdir):$(localtmacdir):$(tmacdir) ++else ++tmacpath=$(systemtmacdir):$(localtmacdir):$(tmacdir):$(extratmacdirs) ++endif + + # `sys_tmac_prefix' is prefix (if any) for system macro packages. + sys_tmac_prefix=@sys_tmac_prefix@ +@@ -195,6 +199,9 @@ + man7ext=7 + man7dir=$(manroot)/man$(man7ext) + ++# DVI file format. ++DVIFORMAT=@DVIFORMAT@ ++ + # The configure script checks whether all necessary utility programs for + # grohtml are available -- only then we can build the HTML documentation. + make_html=@make_html@ +@@ -261,6 +268,8 @@ + # -DRETSIGTYPE=int if signal handlers return int not void + # -DIS_EBCDIC_HOST if the host's encoding is EBCDIC + # -DPAGEA4 if the the printer's page size is A4 ++# -DENABLE_MULTIBYTE enable multibyte extension ++# -DHAVE_LANGINFO_CODESET if you have nl_langinfo(CODESET) + DEFINES=@DEFS@ + + # Include +@@ -395,7 +404,8 @@ + "PERLPATH=$(PERLPATH)" \ + "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \ + "PURIFY=$(PURIFY)" \ +- "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" ++ "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" \ ++ "DVIFORMAT=$(DVIFORMAT)" + + SHELL=/bin/sh + INCDIRS=src/include +@@ -437,8 +447,10 @@ + font/devhtml + ALLTTYDEVDIRS=\ + font/devascii \ ++ font/devascii8 \ + font/devlatin1 \ + font/devutf8 \ ++ font/devnippon \ + font/devcp1047 + OTHERDIRS=\ + man \ +@@ -483,7 +495,7 @@ + fi + + do=all +-dodirs=$(ALLDIRS) dot ++dodirs=$(DISTDIRS) + # Default target for subdir_Makefile + subdir=src/roff/troff + +--- groff-1.18.1.orig/aclocal.m4 ++++ groff-1.18.1/aclocal.m4 +@@ -356,6 +356,19 @@ + 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++)])) + AC_LANG_POP(C++)])dnl + dnl ++dnl Support Multibyte characters, such as Japanese Code (EUC-JP) ++dnl ++AC_DEFUN(GROFF_MULTIBYTE, ++[AC_MSG_CHECKING([whether to enable multibyte extension]) ++AC_ARG_ENABLE(multibyte, [ --enable-multibyte Enable multibyte extension], ++ multibyte=$enableval, multibyte=no) ++if test "x$multibyte" != "xno"; then ++ AC_DEFINE(ENABLE_MULTIBYTE, 1, ++ [Define if you want to use multibyte extension.]) ++fi ++AC_MSG_RESULT([$multibyte]) ++])dnl ++dnl + dnl + AC_DEFUN(GROFF_TMAC, + [AC_MSG_CHECKING([for prefix of system macro packages]) +@@ -415,6 +428,33 @@ + AC_MSG_RESULT([$tmac_wrap]) + AC_SUBST(tmac_wrap)])dnl + dnl ++dnl codeset.m4 from gettext, by Bruno Haible. ++dnl ++AC_DEFUN(GROFF_LANGINFO_CODESET, ++[AC_CACHE_CHECK([for nl_langinfo and CODESET], groff_cv_langinfo_codeset, ++ [AC_TRY_LINK([#include <langinfo.h>], ++ [char* cs = nl_langinfo(CODESET);], ++ groff_cv_langinfo_codeset=yes, ++ groff_cv_langinfo_codeset=no) ++ ]) ++ if test $groff_cv_langinfo_codeset = yes; then ++ AC_DEFINE(HAVE_LANGINFO_CODESET, 1, ++ [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) ++ fi ++])dnl ++dnl ++dnl ++AC_DEFUN(GROFF_DVIFORMAT, ++[AC_MSG_CHECKING([japanese dvi file format]) ++if test "x$dvi_format" != "xASCII"; then ++ DVIFORMAT=NTT ++else ++ DVIFORMAT=ASCII ++fi ++AC_MSG_RESULT([$DVIFORMAT]) ++AC_SUBST(DVIFORMAT) ++])dnl ++dnl + dnl + AC_DEFUN(GROFF_G, + [AC_MSG_CHECKING([for existing troff installation]) +@@ -481,7 +521,7 @@ + AC_DEFINE(IS_EBCDIC_HOST, 1, + [Define if the host's encoding is EBCDIC.]), + groff_cv_ebcdic="no" +- TTYDEVDIRS="font/devascii font/devlatin1" ++ TTYDEVDIRS="font/devascii font/devlatin1 font/devascii8 font/devnippon" + OTHERDEVDIRS="font/devlj4 font/devlbp" + AC_MSG_RESULT(no)) + AC_SUBST(TTYDEVDIRS) +--- groff-1.18.1.orig/configure ++++ groff-1.18.1/configure +@@ -305,7 +305,7 @@ + # include <unistd.h> + #endif" + +-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' ++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' + ac_subst_files='' + + # Initialize some variables set by options. +@@ -841,6 +841,11 @@ + + cat <<\_ACEOF + ++Optional Features: ++ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) ++ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] ++ --enable-multibyte Enable multibyte extension ++ + Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags +@@ -2530,7 +2535,7 @@ + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + groff_cv_ebcdic="no" +- TTYDEVDIRS="font/devascii font/devlatin1" ++ TTYDEVDIRS="font/devascii font/devlatin1 font/devascii8 font/devnippon" + OTHERDEVDIRS="font/devlj4 font/devlbp" + echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 +@@ -5859,6 +5864,84 @@ + esac + + ++echo "$as_me:$LINENO: checking whether to enable multibyte extension" >&5 ++echo $ECHO_N "checking whether to enable multibyte extension... $ECHO_C" >&6 ++# Check whether --enable-multibyte or --disable-multibyte was given. ++if test "${enable_multibyte+set}" = set; then ++ enableval="$enable_multibyte" ++ multibyte=$enableval ++else ++ multibyte=no ++fi; ++if test "x$multibyte" != "xno"; then ++ ++cat >>confdefs.h <<\_ACEOF ++#define ENABLE_MULTIBYTE 1 ++_ACEOF ++ ++fi ++echo "$as_me:$LINENO: result: $multibyte" >&5 ++echo "${ECHO_T}$multibyte" >&6 ++ ++echo "$as_me:$LINENO: checking japanese dvi file format" >&5 ++echo $ECHO_N "checking japanese dvi file format... $ECHO_C" >&6 ++if test "x$dvi_format" != "xASCII"; then ++ DVIFORMAT=NTT ++else ++ DVIFORMAT=ASCII ++fi ++echo "$as_me:$LINENO: result: $DVIFORMAT" >&5 ++echo "${ECHO_T}$DVIFORMAT" >&6 ++ ++ ++echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5 ++echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 ++if test "${groff_cv_langinfo_codeset+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++#line $LINENO "configure" ++#include "confdefs.h" ++#include <langinfo.h> ++int ++main () ++{ ++char* cs = nl_langinfo(CODESET); ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext conftest$ac_exeext ++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 ++ (eval $ac_link) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && ++ { ac_try='test -s conftest$ac_exeext' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; }; then ++ groff_cv_langinfo_codeset=yes ++else ++ echo "$as_me: failed program was:" >&5 ++cat conftest.$ac_ext >&5 ++groff_cv_langinfo_codeset=no ++fi ++rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext ++ ++fi ++echo "$as_me:$LINENO: result: $groff_cv_langinfo_codeset" >&5 ++echo "${ECHO_T}$groff_cv_langinfo_codeset" >&6 ++ if test $groff_cv_langinfo_codeset = yes; then ++ ++cat >>confdefs.h <<\_ACEOF ++#define HAVE_LANGINFO_CODESET 1 ++_ACEOF ++ ++ fi ++ + ac_config_files="$ac_config_files stamp-h" + + ac_config_files="$ac_config_files Makefile doc/Makefile src/xditview/Imakefile" +@@ -6497,6 +6580,7 @@ + s,@psselect@,$psselect,;t t + s,@make_html@,$make_html,;t t + s,@make_install_html@,$make_install_html,;t t ++s,@DVIFORMAT@,$DVIFORMAT,;t t + s,@LTLIBOBJS@,$LTLIBOBJS,;t t + CEOF + +--- groff-1.18.1.orig/configure.ac ++++ groff-1.18.1/configure.ac +@@ -68,6 +68,9 @@ + GROFF_G + GROFF_TMAC + GROFF_HTML_PROGRAMS ++GROFF_MULTIBYTE ++GROFF_DVIFORMAT ++GROFF_LANGINFO_CODESET + AC_CONFIG_FILES(stamp-h, [echo timestamp > stamp-h]) + AC_CONFIG_FILES([Makefile doc/Makefile src/xditview/Imakefile]) + AC_OUTPUT +--- groff-1.18.1.orig/mdate.sh ++++ groff-1.18.1/mdate.sh +@@ -2,41 +2,4 @@ + + # Print the modification date of $1 `nicely'. + +-# Don't want foreign dates. +- +-LANGUAGE= +-LC_ALL=C; export LC_ALL +- +- +-(date; +-if ls -L /dev/null 1>/dev/null 2>&1; then ls -L -l $1; else ls -l $1; fi +-) | awk ' +-BEGIN { +- full["Jan"] = "January"; number["Jan"] = 1; +- full["Feb"] = "February"; number["Feb"] = 2; +- full["Mar"] = "March"; number["Mar"] = 3; +- full["Apr"] = "April"; number["Apr"] = 4; +- full["May"] = "May"; number["May"] = 5; +- full["Jun"] = "June"; number["Jun"] = 6; +- full["Jul"] = "July"; number["Jul"] = 7; +- full["Aug"] = "August"; number["Aug"] = 8; +- full["Sep"] = "September"; number["Sep"] = 9; +- full["Oct"] = "October"; number["Oct"] = 10; +- full["Nov"] = "November"; number["Nov"] = 11; +- full["Dec"] = "December"; number["Dec"] = 12; +-} +- +-NR == 1 { +- month = $2; +- year = $NF; +-} +- +-NR == 2 { +- if ($(NF-1) ~ /:/) { +- if (number[$(NF-3)] > number[month]) +- year--; +- } +- else +- year = $(NF-1); +- print $(NF-2), full[$(NF-3)], year +-}' ++perl -MPOSIX -le 'print strftime("%d %B %Y", localtime((stat $ARGV[0])[9]))' $1 +--- groff-1.18.1.orig/stamp-h ++++ groff-1.18.1/stamp-h +@@ -0,0 +1 @@ ++timestamp +--- groff-1.18.1.orig/debian/changelog ++++ groff-1.18.1/debian/changelog +@@ -0,0 +1,939 @@ ++groff (1.18.1-15) unstable; urgency=low ++ ++ * Create eqn2graph's temporary files in /tmp, not /usr/tmp (thanks, Einar ++ Karttunen; closes: #216819). How did I miss this when doing the same for ++ pic2graph? ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 23 Jan 2004 11:37:26 +0000 ++ ++groff (1.18.1-14) unstable; urgency=low ++ ++ * Document Unicode hyphen configuration in README.Debian. ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 15 Nov 2003 17:43:03 +0000 ++ ++groff (1.18.1-13) unstable; urgency=low ++ ++ * Add sample code to /etc/groff/man.local and /etc/groff/mdoc.local to ++ make "-" render as Unicode HYPHEN-MINUS on the utf8 device. This is ++ commented out by default because man pages which require this are buggy: ++ "\-" should be used instead when a real dash as opposed to a logical ++ hyphen is required. ++ * Fix some typos in groff(1) (thanks, G旦ran Weinholt; closes: #181375). ++ ++ -- Colin Watson <cjwatson@debian.org> Thu, 6 Nov 2003 12:52:18 +0000 ++ ++groff (1.18.1-12) unstable; urgency=low ++ ++ * Create pic2graph's temporary files in /tmp, not /usr/tmp (thanks, Alex ++ Withers; closes: #216819). ++ ++ -- Colin Watson <cjwatson@debian.org> Tue, 21 Oct 2003 09:24:37 +0100 ++ ++groff (1.18.1-11) unstable; urgency=low ++ ++ * Never recode input or output for the ascii8 device. It doesn't work in ++ non-trivial locales, since ascii8 isn't supposed to be prepared for ++ input in, say, UTF-8, and the point of ascii8 is to be a trivial hack ++ device for use when you know your input encoding is the same as your ++ output encoding. This makes man(1)'s life easier, and incidentally fixes ++ a problem with iconv replacing certain Polish characters with question ++ marks (closes: #170320). ++ * Revert part of the original attempt at fixing #170320 (in 1.18.1-2), ++ which made ascii8 accept U+0100 to U+0200. This is no longer necessary ++ with the above, and it broke the assumptions in ++ font::get_font_wchar_metric(), causing problems for KOI8-R input. ++ * Stop output devices breaking when given the 'x init' command in an ++ intermediate output file rather than 'x init <encoding>'. ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 14 Sep 2003 16:17:41 +0100 ++ ++groff (1.18.1-10) unstable; urgency=low ++ ++ * Fix wrong devps Japanese font metrics (thanks, Masatoshi Suehiro and ++ Junichi Uekawa; closes: #194016). ++ ++ -- Colin Watson <cjwatson@debian.org> Tue, 19 Aug 2003 02:54:34 +0100 ++ ++groff (1.18.1-9) unstable; urgency=low ++ ++ * Fix segfault in grotty when changing the colour before setting the ++ initial font (closes: #189384). ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 18 Apr 2003 00:47:43 +0000 ++ ++groff (1.18.1-8) unstable; urgency=low ++ ++ * Make sure that the default input character encoding is always ++ ISO-8859-1, except for the ascii8 device and for Japanese locales. This ++ is required for compatibility with upstream. ++ * Automatically load latin1.tmac when using all terminal devices except ++ ascii, not just the latin1 device. ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 11 Apr 2003 00:11:40 +0100 ++ ++groff (1.18.1-7) unstable; urgency=low ++ ++ * Use groff's font metric instead of wcwidth() ++ (src/devices/grotty/tty.cc): add cols to tty_font ++ add_char takes font parameter ++ tty_printer:add_char calculate hpos by using font metric ++ (src/include/encoing.h src/libs/libgroff/encoding.cc): ++ put_wchar returns number of bytes written, not columns. ++ * font metric fixed, X*/M.proto, ++ * fix sed script in font's Makefile.sub. sed doesn't see + as regex metachar. ++ replace [0-9]+ to [0-9][0-9]*. ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Mon, 24 Feb 2003 10:59:09 +0900 ++ ++groff (1.18.1-6) unstable; urgency=low ++ ++ * Use wcwidth() to find the width of UTF-8 characters. This seems to work ++ well for both en_GB.UTF-8 and ja_JP.UTF-8, so both CJK and non-CJK ++ output should finally be correct (closes: #173764). ++ * Recommend libpaper1 instead of libpaperg. ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 23 Feb 2003 19:33:50 +0000 ++ ++groff (1.18.1-5) unstable; urgency=low ++ ++ * put_wchar() returns number of columns for char ++ * add UTF-8 support for Japanese. ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Fri, 7 Feb 2003 00:32:00 +0900 ++ ++groff (1.18.1-4) unstable; urgency=low ++ ++ * Fix over-zealous backspacing in UTF-8 output (closes: #173764). ++ ++ -- Colin Watson <cjwatson@debian.org> Thu, 6 Feb 2003 01:31:57 +0000 ++ ++groff (1.18.1-3) unstable; urgency=low ++ ++ * Recode this changelog to UTF-8. ++ * Clarify README.Debian to mention the error message you get if you've ++ forgotten to install groff as well as groff-base (see #175585). ++ * Build with g++ 3.2. Drop hppa -fno-strength-reduce hack from 1.17.2-12, ++ which I hope should no longer be required. ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 8 Jan 2003 03:26:13 +0000 ++ ++groff (1.18.1-2) unstable; urgency=low ++ ++ * Backport upstream patch to fix segfaults in ++ node::add_discretionary_hyphen() observed while building aegis and ++ aegis3 (closes: #173058, #173063). ++ * Fix pic2graph syntax error, thanks to lintian. Patch also sent upstream. ++ * Patch from Fumitoshi UKAI to fix ISO-8859-2 output through devascii8 ++ (closes: #170320). ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 15 Dec 2002 14:59:20 +0000 ++ ++groff (1.18.1-1) unstable; urgency=low ++ ++ * New upstream release. ++ - Includes 'Am' string in mdoc from NetBSD (closes: #163195). ++ * Amend debian/copyright to reflect that the papersize fallback patch has ++ been merged upstream. ++ * Actually call the GROFF_LANGINFO_CODESET macro as well as defining it. ++ ++ * New multibyte patch from Fumitoshi UKAI, with adjustments by me. Fixes ++ Japanese HTML output, among other things (closes: #149006). ++ ++ groff (1.18.1-0.u1) unstable; urgency=low ++ ++ * for C or POSIX locale, use ascii8 encoding handler ++ * xditview supports ENABLE_MULTIBYTE (at least Japanese) ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Mon, 4 Nov 2002 02:05:16 +0900 ++ ++ groff (1.18.1-0.u) unstable; urgency=low ++ ++ * New upstream release ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Wed, 9 Oct 2002 02:09:41 +0900 ++ ++ groff (1.18-6.u2) unstable; urgency=low ++ ++ * src/roff/troff/input.cc: fix bug in wchar_charinfo() ++ * src/device/grohtml/post-html.cc: works ENABLE_MULTIBYTE ++ * font/devhtml: add font M, G for Japanese ++ * grohtml works (japanese) ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Mon, 23 Sep 2002 02:56:59 +0900 ++ ++ groff (1.18-6.u1) unstable; urgency=low ++ ++ * new multibyte support patch based on japanese patch ++ - use iconv ++ - add .encoding directive (default encoding is determined from locale) ++ - \[u<code>] supported ++ - font/*/DESC: ++ add fontset ++ - font/*/<font> ++ add u<code>..u<code> range ++ - grotty and grops works (japanese) ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Sun, 22 Sep 2002 04:47:10 +0900 ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 10 Nov 2002 23:16:32 +0000 ++ ++groff (1.18-7) unstable; urgency=low ++ ++ * Policy version 3.5.7: ++ - Drop DEB_BUILD_OPTIONS=debug support; compile with -g by default. ++ - Support DEB_BUILD_OPTIONS=noopt. ++ * src/roff/troff/node.cc (bracket_node::copy): Fix a segfault on copying ++ an empty bracket_node, such as '(\bu' (closes: #162595). ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 27 Sep 2002 16:03:22 +0100 ++ ++groff (1.18-6) unstable; urgency=low ++ ++ * Backport upstream patch to m.tmac for the benefit of gpresent: the VM ++ macro definition was missing a backslash (closes: #160713). ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 13 Sep 2002 00:54:39 +0100 ++ ++groff (1.18-5) unstable; urgency=low ++ ++ * Document the Debian groff macro path in README.Debian. ++ * Map \- to Unicode HYPHEN-MINUS in UTF-8 mode, for more convenient ++ searching in man pages (closes: #159872). ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 6 Sep 2002 22:34:21 +0100 ++ ++groff (1.18-4) unstable; urgency=low ++ ++ * Upstream patch to freeze unbreakable spaces, preventing a failed ++ assertion on latin1(7) (closes: #155969). ++ * Install text versions of meintro.ps, meref.ps, and pic.ps. Other ++ documents either aren't very useful in plain text or don't format well ++ (closes: #155226). ++ * Reorder clean target a little. ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 10 Aug 2002 10:54:54 +0100 ++ ++groff (1.18-3) unstable; urgency=low ++ ++ * src/devices/grohtml/html-table.cc: Initialize another variable properly. ++ This really fixes the segfault during the arm build. ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 31 Jul 2002 02:52:20 +0100 ++ ++groff (1.18-2) unstable; urgency=low ++ ++ * src/include/encoding.h: Fix broken token-after-#endif syntax. ++ * src/devices/grohtml/post-html.cc: Make sure pointsize is initialized ++ properly. This fixes an infinite loop in the ia64 build, and perhaps arm ++ too. ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 27 Jul 2002 18:41:46 +0100 ++ ++groff (1.18-1) unstable; urgency=low ++ ++ * New upstream release. Highlights: ++ - Colour support (although see below). ++ - New macro set, mom, mainly for non-scientific writers. The aim of ++ these macros is to make groff accessible for ordinary use with a ++ minimum of convoluted syntax. ++ - 'eu' and 'Eu' characters available for Euro support. ++ - Improved support for TeX hyphenation files. ++ - New means of setting the line length, which now works for -mdoc manual ++ pages as well as -man. Use man-db >= 2.4.0 to take advantage of this. ++ - Documentation of the differences between groff and Unix troff is now ++ in groff_diff(7). ++ - groff_mwww(1) has been renamed to groff_www(1). ++ - groff_ms(7) has been completely rewritten. ++ - New scripts: groffer, pic2graph, and eqn2graph. ++ - Substantial improvements in grohtml (although it's still alpha), ++ including dealing with overstriking properly (closes: #67545). ++ ++ * Many thanks, again, to Fumitoshi UKAI for forward-porting the Japanese ++ patch. ++ * Disable the new ANSI colour/bold/underline escapes in nroff mode, ++ because most pagers either fail to cope with it or need special options ++ to do so. It can be re-enabled by editing /etc/groff/man.local and ++ /etc/groff/mdoc.local, or by setting the environment variable GROFF_SGR ++ to something non-empty. ++ * Drop most current /etc/papersize patches, as the 'papersize' DESC ++ keyword is now available upstream. We now only patch the DESC files and ++ extend the papersize keyword to allow falling back to something else if ++ /etc/papersize doesn't exist. ++ * Fix the removal of final newlines when reading /etc/papersize. ++ * Translate the 'oq' character to an apostrophe (0x27) rather than a ++ backquote (0x60) when using devices other than utf8 (closes: #149086). ++ ++ * Merge groff-x11 back into groff, since this release doesn't have to ++ worry so much about smooth upgrades from potato (closes: #129835). ++ * Accordingly, remove the debconf note about this, since it was an abuse ++ of debconf anyway. README.Debian describes the package organization. ++ * Include more documentation in the main groff package (closes: #121475). ++ * Build-depend on gs, netpbm, and psutils for HTML documentation. Mention ++ in README.build that people bootstrapping a new port or otherwise ++ building the base system from scratch don't need these three. ++ * Recommend these three packages for the grohtml driver. ++ * Recommend imagemagick for pic2graph and eqn2graph. ++ * Downgrade libpaperg dependency to a recommendation, since we fall back ++ to a4 now if it's not installed. ++ * Use debhelper v3 mode. ++ * Upstream ships pre-built info files now, so use them. You need texinfo ++ (>= 4.2) if you want to regenerate them. ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 21 Jul 2002 18:33:04 +0100 ++ ++groff (1.17.2-17) unstable; urgency=low ++ ++ * Back to unstable, now that there's no concern about disrupting woody. ++ Merge changes from -15.woody.1 (unstable) and -16 (experimental). ++ * Delete excess charset information in M and G font files that also use ++ the fixedkanji directive, after consultation with Fumitoshi UKAI. This ++ saves over 1.6Mb. ++ * Move ps device to base, now that it isn't quite so large. It's needed ++ there because it's the default device (closes: #131410). ++ * Update the descriptions of groff-base and groff for the move of the ++ PostScript device. ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 4 May 2002 18:03:40 +0100 ++ ++groff (1.17.2-16) experimental; urgency=low ++ ++ * Experimental upload for the benefit of the NetBSD porters. ++ * Document the build-dependency loop with xfree86, and allow people ++ constructing new ports to override this temporarily with ++ DEB_BUILD_OPTIONS=no-groff-x11 (closes: #130312). ++ * Import AM_LANGINFO_CODESET macro from gettext, and use it for ++ --enable-japanese to provide an emulation of nl_langinfo(CODESET) for ++ systems that don't have it (closes: #130356). ++ * Fix build without --enable-japanese. ++ * Build-depend on a version of debhelper which pulls in debconf-utils ++ (closes: #130357). ++ * Test that Makefile.clean doesn't exist before clobbering it in the ++ configure target. ++ ++ -- Colin Watson <cjwatson@debian.org> Tue, 22 Jan 2002 18:34:22 +0000 ++ ++groff (1.17.2-15.woody.1) unstable; urgency=medium ++ ++ * New Danish debconf translation (thanks, Rune B. Broberg; ++ closes: #131092). ++ * New French debconf translation (thanks, Philippe Batailler; ++ closes: #138515). ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 17 Mar 2002 04:11:50 +0000 ++ ++groff (1.17.2-15) unstable; urgency=high ++ ++ * Fix buffer overflow in grn (closes: #129261). ++ ++ -- Colin Watson <cjwatson@debian.org> Tue, 15 Jan 2002 00:22:19 +0000 ++ ++groff (1.17.2-14) unstable; urgency=low ++ ++ * Upstream patch to make .TH respect the line length (closes: #125826). ++ ++ -- Colin Watson <cjwatson@debian.org> Mon, 14 Jan 2002 02:49:45 +0000 ++ ++groff (1.17.2-13) unstable; urgency=high ++ ++ * Fix peekbyte() to return correctly (closes: #122702). ++ ++ -- Colin Watson <cjwatson@debian.org> Thu, 6 Dec 2001 17:15:20 +0000 ++ ++groff (1.17.2-12) unstable; urgency=high ++ ++ * Use -fno-strength-reduce on hppa, as a temporary workaround for a ++ compiler bug. ++ * Display package-split note when reconfiguring (closes: #122420). ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 5 Dec 2001 17:24:08 +0000 ++ ++groff (1.17.2-11) unstable; urgency=high ++ ++ * Use lpr as the print spooler, even if it happens not to be installed on ++ the build system. This broke 'groff -l' (thanks, Mike Fontenot). ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 30 Nov 2001 21:41:29 +0000 ++ ++groff (1.17.2-10) unstable; urgency=high ++ ++ * Install lbp.tmac (closes: #121765). ++ ++ -- Colin Watson <cjwatson@debian.org> Thu, 29 Nov 2001 20:28:18 +0000 ++ ++groff (1.17.2-9) unstable; urgency=low ++ ++ * Add Fumitoshi UKAI to Uploaders, in case of emergencies. ++ * Move refer to groff, as this saves over 100K in groff-base and I don't ++ think refer is very useful without additional macro packages. ++ * Document refer in groff's description. ++ * Move ChangeLog.jp and README.jp to groff-base. ++ * Replace createM.c with a Perl implementation to aid cross-compilation ++ (thanks, Fumitoshi UKAI; closes: #114338). ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 14 Oct 2001 04:35:20 +0100 ++ ++groff (1.17.2-8) unstable; urgency=medium ++ ++ * The "Texas Armadillo" release. ++ * Policy version 3.5.6 (support build-arch and build-indep targets). ++ * Reduce size of devnippon fonts, and include devnippon in groff-base ++ (thanks, Fumitoshi UKAI and GOTO Masanori; closes: #112622). ++ * Upstream fix for overzealous warnings from -mm and -ms (closes: #69129). ++ * Fix building in a subdirectory (closes: #111229). ++ * Remove spurious substitutions of '..' for '.' in groff_man(7). ++ * groff depends on libpaperg so that /etc/papersize is always present. ++ * Urgency medium as the above has broken some builds of other packages. ++ * Correct quoted-printable remnant in Brazilian Portugese debconf template ++ (thanks, Andre Luis Lopes; closes: #110192). ++ * New Russian debconf template (thanks, Ilgiz Kalmetev; closes: #112653). ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 19 Sep 2001 01:34:21 +0100 ++ ++groff (1.17.2-7) unstable; urgency=low ++ ++ * Back with a new GPG key after a disk crash. Thanks for the NMU in the ++ meantime (closes: #107998, #108705). ++ * Document that -E can't suppress messages output to stderr by macro ++ packages using .tm or .tm1 (fix from upstream CVS; closes: #69130). ++ * src/devices/grotty/tty.cc: Correct one instance of putchar() on a ++ potential UTF-8 character to put_char() (thanks, Mike Fabian and Michael ++ Schroeder; closes: #110008). ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 26 Aug 2001 00:15:42 +0100 ++ ++groff (1.17.2-6.1) unstable; urgency=low ++ ++ * Non Maintainer Upload ++ * fix hyphen character problem in EUC-JP encoding ++ (closes: Bug#107998). ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Fri, 17 Aug 2001 02:06:21 +0900 ++ ++groff (1.17.2-6) unstable; urgency=medium ++ ++ * src/devices/grohtml/post-html.cc: Put characters into the right places ++ in the output buffer so that HTML output no longer ends up as gibberish ++ (closes: #107788). ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 8 Aug 2001 00:33:13 +0100 ++ ++groff (1.17.2-5) unstable; urgency=high ++ ++ * src/preproc/pic/pic.y: Fix format string vulnerability that could allow ++ the -S flag to be disabled (closes: #107459). Patch adapted from one by ++ Zenith Parsec <zen-parse@gmx.net>. ++ * Add a note to README.Debian about where to find documentation. ++ ++ -- Colin Watson <cjwatson@debian.org> Thu, 2 Aug 2001 20:36:18 +0100 ++ ++groff (1.17.2-4) unstable; urgency=low ++ ++ * src/preproc/eqn/text.cc: Initialize wc to the value of the current ++ character even if it isn't a wide character. Otherwise eqn would output ++ nulls instead of normal characters (closes: #106551). ++ * Conflict with jgroff as well as with pre-split versions of ordinary ++ groff, and make references to jgroff versioned to avoid triggering on ++ groff's Provides: field. ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 25 Jul 2001 22:40:52 +0100 ++ ++groff (1.17.2-3) unstable; urgency=low ++ ++ * Remove spare newline from troffrc, which broke e.g. the ms macros ++ (closes: #105777). ++ ++ -- Colin Watson <cjwatson@debian.org> Thu, 19 Jul 2001 00:07:18 +0100 ++ ++groff (1.17.2-2) unstable; urgency=medium ++ ++ * Urgency medium to get a halfway recent groff into testing for the base ++ system freeze. This version should be a significant improvement for ++ non-ASCII/Latin-1 users. ++ ++ * New Japanese patch from Fumitoshi UKAI: ++ ++ groff (1.17.2-1.ukai.1) unstable; urgency=low ++ ++ * fix tmac/euc-jp.tmac (fix coding-system) ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Sun, 15 Jul 2001 21:14:56 +0900 ++ ++ groff (1.17.2-1.ukai.0) unstable; urgency=low ++ ++ * revised Japanese patch evaluation build ++ - refactoring, cleanups ++ not completed (for example src/xditview) ++ ++ -- Fumitoshi UKAI <ukai@debian.or.jp> Sun, 15 Jul 2001 15:27:59 +0900 ++ ++ Also added dq and cq characters to the ascii8 and nippon devices. ++ ++ * Make groff-base and groff-x11 conflict with pre-split groff ++ (closes: #105276). ++ * Move ascii8 device to groff-base (closes: #105627). ++ * Remove stray + in groff(1) (closes: #105530). ++ * New Brazilian Portugese debconf translation (thanks, Andre Luis Lopes; ++ closes: #105367). ++ ++ -- Colin Watson <cjwatson@debian.org> Tue, 17 Jul 2001 17:58:23 +0100 ++ ++groff (1.17.2-1) unstable; urgency=low ++ ++ * New upstream release. Fixes \s[0] escape (affects non-tty use of mdoc). ++ * debian/rules: ++ - The clean target now cleans the source tree better. ++ - Use version detection from Makefile.in: it's friendlier to syntax ++ highlighting. ++ ++ -- Colin Watson <cjwatson@debian.org> Mon, 9 Jul 2001 03:35:20 +0100 ++ ++groff (1.17.1-3) unstable; urgency=low ++ ++ * New Spanish debconf translation (thanks, Carlos Valdivia Yag端e; ++ closes: #102897). ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 30 Jun 2001 20:05:18 +0100 ++ ++groff (1.17.1-2) unstable; urgency=low ++ ++ * Conflict with pmake (<< 1.45-7), which had problems with the new ++ location of groff's macros (see #101973). ++ ++ -- Colin Watson <cjwatson@debian.org> Sun, 24 Jun 2001 03:45:43 +0100 ++ ++groff (1.17.1-1) unstable; urgency=low ++ ++ * New upstream release. ++ * Of course, the library directory has moved with the new version number. ++ Add a symlink, /usr/share/groff/current, which points to the current ++ library directory; also add a versioned conflicts on troffcvt, which I'm ++ about to fix to cope with this. If you rely on some particular version, ++ use it; if not, use current. ++ * Autogenerate debian/groff-base.files and debian/groff-base.links. ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 23 Jun 2001 00:54:37 +0100 ++ ++groff (1.17-4) unstable; urgency=low ++ ++ * Back out patch supporting transparent decompression of groff's input ++ stream. Since programs using groff have to support systems where *roff ++ doesn't know how to decompress things, it doesn't really simplify ++ anything else greatly; more importantly, using gzip means that argument ++ parsing didn't always work the way we expected (closes: #75990). ++ * The lj4 and ps drivers already support /etc/papersize due to an earlier ++ Debian patch, and it turns out that lbp supports it upstream but wasn't ++ previously configured to use it. Altered its DESC file to meet libpaper ++ standards (closes: #19681, #19722). ++ * Move the error unwind for groff-base's preinst into its postrm (oops). ++ * New German debconf translation (thanks, Sebastian Feltel; ++ closes: #100681). ++ * Add README.Debian, describing the recent package reorganization. ++ * Update copyright file to describe all upstream-relevant patches. ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 20 Jun 2001 00:43:45 +0100 ++ ++groff (1.17-3) unstable; urgency=low ++ ++ * Restore /usr/share/groff/tmac to the macro path, as some third-party ++ programs install macros there (should fix #100139, but I'll leave it to ++ the vgrind maintainer to check that groff 1.17 hasn't broken anything ++ else). ++ ++ -- Colin Watson <cjwatson@debian.org> Fri, 8 Jun 2001 19:06:15 +0100 ++ ++groff (1.17-2) unstable; urgency=low ++ ++ * Brown paper bag bug: move grotty to groff-base! ++ * Also move the doc macros to groff-base; some man pages use them. (This ++ and the above bloat -base by some 200K, I'm afraid.) ++ * Mention in the debconf note that groff-base supports Latin-1 and UTF-8 ++ as well as ASCII. ++ * /usr/share/groff/site-tmac contains mdoc.local as well as man.local as ++ of 1.17, so make that whole directory a symlink to /etc/groff and ++ migrate the old /etc/tmac.man.local conffile to /etc/groff/man.local. ++ This seems to need some ugly migration code. ++ * Back out the autoconf 2.50 diffs for now, as they were polluting the ++ .diff.gz. I've sent them upstream, though. ++ ++ -- Colin Watson <cjwatson@debian.org> Wed, 6 Jun 2001 17:02:12 +0100 ++ ++groff (1.17-1) unstable; urgency=low ++ ++ * New maintainer (ciao, Fabrizio). ++ * Thanks for the NMUs (closes: #75722, #90765). ++ * New upstream release, with corresponding debian/copyright updates. ++ * Follow upstream's move to versioned subdirectories of /usr/share/groff. ++ * The components of groff required to support normal use of man-db are now ++ in a separate package, groff-base (thanks, Elrond; closes: #53225). ++ * Also split out gxditview and the devices that use it into the groff-x11 ++ package. I'd have preferred them to stay part of groff, as discussed on ++ -devel, but the necessary xlibs dependency would mean that everybody ++ dist-upgrading from a potato base system would get the X libraries. ++ Added a debconf note to avoid silent loss of functionality; maybe in ++ woody+1 they can be merged back into groff. ++ ++ * New packaging, using debhelper. ++ - This shouldn't generate invalid syntax in the prerm (closes: #86437). ++ - All binaries should be correctly stripped now (closes: #96786). ++ * Add build dependencies (thanks, Daniel Schepler; closes: #80844). ++ * Don't bother running configure in the clean target. ++ * Touch configure in debian/rules to avoid a build-dep on autoconf. This ++ means I have to remember to run the autotools manually every time. Ugh. ++ * Support DEB_BUILD_OPTIONS debug and nostrip. ++ * Mark /etc/X11/app-defaults/GXditview as a conffile. ++ * All this brings us to Standards-Version: 3.5.2. ++ ++ * New Japanese patch (version 0.0.2) from Fumitoshi UKAI. This may not be ++ quite right yet; please let me know if there are any problems. ++ * Replace mdate.sh with something whose results are more predictable ++ (thanks, Florian Lohoff; closes: #62554). ++ * Force LC_ALL to C so that makeinfo doesn't insert some localized strings ++ for the package builder's environment (closes: #84370). ++ * s/man/man-db/ in the package description. ++ * Remove an autoconf hack from aclocal.m4; the bug it's working around is ++ now fixed and the hack broke with autoconf 2.50 (closes: #98916). ++ * Set gxditview's fontpath in debian/rules, restoring ++ /usr/local/share/groff/font. ++ * Preserve the Makefile to avoid a large diff. ++ * Back out single-page an.tmac patch; upstream did it more neatly. ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 2 Jun 2001 20:18:14 +0100 ++ ++groff (1.16-3.4) unstable; urgency=medium ++ ++ * Non-maintainer upload ++ * gcc 3.0 fixes (needed by PARISC port). fixes #90765. ++ ++ -- LaMont Jones <lamont@debian.org> Wed, 25 Apr 2001 00:19:29 -0600 ++ ++groff (1.16-3.3) unstable; urgency=medium ++ ++ * Non-maintainer upload ++ * fixed font count in font/devdvi/DESC.in as suggested in bug ++ report from John P. Cummings <cummij@rpi.edu>, closes: #75722 ++ ++ -- Paul Bame <bame@debian.org> Sat, 24 Feb 2001 17:16:47 -0700 ++ ++groff (1.16-3.2) unstable; urgency=high ++ ++ * Added ascii8 device and fixed bug with (non-latin1&&non-CJK) man-pages ++ viewing (before this polish, russian etc. manpages couldn't be viewed), ++ closes: #81148, #71744, #66928, #74535 ++ ++ -- Peter Novodvorsky <nidd@debian.org> Sun, 14 Jan 2001 01:09:24 +0300 ++ ++groff (1.16-3.1) unstable; urgency=low ++ ++ * Rebuilt on a system with Xfree 4 and toasted contents of /usr/X11R6/lib, ++ closes: #76813, #77024, #77515, #77608, #77684, #78054, #78905, #79472, ++ #80559 ++ ++ -- Robert Woodcock <rcw@debian.org> Thu, 28 Dec 2000 20:51:34 -0800 ++ ++groff (1.16-3) unstable; urgency=low ++ ++ * oops: had left generated files in the diff. ++ * In new macro checking for gzcat (aclocal.m4), added use of option -f ++ to permit transparent fallback to 'normal' cat. ++ * In src/roff/groff/groff.cc , added gzcat command before soelim; it ++ permits transparent use of zipped or not sources. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sun, 27 Aug 2000 18:13:10 +0300 ++ ++groff (1.16-2) unstable; urgency=low ++ ++ * now going into woody (previous were experimental). ++ * Added check for gzip in configure.in ++ * Applyed correction to patch #64551, thanx to Werner LEMBERG. ++ * Added single final footer to an macro, thanx to Werner LEMBERG; ++ closes: #65735. (waiting for the same for the doc macro) ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Mon, 3 Jul 2000 00:13:23 +0300 ++ ++groff (1.16-1) experimental; urgency=low ++ ++ * Fixed src/roff/nroff.sh, which was too much different from the ++ previous one to apply the dumb patch. ++ Thanx to Taketoshi Sano for the right patch! ++ (that was exactly the reason for using experimental instead of ++ unstable: uploading something broken and ask for help to fix it, ++ yeah!) ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Fri, 16 Jun 2000 11:33:47 +0300 ++ ++groff (1.16-0) experimental; urgency=low ++ ++ * New upstream release. ++ * Manually applyed all the nippon and ascii8 changes. ++ Failed for: src/roff/nroff.sh, ++ * Added new info document. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Wed, 7 Jun 2000 19:09:17 +0300 ++ ++groff (1.15.3-2) unstable; urgency=low ++ ++ * Applied patch proposed by Karl M.Hegbloom to get a single page from ++ manpages when in nroff mode. Closes: #64551. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Thu, 25 May 2000 13:43:18 +0300 ++ ++groff (1.15.3-1) unstable; urgency=low ++ ++ * re-enabled default font in Dvi.c, thanx to Kevin Ryde. ++ closes: #63491, but opens probably some other i18n related bug, ++ sigh. ++ * changed version to 1.15.3 (waiting for 1.16 :-) to be grater than ++ the version in slink and than the one in potato. ++ This means that I must reupload the sources ... which were gone from ++ woody anyway (why it's possible?). ++ * Applyed patch submitted by Tomohiro KUBOTA: ++ * Added a new device type 'ascii8', which is 8 bit clean (like latin1) ++ but does not use Latin-1 character for hyphenation and so on (like ++ ascii). This device is intended to be used for codesets other than ++ ASCII and ISO-8859-1. This device should be temporal till all ++ charsets (ISO-8859-*, KOI8-R, EUC-KR, EUC-ZH, TIS620, and so on so on) ++ in the world are implemented, though this is almost impossible. ++ * Added a new character 'sy', which is soft hyphen. This character is ++ defined only for latin1 device. This 'sy' is used for hyphenation ++ instead of [char173], because [char173] may not be a soft hyphen, ++ though [char173] is a soft hyphen in ISO-8859-1. ++ Tomohiro KUBOTA <kubota@debian.or.jp> Wed, 19 Apr 2000 23:47:18 +0900 ++ This closes: #62840. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Thu, 11 May 2000 10:44:14 +0300 ++ ++groff (1.15-3.ja.3) unstable; urgency=low ++ ++ * Corrected bug that segfaults when reading manpage printf(1), thanx ++ to David Schmitt who submitted the bug (closes: #60096) and to ++ Fumitoshi UKAI who submitted the patch to fix it. It was the same ++ bug that jgroff had (#59628). ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Mon, 13 Mar 2000 12:50:02 +0200 ++ ++groff (1.15-3.ja.2) unstable; urgency=low ++ ++ * Included changes proposed by Fumitoshi UKAI and Taketoshi Sano. ++ * corrected groff_man manpage which didn't parse correctly for mandb. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Fri, 25 Feb 2000 20:57:40 +0200 ++ ++groff (1.15-3.ja.1) experimental; urgency=low ++ ++ * Added japanes patch for join with jgroff. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sun, 30 Jan 2000 15:36:03 +0200 ++ ++groff (1.15-3) frozen unstable; urgency=high ++ ++ * mm and mse macros were missing (thanx to Daniel Quinlan to make me ++ discover this grave bug); closes: #55428. ++ * corrected wrong .so request in macro mse ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Mon, 17 Jan 2000 15:25:06 +0200 ++ ++groff (1.15-2) unstable; urgency=low ++ ++ * quick fix to a bug reported only mainstream. ++ postscript device fails if paper format is not a4 or letter. ++ Fixed using "letter" for all other formats, as it _was_ before. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Fri, 14 Jan 2000 12:21:38 +0200 ++ ++groff (1.15-1) unstable; urgency=low ++ ++ * new upstream release: only minor bugfixes. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Thu, 6 Jan 2000 18:23:41 +0200 ++ ++groff (1.12-1) unstable; urgency=low ++ ++ * new upstream release. ++ Got all previous changes (except papersize), ++ plus: new HTML device! (expermental). ++ * leaved version numeric only: closes: #31739, thanx to ++ Jonathan H N Chin <jhnc@pfaff.newton.cam.ac.uk>. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Fri, 17 Dec 1999 14:40:46 +0200 ++ ++groff (1.11b-1) unstable; urgency=low ++ ++ * updated to policy 3.1.0. ++ * new imminent release 1.12; this use groff-current renamed ++ groff-1.11b. Not to be uploaded until 1.12 is released. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sun, 12 Dec 1999 18:15:26 +0200 ++ ++groff (1.11a-9) unstable; urgency=low ++ ++ * not uploaded due to imminent 1.12 ++ * added management of /etc/papersize in driver lj4. ++ todo: the same in driver ps. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sun, 5 Dec 1999 14:26:18 +0200 ++ ++groff (1.11a-8) unstable; urgency=low ++ ++ * moved tmac.local to /etc (as tmac.man.local) and symlinked from the ++ original place; made it a conffile. Thanx to Decklin Foster ++ <decklin@home.com>, closes: #39043 ++ * recompiled with libstdc++2.10 . closes: #49392. ++ * added manpages groff_mdoc(7) and groff_mdoc.samples(7) taken from ++ netBSD, thanks to Ben Harris <bjh21@cam.ac.uk>. closes: #49159. ++ * added Y2K corrections from the beta-12, from Paul Eggert. ++ * Got rid of old and unusefull checks in postinst. ++ * added symlink from /usr/doc, and added -e to script; closes: #39410 ++ * Bugs fixed in previous releases: closes: #27016, #28097. ++ * Updated to std policy 3.0.1 ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Tue, 26 Oct 1999 14:39:10 +0300 ++ ++groff (1.11a-7) unstable; urgency=low ++ ++ * Applied patch to add include path search to groff e gsoelim, provided by ++ Peter Miller <millerp@canb.auug.org.au> needed by aegis. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sat, 17 Oct 1998 23:45:27 +0300 ++ ++groff (1.11a-6) unstable; urgency=low ++ ++ * Recompiled to generate new dependencies into libs ++ (closes: #27790, thanx to Zephaniah E, Hull.) ++ [Previous attempt wasn't succesful.] ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sat, 17 Oct 1998 02:39:10 +0300 ++ ++groff (1.11a-5) unstable; urgency=low ++ ++ * Recompiled to generate new dependencies into libs ++ (closes: #27790, thanx to Zephaniah E, Hull.) ++ * added mime file as suggested by Brian White ++ (closes: #27016) ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Tue, 13 Oct 1998 18:54:55 +0300 ++ ++groff (1.11a-4) unstable; urgency=low ++ ++ * Added groff_man(7) manpage for tmac.an macro written by Susan Kleinmann. ++ * Added patch from Andy Dougherty to let groff pass the -U flag along to ++ troff. (closes: #20628) ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sat, 4 Apr 1998 23:46:42 +0300 ++ ++groff (1.11a-2) unstable; urgency=low ++ ++ * groff (1.11a-2) unstable; urgency=low ++ * groff (1.11a-0bo2) bo-unstable; urgency=low ++ ++ * (lintian): added a symlink for neqn manpage. ++ * (lintian): changed mode of manpage gxditview.1x to 644. ++ * (lintian): changed mode of app-defaults/GXditview to 644. ++ * (lintian): updated the debian/copyright file (previously ++ debian/README), to point to the actual postal address of the FSF, ++ even if the sources in the distribution, including the COPYING file) ++ still point tro the old file (this should be reported as a bug to ++ upstream :-) . Now it says: ++ A copy of the GNU General Public License is available in ++ /usr/doc/copyright/GPL (as installed by package base-files); ++ if not, write to the Free Software Foundation, Inc., ++ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * commented creation of ctags file in debian/rules (closes: #15825, ++ #16006). ++ * checked correct build of fontpath (closes: #16007). ++ * added gzipping of X11 manpage (closes: #17455), tx to David ROCHER. ++ * reverted security changes done in 1.10-3.5 due to added use of safer ++ macro. Added -U flag to nroff/troff/groff/pic to revert to old ++ unsecure behaviour: ++ - nroff script defaults calling groff -S ++ - troff defaults as called with -msafer ++ - groff defaults as called with -S ++ - pic defaults as called with -S ++ Updated manpages nroff(1), groff(1), troff(1), pic(1) for the -U option. ++ * changed reference to me and msafer manpages in groff(1), to reflect ++ the change in their names (done in 1.10-3.5 and 1.10-5). ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sun, 15 Feb 1998 13:09:27 +0200 ++ ++groff (1.11a-1) unstable; urgency=low ++ ++ * changed Standards Version to 2.3.0.1 ++ * corrected names of copyright and chnagelog files. ++ * added full copyright from MIT (for gzditview). ++ * avoid gzipping of copyright file (oops!) ++ * new upstream version 1.11a (fixes #12130) including: ++ - new document for pic. ++ - changes to groff manpage. ++ * full libc6 version (fixes #14592) Since there aren't changes to ++ code, there's no need for a libc5 version. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Mon, 17 Nov 1997 11:00:21 +0200 ++ ++groff (1.10-3.5) stable; urgency=high ++ ++ * Compiled under debian-1.3.1 (libc5) as a security bugfix; used ++ version number 3.5 (instead of 5) to avoid downgrading for hamm. ++ * Avoided execution of arbitrary code embedded in documents; ++ added warning WARN_SECURITY, enabled by default, to warn about .sy ++ directives, but not yet documented in manpage. Warning mode enabled ++ by default via ifdef, should be toggled by option flag. (need ++ coordination with upstream maintainer.) ++ * Applied patch from Brian Mays <bem5r@virginia.edu> to pic/tex.cc to ++ cast a long double value to double (fixes #13788) ++ * Changed name of manpages me and msafer to groff_me and groff_msafer. ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Wed, 15 Oct 1997 23:15:08 +0300 ++ ++groff (1.10-4) unstable; urgency=low ++ ++ * libc6 version ++ * added explicit link to libc to let ld.so find libc dependencies. ++ * added dinamic dependence as Suggest for gxditview. ++ * forced configure to use /usr/bin/perl (fixes bug#11149 and #13239) ++ * added debian version number to option -v ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Sun, 28 Sep 1997 09:09:22 +0300 ++ ++groff (1.10-3) frozen unstable; urgency=low ++ ++ * Applied changes to avoid problem with bash-2 (bug#8755) ++ * Added gxditview notice in file copyright.debian ++ * Compiled to supply gxditview, to let groff -X and man -X work. ++ (changed font path in device.c) ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Wed, 16 Apr 1997 22:50:58 +0300 ++ ++groff (1.10-2) frozen unstable; urgency=low ++ ++ * corrected shlibs.local for libstd++ depenedency (fixes #5401) ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Thu, 14 Nov 1996 08:39:25 +0200 ++ ++groff (1.10-1) frozen; urgency=low ++ ++ * new maintainer: Fabrizio Polacco <fpolacco@debian.org> ++ * changed description in control file (fixes bug #4013 part 2) ++ * new upstream sources 1.10 (fixes bug #4013 part 1) ++ * added symlinks for geqn, gpic, gtbl (bug #4754) ++ * compressed manpages. ++ * Updated to Standards-Version 2.1.1.0 ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Fri, 8 Nov 1996 13:50:09 +0200 ++ ++groff (1.09-12) frozen; urgency=low ++ ++ * this version was never uploaded ++ * new maintainer: Fabrizio Polacco <fpolacco@debian.org> ++ * built using original upstream sources 1.09 + patch 1.09-11 ++ * Updated to Standards-Version 2.1.1.0 ++ ++ -- Fabrizio Polacco <fpolacco@debian.org> Wed, 6 Nov 1996 15:15:10 +0200 ++ ++Changes: ++ 2-Jul-1995 Alvar Bray <alvar@meiko.co.uk> ++ Set permissions of /usr/doc/groff dir in post install script. ++ Previous versions of this package may have got these wrong and ++ replacing the package will not fix them. ++ 5-Mar-1995 Bruce Perens <Bruce@Pixar.com> ++ Added Debian GNU/Linux package maintenance system files. ++ +--- groff-1.18.1.orig/debian/control ++++ groff-1.18.1/debian/control +@@ -0,0 +1,68 @@ ++Source: groff ++Section: text ++Priority: important ++Maintainer: Colin Watson <cjwatson@debian.org> ++Uploaders: Fumitoshi UKAI <ukai@debian.or.jp> ++Standards-Version: 3.5.7 ++Build-Depends: byacc, debhelper (>= 3.0.9), gs, netpbm, psutils, xutils, libxaw7-dev | libxaw-dev, xlibs-dev ++ ++Package: groff-base ++Architecture: any ++Depends: ${shlibs:Depends} ++Suggests: groff ++Replaces: groff (<< 1.17.2-17), jgroff (<< 1.17-1) ++Conflicts: groff (<< 1.17-1), jgroff (<< 1.17-1), pmake (<< 1.45-7), troffcvt (<< 1.04-14) ++Description: GNU troff text-formatting system (base system components) ++ This package contains the traditional UN*X text formatting tools ++ troff, nroff, tbl, eqn, and pic. These utilities, together with the ++ man-db package, are essential for displaying the on-line manual pages. ++ . ++ groff-base is a stripped-down package containing the necessary components ++ to read manual pages in ASCII, Latin-1, and UTF-8, plus the PostScript ++ device (groff's default). Users who want a full groff installation, with ++ the standard set of devices, fonts, macros, and documentation, should ++ install the groff package. ++ ++Package: groff ++Priority: optional ++Architecture: any ++Depends: groff-base (= ${Source-Version}), ${shlibs:Depends} ++Recommends: gs, imagemagick, libpaper1, netpbm, psutils ++Provides: jgroff, groff-x11 ++Conflicts: jgroff (<< 1.17-1), groff-x11 (<< 1.18-1) ++Replaces: jgroff (<< 1.17-1), groff-base (<< 1.17.2-9), groff-x11 (<< 1.18-1) ++Description: GNU troff text-formatting system ++ This package contains optional components of the GNU troff text-formatting ++ system. The core package, groff-base, contains the traditional tools like ++ troff, nroff, tbl, eqn, and pic. This package contains additional devices ++ and drivers for output to DVI, HTML (when the recommended packages gs, ++ netpbm, and psutils are installed), HP LaserJet printers, and Canon CAPSL ++ LBP-4 and LBP-8 printers. ++ . ++ The X75, X75-12, X100, and X100-12 devices, which allow groff output to be ++ conveniently viewed on an X display using the standard X11 fonts, are now ++ included here. They were previously in a separate package, groff-x11. ++ . ++ Besides these, the groff package contains man pages describing the language ++ and its macro sets, info documentation, and a number of supplementary ++ programs: ++ . ++ - gxditview, which is used to display the output of the X* devices, and ++ can also be used to view PostScript output from groff; ++ - grn, a preprocessor for pictures in the 'gremlin' format; ++ - tfmtodit, which creates font files for use with 'groff -Tdvi'; ++ - hpftodit, which creates font files for use with 'groff -Tlj4'; ++ - afmtodit, which creates font files for use with 'groff -Tps'; ++ - refer, which preprocesses bibliographic references for use with groff; ++ - indxbib, which creates inverted indices for bibliographic databases used ++ by 'refer'; ++ - lkbib and lookbib, which search bibliographic databases; ++ - addftinfo, which adds metric information to troff font files for use ++ with groff; ++ - pfbtops, which translates a PostScript font in .pfb format to ASCII for ++ use with groff; ++ - mmroff, a simple groff preprocessor which expands references in mm; ++ - pic2graph, which converts PIC diagrams into cropped image files; ++ - eqn2graph, which converts EQN equations into cropped image files. ++ . ++ All the standard macro packages are supported. +--- groff-1.18.1.orig/debian/mandoc.local ++++ groff-1.18.1/debian/mandoc.local +@@ -0,0 +1,24 @@ ++. ++.if n \{\ ++. \" Debian: Map \(oq to ' rather than ` in nroff mode for devices other ++. \" than utf8. ++. if !'\*[.T]'utf8' \ ++. tr \[oq]' ++. ++. \" Debian: Disable the use of SGR (ANSI colour) escape sequences by ++. \" grotty. ++. if '\V[GROFF_SGR]'' \ ++. output x X tty: sgr 0 ++. ++. \" Debian: Map \- to the Unicode HYPHEN-MINUS character, to make ++. \" searching in man pages easier. ++. if '\*[.T]'utf8' \ ++. char \- \N'45' ++. ++. \" Many UTF-8 man pages use "-" instead of "\-" for dashes such as those ++. \" in command-line options. This is a bug in those pages, but if you want ++. \" all hyphens to be rendered as the ASCII-compatible HYPHEN-MINUS ++. \" anyway, then uncomment this. ++. \" if '\*[.T]'utf8' \ ++. \" char - \N'45' ++.\} +--- groff-1.18.1.orig/debian/rules ++++ groff-1.18.1/debian/rules +@@ -0,0 +1,179 @@ ++#! /usr/bin/make -f ++# ++# rules to debianize groff ++ ++export DH_COMPAT=3 ++export DH_OPTIONS ++ ++CC = gcc ++CXX = g++ ++ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) ++CFLAGS = -O2 -g -Wall ++else ++CFLAGS = -g -Wall ++endif ++ ++# From Makefile.in ++version = $(shell cat VERSION) ++revision = $(shell sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' REVISION) ++upstream = $(version)$(revision) ++datadir = usr/share/groff/$(upstream) ++ ++fontpath := /$(datadir)/font:/usr/local/share/groff/font ++fontpath := $(fontpath):/usr/local/lib/font:/usr/lib/font ++ ++gbtmp = debian/groff-base ++gtmp = debian/groff ++ ++devbase = ascii ascii8 latin1 nippon ps utf8 ++devx11 = X100 X100-12 X75 X75-12 ++ ++ifeq (,$(findstring no-groff-x11,$(DEB_BUILD_OPTIONS))) ++GROFF_X11 := yes ++else ++GROFF_X11 := no ++endif ++ ++ifeq ($(GROFF_X11),yes) ++BUILD_TARGETS := build-groff build-groff-x11 ++else ++BUILD_TARGETS := build-groff ++endif ++BINARY_TARGETS := binary-groff-base binary-groff ++DH_EXCLUDE := -Ngroff-x11 ++ ++configure: configure-stamp ++configure-stamp: ++ if [ ! -f Makefile.clean ]; then cp -p Makefile Makefile.clean; fi ++ -rm -f config.log config.cache ++ CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CFLAGS)" \ ++ PSPRINT=lpr PAGE=A4 \ ++ ./configure --prefix=/usr --mandir=\$${prefix}/share/man \ ++ --infodir=\$${prefix}/share/info --enable-multibyte ++ touch $@ ++ ++src/xditview/Makefile: configure ++ cd src/xditview && xmkmf ++ ++build-arch: $(BUILD_TARGETS) ++build-indep: ++build: build-arch build-indep ++ ++build-groff: configure ++ dh_testdir ++ touch configure # avoid autoconf build-dependency ++ $(MAKE) extratmacdirs=/usr/share/groff/tmac ++ GROFF_NO_SGR=1 $(MAKE) -C doc meintro.txt meref.txt pic.txt ++ touch $@ ++ ++ifeq ($(GROFF_X11),yes) ++build-groff-x11: src/xditview/Makefile ++ dh_testdir ++ touch configure # avoid autoconf build-dependency ++ $(MAKE) -C src/xditview depend ++ $(MAKE) -C src/xditview FONTPATH=$(fontpath) ++ touch $@ ++endif ++ ++clean: ++ dh_testdir ++ dh_testroot ++ touch configure # avoid autoconf build-dependency ++ rm -f man/index.* ++ find . -name tags | xargs -r rm -f ++ find . -name '*.cc.combine' | xargs -r rm -f ++ -$(MAKE) -C doc -i extraclean ++ -$(MAKE) -C src/xditview extraclean ++ -$(MAKE) -i realclean extraclean ++ rm -f src/xditview/Imakefile src/xditview/Makefile ++ dh_clean configure-stamp build-stamp ++ rm -f debian/groff-base.files debian/groff-base.links ++ rm -f config.log config.cache config.status ++ if [ -f Makefile.clean ]; then mv -f Makefile.clean Makefile; fi ++ ++%: %.in ++ sed -e 's/@VERSION@/$(upstream)/g' $< > $@ ++ ++install: DH_OPTIONS= ++install: build debian/groff-base.files ++ dh_testdir ++ dh_testroot ++ dh_clean -k -a ++ dh_installdirs -a ++ $(MAKE) install prefix=$(CURDIR)/$(gtmp)/usr \ ++ docdir=$(CURDIR)/$(gtmp)/usr/share/doc/groff-base \ ++ INSTALL_INFO=: ++ dh_movefiles -pgroff-base --sourcedir=debian/groff ++ dh_installdirs -pgroff-base $(datadir)/font ++ set -e; for x in $(devbase); do \ ++ mv $(gtmp)/$(datadir)/font/dev$$x $(gbtmp)/$(datadir)/font/; \ ++ done ++ifeq ($(GROFF_X11),yes) ++ $(MAKE) -C src/xditview install install.man DESTDIR=$(CURDIR)/$(gtmp) ++else ++ set -e; for x in $(devx11); do \ ++ rm -rf $(gtmp)/$(datadir)/font/dev$$x; \ ++ done ++endif ++ ++binary-indep: ++ ++binary-groff-base: DH_OPTIONS=-pgroff-base ++binary-groff-base: install debian/groff-base.links ++ dh_testdir ++ dh_testroot ++ # Conffiles should go in /etc ++ mv $(gbtmp)/usr/share/groff/site-tmac $(gbtmp)/etc/groff ++ # Debian additions to *.local ++ cat debian/mandoc.local >> $(gbtmp)/etc/groff/man.local ++ cat debian/mandoc.local >> $(gbtmp)/etc/groff/mdoc.local ++ # Scripts should be executable ++ chmod +x $(gbtmp)/$(datadir)/font/devps/generate/afmname \ ++ $(gbtmp)/$(datadir)/font/devps/generate/symbol.sed ++ dh_installdocs ++ dh_installmime ++ dh_installchangelogs ChangeLog ++ dh_link ++ ++binary-groff: DH_OPTIONS=-pgroff ++binary-groff: install ++ dh_testdir ++ dh_testroot ++ # Scripts should be executable ++ chmod +x $(gtmp)/$(datadir)/font/devdvi/generate/CompileFonts ++ # Now in groff-base ++ rmdir $(gtmp)/usr/lib/groff/site-tmac || true ++ rmdir $(gtmp)/usr/share/groff/site-tmac || true ++ # 'make install' creates this directory when installing documentation. ++ dh_link usr/share/doc/groff-base usr/share/doc/groff ++ dh_installdocs -Xcopyright ++ifeq ($(GROFF_X11),yes) ++ install -m644 src/xditview/ChangeLog \ ++ $(gtmp)/usr/share/doc/groff/ChangeLog.gxditview ++endif ++ dh_installinfo doc/groff doc/groff-[0-9]* ++ dh_link ++ ++binary-arch: DH_OPTIONS=-a $(DH_EXCLUDE) ++binary-arch: $(BINARY_TARGETS) ++ dh_strip ++ dh_compress ++ dh_fixperms ++ dh_installdeb ++ dh_shlibdeps ++ dh_gencontrol ++ dh_md5sums ++ dh_builddeb ++ifneq ($(GROFF_X11),yes) ++ @echo ++ @echo "==========================================================" ++ @echo "WARNING! groff has been built without X support." ++ @echo "Please do not upload these packages to the Debian archive!" ++ @echo "==========================================================" ++ @echo ++endif ++ ++binary: binary-indep binary-arch ++ ++.PHONY: configure build build-arch build-indep clean install ++.PHONY: binary binary-arch binary-indep binary-groff-base binary-groff +--- groff-1.18.1.orig/debian/README.build ++++ groff-1.18.1/debian/README.build +@@ -0,0 +1,20 @@ ++Debian groff build process ++-------------------------- ++ ++People starting new ports of Debian should be aware that there is a circular ++build-dependency between the groff and xfree86 source packages. Fortunately, ++in both cases this is in order to build optional components: xfree86 needs ++groff to build some of its documentation, and groff needs xfree86 to build ++the gxditview display program. ++ ++To build groff without xfree86 installed, set the DEB_BUILD_OPTIONS ++environment variable to include the string "no-groff-x11". Please do not ++upload packages to the Debian archive that have been built in this way. ++ ++The gs, netpbm, and psutils build-dependencies need not be satisfied while ++bootstrapping. They are only necessary to build HTML documentation. ++ ++Once a new port has been fully bootstrapped, there should be no problems ++building groff routinely as with any other package. ++ ++ -- Colin Watson <cjwatson@debian.org> Tue, 22 Jan 2002 14:18:58 +0000 +--- groff-1.18.1.orig/debian/copyright ++++ groff-1.18.1/debian/copyright +@@ -0,0 +1,86 @@ ++This is the Debian GNU/Linux prepackaged version of the GNU groff ++document formatting system. ++GNU groff was written by James Clark <jjc@jclark.com>. ++It is now maintained by Ted Harding <ted.harding@nessie.mcc.ac.uk> and ++Werner Lemberg <wl@gnu.org>. ++ ++This Debian package was previously maintained by Fabrizio Polacco ++<fpolacco@debian.org>. ++It is now maintained by Colin Watson <cjwatson@debian.org>. ++ ++The original tarball came from <URL:ftp://groff.ffii.org/pub/groff/>: ++ 4c7a1b478d230696f14743772f31639f groff-1.18.1.tar.gz ++and was simply renamed to groff_1.18.1.orig.tar.gz. ++ ++Some patches have been applied to groff outside the debian directory. The ++most visible of these is a patch for Japanese support (contributed by ++Fumitoshi UKAI and others in the jgroff team), which adds the ascii8 and ++nippon devices and a number of font files. This has been discussed on the ++upstream mailing list, and the opinion there was that multi-byte language ++support would be better implemented using preprocessors and a UTF-8 core. ++However, at the time of writing, there are no known problems caused by this ++patch, and until a more complete solution is implemented upstream this ++provides a useful service to Japanese users of Debian. ++ ++The Debian diff also appends /usr/share/groff/tmac to the default macro path ++for compatibility with versions of groff earlier than 1.17 (patch by Colin ++Watson). ++ ++========================================================================= ++ ++Copyright (C) 1989-2000 Free Software Foundation, Inc. ++ Written by James Clark (jjc@jclark.com) ++ ++This file is part of groff. ++ ++groff is free software; you can redistribute it and/or modify it under ++the terms of the GNU General Public License as published by the Free ++Software Foundation; either version 2, or (at your option) any later ++version. ++ ++groff is distributed in the hope that it will be useful, but WITHOUT ANY ++WARRANTY; without even the implied warranty of MERCHANTABILITY or ++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++for more details. ++ ++You should have received a copy of the GNU General Public License along ++with groff; see the file COPYING. If not, write to the Free Software ++Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++On Debian systems, a copy of the GNU General Public License is available ++in /usr/share/common-licenses/GPL as part of the base-files package. ++ ++========================================================================= ++ ++Included in this release are implementations of troff, pic, eqn, tbl, ++grn, refer, -man, -mdoc, and -ms macros, and drivers for PostScript, TeX ++dvi format, HP LaserJet 4 printers, Canon CAPSL printers, HTML format ++(still alpha), and typewriter-like devices. Also included is a modified ++version of the Berkeley -me macros, an enhanced version of the X11 ++xditview previewer, and an implementation of the -mm macros contributed ++by Joergen Haegg (jh@axis.se). ++ ++xditview is copyrighted by MIT under the usual X terms. ++ ++/* ++ * Copyright 1991 Massachusetts Institute of Technology ++ * ++ * Permission to use, copy, modify, distribute, and sell this software and its ++ * documentation for any purpose is hereby granted without fee, provided that ++ * the above copyright notice appear in all copies and that both that ++ * copyright notice and this permission notice appear in supporting ++ * documentation, and that the name of M.I.T. not be used in advertising or ++ * publicity pertaining to distribution of the software without specific, ++ * written prior permission. M.I.T. makes no representations about the ++ * suitability of this software for any purpose. It is provided "as is" ++ * without express or implied warranty. ++ * ++ * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. ++ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION ++ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN ++ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ */ ++ +--- groff-1.18.1.orig/debian/groff.dirs ++++ groff-1.18.1/debian/groff.dirs +@@ -0,0 +1 @@ ++usr +--- groff-1.18.1.orig/debian/groff.postinst ++++ groff-1.18.1/debian/groff.postinst +@@ -0,0 +1,17 @@ ++#! /bin/sh -e ++ ++[ "$1" = configure ] || exit 0 ++ ++if dpkg --compare-versions "$2" lt-nl 1.17-1; then ++ # dpkg won't replace the directory /usr/share/doc/groff with a symlink, ++ # so do that now. ++ if [ ! -L /usr/share/doc/groff -a -d /usr/share/doc/groff ]; then ++ if rmdir /usr/share/doc/groff 2>/dev/null; then ++ ln -sf groff-base /usr/share/doc/groff ++ fi ++ fi ++fi ++ ++#DEBHELPER# ++ ++exit 0 +--- groff-1.18.1.orig/debian/groff-base.dirs ++++ groff-1.18.1/debian/groff-base.dirs +@@ -0,0 +1,2 @@ ++etc ++usr/lib/groff/site-tmac +--- groff-1.18.1.orig/debian/groff.links ++++ groff-1.18.1/debian/groff.links +@@ -0,0 +1,2 @@ ++usr/share/man/man1/grohtml.1.gz usr/share/man/man1/post-grohtml.1.gz ++usr/share/man/man1/grohtml.1.gz usr/share/man/man1/pre-grohtml.1.gz +--- groff-1.18.1.orig/debian/groff-base.files.in ++++ groff-1.18.1/debian/groff-base.files.in +@@ -0,0 +1,50 @@ ++usr/bin/eqn ++usr/bin/groff ++usr/bin/grog ++usr/bin/grops ++usr/bin/grotty ++usr/bin/neqn ++usr/bin/nroff ++usr/bin/pic ++usr/bin/soelim ++usr/bin/tbl ++usr/bin/troff ++usr/share/man/man1/eqn.1 ++usr/share/man/man1/groff.1 ++usr/share/man/man1/grog.1 ++usr/share/man/man1/grops.1 ++usr/share/man/man1/grotty.1 ++usr/share/man/man1/neqn.1 ++usr/share/man/man1/nroff.1 ++usr/share/man/man1/pic.1 ++usr/share/man/man1/soelim.1 ++usr/share/man/man1/tbl.1 ++usr/share/man/man1/troff.1 ++usr/share/groff/@VERSION@/eign ++usr/share/groff/@VERSION@/tmac/an-old.tmac ++usr/share/groff/@VERSION@/tmac/an.tmac ++usr/share/groff/@VERSION@/tmac/andoc.tmac ++usr/share/groff/@VERSION@/tmac/doc.tmac ++usr/share/groff/@VERSION@/tmac/doc-old.tmac ++usr/share/groff/@VERSION@/tmac/eqnrc ++usr/share/groff/@VERSION@/tmac/euc-jp.tmac ++usr/share/groff/@VERSION@/tmac/hyphen.us ++usr/share/groff/@VERSION@/tmac/latin1.tmac ++usr/share/groff/@VERSION@/tmac/man.tmac ++usr/share/groff/@VERSION@/tmac/mandoc.tmac ++usr/share/groff/@VERSION@/tmac/mdoc.tmac ++usr/share/groff/@VERSION@/tmac/mdoc/doc-common ++usr/share/groff/@VERSION@/tmac/mdoc/doc-ditroff ++usr/share/groff/@VERSION@/tmac/mdoc/doc-nroff ++usr/share/groff/@VERSION@/tmac/mdoc/doc-syms ++usr/share/groff/@VERSION@/tmac/pic.tmac ++usr/share/groff/@VERSION@/tmac/ps.tmac ++usr/share/groff/@VERSION@/tmac/psatk.tmac ++usr/share/groff/@VERSION@/tmac/psold.tmac ++usr/share/groff/@VERSION@/tmac/pspic.tmac ++usr/share/groff/@VERSION@/tmac/safer.tmac ++usr/share/groff/@VERSION@/tmac/troffrc ++usr/share/groff/@VERSION@/tmac/troffrc-end ++usr/share/groff/@VERSION@/tmac/tty-char.tmac ++usr/share/groff/@VERSION@/tmac/tty.tmac ++usr/share/groff/site-tmac +--- groff-1.18.1.orig/debian/groff-base.docs ++++ groff-1.18.1/debian/groff-base.docs +@@ -0,0 +1,9 @@ ++BUG-REPORT ++ChangeLog.jp ++MORE.STUFF ++NEWS ++PROBLEMS ++PROJECTS ++README ++README.jp ++TODO +--- groff-1.18.1.orig/debian/groff-base.mime ++++ groff-1.18.1/debian/groff-base.mime +@@ -0,0 +1 @@ ++application/x-troff-man; /usr/bin/nroff -mandoc -Tlatin1; copiousoutput; print=/usr/bin/nroff -mandoc -Tlatin1 | print text/plain:- +--- groff-1.18.1.orig/debian/README.Debian ++++ groff-1.18.1/debian/README.Debian +@@ -0,0 +1,53 @@ ++groff for Debian ++---------------- ++ ++As of version 1.17-1, Debian groff was split into three packages: ++groff-base, groff, and groff-x11. At version 1.18-1 the groff-x11 package ++was merged back into groff. The current organization is as follows: ++ ++ groff-base - a stripped-down groff package containing the components ++ required to read man pages in ASCII, Latin-1, UTF-8, and ++ PostScript ++ groff - all other components ++ ++If you only need groff in order to read man pages in common formats, you can ++remove the main groff package and save some disk space. For more ++information, please see 'dpkg --print-avail <package>' or 'apt-cache show ++<package>'. ++ ++If you see error messages like "groff: can't find `DESC' file", make sure ++that you have the groff package installed as well as groff-base, as this ++message indicates that the requested output device is not installed. ++ ++Where is the groff documentation? It's not easy to find when you're ++unfamiliar with the system (as I well remember). The 'SEE ALSO' section of ++the roff(7) man page has a good index. ++ ++The macro path in Debian groff is as follows: ++ ++ /usr/lib/groff/site-tmac ++ - old directory for compatibility purposes ++ /usr/share/groff/site-tmac (symlink to /etc/groff) ++ - local macro configuration, such as man.local ++ /usr/share/groff/<version>/tmac ++ - macros installed as part of groff ++ /usr/share/groff/tmac ++ - macros installed by other Debian packages ++ ++If you're using a UTF-8 locale and are having problems searching for dashes ++in man pages such as those in command-line options, this may be because the ++man page uses "-" rather than "\-" to represent them, so they get rendered ++as a Unicode hyphen which isn't the one you can type conveniently on your ++keyboard. These man pages should be fixed. However, you can make groff use a ++plain ASCII dash in this case by editing both /etc/groff/man.local and ++/etc/groff/mdoc.local and uncommenting the final request, so that it looks ++like this: ++ ++. \" Many UTF-8 man pages use "-" instead of "\-" for dashes such as those ++. \" in command-line options. This is a bug in those pages, but if you want ++. \" all hyphens to be rendered as the ASCII-compatible HYPHEN-MINUS ++. \" anyway, then uncomment this. ++. if '\*[.T]'utf8' \ ++. char - \N'45' ++ ++ -- Colin Watson <cjwatson@debian.org> Sat, 15 Nov 2003 17:42:38 +0000 +--- groff-1.18.1.orig/debian/groff-base.preinst ++++ groff-1.18.1/debian/groff-base.preinst +@@ -0,0 +1,30 @@ ++#! /bin/sh -e ++ ++case $1 in ++ install|upgrade) ++ if dpkg --compare-versions "$2" lt 1.17-2; then ++ if [ -d /usr/share/groff/site-tmac ]; then ++ if [ -d /etc/groff ]; then ++ # Erm. This shouldn't happen. ++ echo "Moving /usr/share/groff/site-tmac out of the way." ++ mv -f /usr/share/groff/site-tmac \ ++ /usr/share/groff/site-tmac.old ++ else ++ echo "Moving /usr/share/groff/site-tmac to /etc/groff." ++ mv -f /usr/share/groff/site-tmac /etc/groff ++ touch /usr/share/groff/site-tmac.moved-by-preinst ++ fi ++ fi ++ if [ -e /etc/tmac.man.local ]; then ++ echo "Moving /etc/tmac.man.local to /etc/groff/man.local." ++ mkdir -p /etc/groff ++ mv -f /etc/tmac.man.local /etc/groff/man.local ++ touch /etc/tmac.man.local.moved-by-preinst ++ fi ++ fi ++ ;; ++esac ++ ++#DEBHELPER# ++ ++exit 0 +--- groff-1.18.1.orig/debian/groff-base.postinst ++++ groff-1.18.1/debian/groff-base.postinst +@@ -0,0 +1,16 @@ ++#! /bin/sh -e ++ ++case $1 in ++ configure) ++ if [ -e /etc/tmac.man.local.moved-by-preinst ]; then ++ rm -f /etc/tmac.man.local.moved-by-preinst ++ fi ++ if [ -e /usr/share/groff/site-tmac.moved-by-preinst ]; then ++ rm -f /usr/share/groff/site-tmac.moved-by-preinst ++ fi ++ ;; ++esac ++ ++#DEBHELPER# ++ ++exit 0 +--- groff-1.18.1.orig/debian/groff-base.postrm ++++ groff-1.18.1/debian/groff-base.postrm +@@ -0,0 +1,21 @@ ++#! /bin/sh -e ++ ++case $1 in ++ abort-install|abort-upgrade) ++ if [ -e /etc/tmac.man.local.moved-by-preinst ]; then ++ mv -f /etc/groff/man.local /etc/tmac.man.local ++ rm -f /etc/tmac.man.local.moved-by-preinst ++ fi ++ if [ -e /usr/share/groff/site-tmac.moved-by-preinst ]; then ++ mv -f /etc/groff /usr/share/groff/site-tmac ++ rm -f /usr/share/groff/site-tmac.moved-by-preinst ++ fi ++ if [ -d /usr/share/groff/site-tmac.old ]; then ++ mv -f /usr/share/groff/site-tmac.old /usr/share/groff/site-tmac ++ fi ++ ;; ++esac ++ ++#DEBHELPER# ++ ++exit 0 +--- groff-1.18.1.orig/debian/groff-base.links.in ++++ groff-1.18.1/debian/groff-base.links.in +@@ -0,0 +1,8 @@ ++etc/groff usr/share/groff/site-tmac ++usr/bin/eqn usr/bin/geqn ++usr/bin/tbl usr/bin/gtbl ++usr/bin/pic usr/bin/gpic ++usr/share/groff/@VERSION@ usr/share/groff/current ++usr/share/man/man1/eqn.1.gz usr/share/man/man1/geqn.1.gz ++usr/share/man/man1/tbl.1.gz usr/share/man/man1/gtbl.1.gz ++usr/share/man/man1/pic.1.gz usr/share/man/man1/gpic.1.gz +--- groff-1.18.1.orig/debian/groff.docs ++++ groff-1.18.1/debian/groff.docs +@@ -0,0 +1,3 @@ ++doc/meintro.txt ++doc/meref.txt ++doc/pic.txt +--- groff-1.18.1.orig/ChangeLog.jp ++++ groff-1.18.1/ChangeLog.jp +@@ -0,0 +1,345 @@ ++2002-11-04 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * src/libs/libgroff/encoding.cc: for C or POSIX locale, ++ use ascii8 encoding handler ++ * font/devX*: new font desc for M, G ++ * src/xditview: support ENABLE_MULTIBYTE (Japanese only?) ++ ++2002-10-09 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * update groff-1.18-7 ++ ++2002-09-23 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * src/roff/troff/input.cc: fix bug in wchar_charinfo() ++ check u<CODE> where <CODE> is 4- HEX chars ++ * src/device/grohtml/post-html.cc: works ENABLE_MULTIBYTE ++ * font/devhtml: add font M, G for Japanese ++ ++2002-09-22 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * new multibyte patch ++ ++2001-08-16 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * tmac/euc-jp.tmac: ++ fix disappearing `-' char ++ ++2001-07-21 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * add ENABLE_MULTIBYTE support to src/xditview ++ ++2001-07-20 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * introduce "fontset" in font/*/DESC ++ obsoletes "ondemand" ++ ++2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * don't use input_encoding->is_wchar_code() ++ * fix troffrc empty line ++ * fix duplicate strcasecmp() ++ ++2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * sub font selection move into environment::add_char() ++ it makes possible to use \[uni<code>] ++ ++2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * use generic iconv_handler instead of euc_handler ++ * internal code now uses UCS-2 ++ ++2001-07-19 Fumitoshi UKAI <ukai@debian.or.jp ++ ++ * wchar%x -> uni%X ++ - still no code conversion ++ - font description is not accurate ++ * change "fixed" to charset range ++ ++2001-07-18 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * Configuration Change: ++ obsolete: --enable-japanese (#ifdef NIPPON) ++ new: --enable-multibyte (#ifdef ENABLE_MULTIBYTE) ++ ++2001-07-18 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * create charinfo for wchar on demand (src/roff/troff/input.cc) ++ * use "fixed" for font wchar metric (src/libs/libgroff/font.cc) ++ - font/*/M,G ++ ++2001-07-17 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * add utf8 encoding handler to src/libs/libgroff/encoding.cc ++ (this utf8 encodig handler is too slow!) ++ ++2001-07-15 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * based on groff 1.17.2-1 ++ * use src/include/encoding.h instead of eucmac.h ++ * introduce src/libs/libgroff/encoding.cc ++ * introduce tmac/euc-jp.tmac for EUC-JP documents ++ ++2001-05-24 Fumitoshi UKAI <ukai@debian.or.jp> ++ ++ * Apply for groff-1.17 ++ ++2000-01-06 Yoshiaki Yanagihara <yochi@debian.or.jp> ++ ++ * Apply japanese patch "jgroff-0.101" ++ (thanks hanataka@abyss.rim.or.jp). ++ * Added japanese extention option at configure.in, aclocal.m4. ++ ++Sat Jan 1 17:10:32 JST 2000 HANATAKA Shinya <hanataka@abyss.rim.or.jp> ++ ++ * jgroff-0.100 をそのまま groff-1.14 に適用して jgroff-101 ++ とした。 ++ * grohtml を日本語に対応させる。 ++ * 日本語マニュアル用に tmac.docj と tmac.andocj マクロを追加。 ++ ++Sun Mar 15 18:23:12 1998 Yoshiaki Yanagihara <yochi@debian.or.jp> ++ ++ * jgroff のベースを groff-1.11a に変更し、jgroff-0.99パッチを ++ 適用したものを jgroff-0.100 とした。 ++ 基本的に jgroff-0.99 と機能は同じ *はず*。 ++ ++Fri Dec 22 11:47:46 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp> ++ ++ * バージョン0.99。 ++ ++Mon Dec 18 18:28:37 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp> ++ ++ * tmac/Makefile.sub: ターゲット stamp-wrap、uninstall_sub が一部 ++ OSのshで構文エラーとなるオリジナルバグを修正。 ++ ++Wed Dec 13 15:09:26 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp> ++ ++ * jgroff.sh: オリジナルでインストールパスが変更されたのに合わせ、 ++ GROFF_TMAC_PATH、GROFF_FONT_PATHをshare/groff配下に変更。 ++ ++Sat Dec 9 15:28:36 1995 Kitagawa Toshiyuki <tm-kita@kh.rim.or.jp> ++ ++ * wchar.hからeucmac.hにファイル名を変更。 ++ ++Fri Dec 8 12:15:47 1995 Yoshio Takaeda <shio@yinyan.bekkoame.or.jp> ++ ++ * troff/env.cc(add_char): 『ASCII文字 + 改行コード + EUC文字』という ++ パターンの時、改行コードがスペースに変換されないバグを修正。 ++ ++Thu Dec 7 21:35:06 1995 Yanagihara Yoshiaki <yosiaki@bsd2.kbnes.nec.co.jp> ++ ++ * troff/input.cc (process_input_stack): gcc-2.7.0で変数定義がスコープ ++ 違反となってしまう箇所を修正。 ++ ++Thu Dec 7 21:35:06 1995 Yanagihara Yoshiaki <yosiaki@bsd2.kbnes.nec.co.jp> ++ ++ * jgroffのベースソースをgroff-1.10に変更。 ++ ++Thu Apr 6 16:56:32 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * devdvi/M.proto-NTT: DNPのpkフォントのチェックサム値が0なので、こ ++ れに合わせてchecksumの値を0に変更。 ++ ++Mon Apr 3 20:36:37 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/env.cc (possibly_break_line): ++ lineリスト中のkword_space_nodeを調整する処理で、line中にこのノード ++ が含まれていない場合は処理をスキップするようにした(EUCコードを含ま ++ ないroffを処理する場合にはkword_space_nodeは現れないので処理が高速 ++ 化される)。 ++ ++Mon Apr 3 20:36:37 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/env.cc (add_char): hwkern、vlowerの初期化はdevice初期化後 ++ に一度だけ行えば良いのでenvironmentクラスのコンストラクタでこれを ++ 行うように変更。 ++ ++Sat Apr 1 17:57:23 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/input.cc (mount_on_demand): on demandでマウントされるフォ ++ ント名をデバイスごとのDESCファイルで指定できるように変更。 ++ ディレクティブondemandで指定したフォントがon demandでマウントされる。 ++ ++Fri Mar 31 20:23:43 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * libgroff/font.cc (load): 漢字フォントファイル用にディレクティブ ++ fixedkanjiを追加。これは各文字のメトリックが全て同じである事を指定 ++ するもので、fixedkanjiが指定されている場合はcharsetは評価されない ++ ため漢字フォントのロードが速い。 ++ ++Thu Mar 30 18:20:24 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff: node識別を文字列比較で行っていたが高速化のため数値比較に ++ 変更した。 ++ ++Wed Mar 29 20:20:49 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/input.cc: 漢字フォント(MとG)をon demandでマウントするよう ++ に変更。これによって漢字を含まないroffファイルの処理時間が高速化さ ++ れた。 ++ ++Fri Mar 10 15:34:26 1995 Shigeki Yoshida <shige@theta.iis.u-tokyo.ac.jp> ++ ++ * troff/input.cc (process): geqnで、 ++ ++ .EQ ++ 要素 sub 記号 ++ .EN ++ ++ を処理すると、"illegal token in argument to \Z"となってしまうバグ ++ (\Zシーケンスの引数にEUC文字が来た場合の対応漏れ)を修正。 ++ ++Mon Feb 6 11:22:33 1995 Yoshio Takaeda <e50110@sakura.kudpc.kyoto-u.ac.jp> ++ ++ * troff/input.cc: 行頭禁則文字のEUCコードの一部が不正。 ++ ++Mon Jan 30 14:02:54 1995 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * バージョン0.97。 ++ ++Fri Dec 10 14:26:14 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> ++ ++ * devdvi/M.proto: NTT JTeXとASCII日本語TeX両方のdviファイルを扱えるよう ++ M.protoファイルを変更。 ++ ++Fri Dec 9 14:26:14 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> ++ ++ * troff/node.cc: boldfont_list[]にフォント名 B を登録していなかっ ++ たため、dviファイルにゴシック体が出力されていなかった。 ++ ++Fri Dec 9 14:23:22 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> ++ ++ * grotty/tty.cc (add_char): EUC文字に対してWCHAR_MODEを設定してい ++ なかったため、tty出力でゴシック体が二重打ちされていなかった。 ++ ++Fri Dec 9 14:19:33 1994 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> ++ ++ * devdvi/Makefile.sub: フォントファイル G で、nameディレクティブが ++ `name M'になっている。 ++ ++Wed Nov 30 13:24:54 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * バージョン0.96。 ++ ++ * grodvi/dvi.cc: FreeBSD 1.1.5Rのstrcmp(3)では引数にヌルポインタを ++ 渡すとコアダンプしてしまうので、これを回避するコードを追加した。 ++ ++Tue Nov 29 13:52:54 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/input.cc: EUCのスペース文字(0xa1a1)はASCIIのスペース文字と ++ して処理するよう修正。 ++ ++ * devnippon/createM: JISX0208において文字が未定義の部分については ++ フォントファイルに出力しないよう修正。 ++ ++Mon Nov 28 18:15:31 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * grodvi/dvi.cc: grodviを日本語化した。 ++ ++Fri Nov 25 15:39:05 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/env.cc: EUC文字で始まる行に対して均等割り付けが行われた場 ++ 合、行頭に余分な空白が入る事があったのでこれを修正した。 ++ ++Fri Nov 18 20:19:55 1994 Masubuchi Toshimichi <tmasu@st.rim.or.jp> ++ ++ * devnippon/createM.c: createMの終了ステータスが不定になるため、 ++ makeが終了してしまう。createMの終了ステータスが0になるよう修正。 ++ ++ * devnippon/Makefile.sub: PATH環境変数にカレントディレクトリが含ま ++ れていない場合、devnippon/Mをmakeする時点でcreateMが見つからずmake ++ エラーになるバグを修正。 ++ ++Thu Nov 17 17:11:26 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * devnippon/createM.c: gets()をfgets()に変更。 ++ ++Sat Nov 12 13:38:19 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * バージョン0.95。 ++ ++ * troff/env.cc: .stt リクエストを追加(ローカルなマニュアル書式に合 ++ わせるため -> このリクエストは非公開)。 ++ ++ * troff/input.cc (init_charset_table): ASCIIの行頭禁則文字として ++ ,:;>}を追加した。 ++ ++ * EUCフォントファイルは、make時にツールによって生成するよう変更。 ++ これによりpatchサイズがかなり小さくなった。 ++ ++Fri Nov 11 20:53:00 1994 Kitagawa Toshiyuki <kitagawa@bsd2.kbnes.nec.co.jp> ++ ++ * troff/env.cc (add_char): <EUC文字> + <ASCII文字>の場合、間に入れ ++ る空白は禁則に違反しないかぎりブレーク可能な空白が入るよう修正した。 ++ ++ ++Tue Oct 25 04:46:09 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * バージョン0.94。 ++ ++ * libdriver/input.cc (do_file): -Tlatin1でEUCではない文字コードを ++ EUCと判断してしまうバグを修正。 ++ ++Mon Oct 24 07:16:19 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * troff/node.cc (is_boldfont): FreeBSD 1.1.5で、ゼロ番地参照のためコ ++ アダンプするバグを修正。 ++ ++ * indxbib/dirnamemax.c: FreeBSD 1.1.5はpathconf()を持っていないので ++ _POSIX_VERSIONをundefした。 ++ ++ * バージョン0.93。 ++ ++ * geqnを日本語化した。 ++ ++ * devps/DESCのwcharkernを設定すると行頭に空白が入ってしまうバグの ++ 修正方法を変更。 ++ ++Sat Oct 22 08:19:15 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * バージョン0.90。 ++ ++ * xtotroffを日本語化。 ++ ++Fri Oct 21 05:33:02 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * devps/DESCのwcharkernを設定すると行頭に空白が入ってしまう事があ ++ ったので、これを修正。 ++ ++ * pre-releaseバージョン。 ++ ++ * gxditviewを日本語化した(フォントメトリックの取り出しがいい加減)。 ++ ++Thu Oct 20 05:23:09 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * フォント番号3にボールド体以外のフォントをマウントした場合、漢字フォ ++ ントがゴシック体になってしまうバグを修正。 ++ ++Wed Oct 19 06:48:55 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * betaバージョン。 ++ ++Tue Oct 18 05:02:59 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * pic: ++ gpicを日本語対応した。 ++ ++ * tbl: ++ gtblを日本語対応した。 ++ ++ * troff/troff: ++ Times-Bold以外のボールド体がカレントフォントの時、漢字フォントがゴ ++ シックに切り替わらないバグを修正。 ++ ++ * troff/troff: ++ DESCにディレクティブwcharkernを追加し、ASCII文字とEUC文字の間に、 ++ 指定したunit数だけbreak不可能な空白を入れるようにした。 ++ ++ * troff/troff: ++ DESCにディレクティブlowerwcharを追加し、ASCII文字に対してEUC文字を、 ++ 指定したunit数だけ下げるようにした(ASCII文字が落ち込んで見えるため)。 ++ ++Fri Oct 14 08:29:06 1994 Kitagawa Toshiyuki (kitagawa@bsd2.kbnes.nec.co.jp) ++ ++ * aplahバージョン。 +--- groff-1.18.1.orig/README.jp ++++ groff-1.18.1/README.jp +@@ -0,0 +1,142 @@ ++ ++ 日本語対応版 groff-1.12 (jgroff-0.101) ++ ++ ++ 北川 信亨 (Kitagawa Toshiyuki) ++ tm-kita@kh.rim.or.jp ++ ++ 柳原 良亮 (Yanagihara Yoshiaki) ++ yochi@debian.or.jp ++ ++ GNUのroffフォーマッタgroff(version 1.12)の日本語対応を行ないました。 ++ 上位互換となっていますので、日本語を含まないroffデータはオリジナルど ++おりの動作になります。日本語化に関する修正部分についての著作権はGNU ++General Public License Version 2 に従います(詳細はCOPYINGを御覧ください)。 ++ ++ 日本語groff(jgroff)の現バージョンは0.101(最終β版)です。このバージョン ++では以下のモジュールが日本語化されています。 ++ ++ groff ... groffドライバ ++ gtroff ... groff本体 ++ grotty ... 端末用ポストプロセッサ ++ grops ... PostScript用ポストプロセッサ ++ grohtml ... HTML用ポストプロセッサ(Thanks HANATAKA Shinya ++ <hanataka@abyss.rim.or.jp>) ++ grodvi ... DVI用ポストプロセッサ (NTT JTeX or ASCII日本語TeX) ++ gxditview ... Xウィンドウ用ポストプロセッサ ++ gtbl ... tblマクロ用プリプロセッサ ++ gpic ... picマクロ用プリプロセッサ ++ geqn ... eqnマクロ用プリプロセッサ ++ xtotroff ... Xのフォントからgroff用フォントファイルを作成す ++ るツール ++ ++# lj4ポストプロセッサ、bib関連のコマンドは日本語未対応です。 ++ ++ ++◎ インストール ++ ++ 以下の環境でmake出来ることを確認しています。 ++ ++ ☆ FreeBSD 2.1.0-RELEASE ++ XFree86-3.1.2, gcc 2.6.3 ++ ++ ☆ Debian GNU/Linux 2.2 ++ ++ ☆ NEC EWS/4800/310 ++ SVR4.2 Release9.1 Rev.B, X11R5, gcc 2.6.0 ++ ++ (1) オリジナルと同様configureを実行した後、make & installして下さい。 ++ 詳しくはINSTALLを参照してください。 ++ ++ *) grodviはNTT JTeX形式またはASCII日本語TeX形式のDVIファイルをサポー ++ トしています。groffが出力するDVIファイルをASCII日本語TeX形式に ++ したい場合はconfigure --JTeX=ASCIIとしてください。 ++ --JTeXオプションを指定しなかった場合はNTT JTeX形式になります。 ++ ++ (2) groffのmakeの後、gxditview(groffのXウィンドウ用ポストプロセッサ) ++ をmakeします。トップディレクトリ直下のxditviewへcdして、 ++ ++ % xmkmf ++ % make depend ++ % make all ++ % make install install.man ++ ++ で、インストール完了です。 ++ ++ ++◎ 使い方 ++ ++ groffの-Tオプションに-Tnippon(端末表示)を追加した以外はオリジナルのま ++まです。 ++以下は使用例。 ++ ++ (1) groff -Tnippon -man groff.jman ++ ++ 日本語を含むroffファイル(groff.jman)をmanマクロを使ってフォーマットし、 ++端末に表示します。 ++ ++ (2) groff -Tps -man groff.jman ++ ++ 日本語を含むroffファイルをフォーマットし、PostScriptに変換します。 ++ ++ (3) groff -TX100 -man groff.jman ++ ++ 日本語を含むroffファイルをフォーマットし、Xウィンドウに表示します。 ++ ++ (4) groff -Tdvi -man groff.jman ++ ++ 日本語を含むroffファイルをフォーマットし、DVIファイルを出力します。 ++ ++ ++◎ 日本語化について ++ ++・ 日本語文字コードは日本語EUC(のコードセット1)のみサポートしています。 ++ ++・ 日本語フォントについては、カレントフォントがボールド体の時はゴシッ ++ ク体に、それ以外のフォント(ローマン、イタリック、イタリックボールド ++ 等)がカレントフォントの時は明朝体に、自動的に切り替わります。日本語 ++ フォントを直接指定することは出来ません。 ++ ++ (注) フォントファイル名が'B'で終っているフォント(B、TB、HNBなど)を ++ ボールドフォントとしています。 ++ ++・ 行頭、および行末禁則に対応しています。それぞれの禁則文字は、 ++ ++ 行頭禁則文字: 、 。,.・:;?!)〕]}」』】 ++ ぁぃぅぇぉっゃゅょァィゥェォッャュョ ++ . ? ! " ' ) ] * , : ; > } ++ 行末禁則文字: ( 〔[{「『【 ++ ++ を定義しています。 ++ ++・ -Tpsを指定した場合、EUC文字とASCII文字の間には、幅の狭い空白が自動 ++ 的に挿入されます。この空白の幅はdevps/DESCのwcharkernで指定します。 ++ unit単位です。0を指定すると空白は挿入されなくなります。 ++ ++・ -Tpsを指定した場合、EUC文字はASCII文字に対して少し下げて出力されま ++ す(そのままだとASCII文字が落ち込んで見えるため)。この下げ幅は ++ devps/DESCのlowerwcharで指定します。unit単位です。0を指定すると字下 ++ げは行なわれません。 ++ ++・ オリジナルでは改行コードは無条件にスペース文字に変換されますが、EUC ++ 文字で囲まれた改行コードはスペースに変換せず無視するようにしました。 ++ ++・ EUCのスペース文字(0xa1a1)はASCIIのスペース文字として処理されます。 ++ ++ ++◎ 謝辞 ++ ++grodviのASCII日本語TeX対応は、宇都宮大学の横田さんが行なってくださいま ++した。grohtmlの日本語(EUC)対応は、花嵩信哉さんが行ってくれました。 ++また、多くの方からバグに関する報告、修正イメージを送って頂きました。 ++御協力くださった皆様にはとても感謝しております。有難うございました。 ++ ++ ++◎ お願い ++ ++現バージョンではlj4ポストプロセッサ、bib関連のコマンド群が日本語化され ++ておりません。これらの日本語化を行ってくださる方を募集致しております。 ++ぜひ御協力ください。また、日本語対応groffに関して御意見、御希望等を ++是非お聞かせください。今後の参考にさせて頂きます(もちろんバグ報告も ++歓迎です!)。 ++以上はE-Mailにて、tm-kita@kh.rim.or.jp宛にお送りください。 +--- groff-1.18.1.orig/TODO.jp ++++ groff-1.18.1/TODO.jp +@@ -0,0 +1,19 @@ ++TODO lists ++ ++- configure ++ nl_langinfo() ++ iconv() ++ ++- font/devdvi ++ G,M -- NTT and/or ASCII ++- src/devices ++ grohtml ++ grodvi ++ grolbp ++ grolj4 ++- src/xditview ++ ++- command line option to specify input/output encoding ++- font code? ++ can we assume wchar code == font code? ++ [to simplify indexing] @@ -0,0 +1,73 @@ +#!/bin/bash +# Emulate nroff with groff. + +prog="$0" +charset_in=iso-8859-1 +charset_out=`locale charmap 2>/dev/null` +opts= + +for i +do + case $1 in + -c) + opts="$opts -P-c" ;; + -h) + opts="$opts -P-h" ;; + -[eq] | -s* | -u* | -T* ) + # ignore these options + ;; + -[mrnoT]) + echo $"option $1 requires an argument" >&2 + exit 1 ;; + -[iptSUC] | -[mrno]*) + opts="$opts $1" ;; + -v | --version) + echo $"GNU nroff (groff) with Red Hat i18n/l10n support" + exit 0 ;; + --legacy) + shift + charset_in=$1 ;; + --help) + echo $"usage: $prog [-cChipt] [-mNAME] [-nNUM] [--legacy CHARSET] [-oLIST] [-rCN] [FILE...]" + exit 0 ;; + --) + shift + break ;; + -) + break ;; + -*) + echo $"$prog: invalid option $1" >&2 + exit 1 ;; + *) + break ;; + esac + shift +done + +TMPFILE=$(mktemp /tmp/man.XXXXXX) +trap "rm -f $TMPFILE" 0 1 2 3 15 + +cat ${1+"$@"} > ${TMPFILE} + +if iconv -f utf-8 -t utf-8 -o /dev/null ${TMPFILE} 2>/dev/null +then + charset_in=utf-8 +else + echo XXX + echo XXX $"WARNING: old character encoding and/or character set" + echo XXX +fi + +# en_US is chosen arbitrarily; any UTF-8 locale should work +export LC_ALL=en_US.UTF-8 + +# This shell script is intended for use with man, so warnings are +# probably not wanted. Also load nroff-style character definitions. + +/usr/bin/iconv -f ${charset_in} -t utf-8 ${TMPFILE} | \ + /usr/bin/groff -mtty-char -Tutf8 $opts 2>/dev/null | \ + /usr/bin/iconv -f utf-8 -t ${charset_out}//translit + +rm -f ${TMPFILE} + +# eof |