--- 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]