This repository has been archived on 2023-08-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
KableDistro/base-source/groff-1.18.1.1-debian_fixes-1.patch

18889 lines
360 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Submitted By: Archaic (archaic -aT- linuxfromscratch -DoT- org)
Date: 2006-03-07
Initial Package Version: 1.18.1.1
Origin: http://ftp.debian.org/debian/pool/main/g/groff/groff_1.18.1.1-11.diff.gz
Upstream Status: This is a debian-specific patch
Description: Adds the ascii8 and nippon devices to groff for man-db.
--- groff-1.18.1.1.orig/README.jp
+++ groff-1.18.1.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(端末表示)を追加した以外はオリジナルのま
+まです。
+以下は使用例。
+
+ () groff -Tnippon -man groff.jman
+
+ 日本語を含むroffファイル(groff.jman)をmanマクロを使ってフォーマットし、
+端末に表示します。
+
+ () groff -Tps -man groff.jman
+
+ 日本語を含むroffファイルをフォーマットし、PostScriptに変換します。
+
+ () groff -TX100 -man groff.jman
+
+ 日本語を含むroffファイルをフォーマットし、Xウィンドウに表示します。
+
+ () 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.1.orig/src/include/config.hin
+++ groff-1.18.1.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.1.orig/src/include/encoding.h
+++ groff-1.18.1.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.1.orig/src/include/lib.h
+++ groff-1.18.1.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.1.orig/src/include/device.h
+++ groff-1.18.1.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.1.orig/src/include/config.h
+++ groff-1.18.1.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.1.orig/src/include/printer.h
+++ groff-1.18.1.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.1.orig/src/include/font.h
+++ groff-1.18.1.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.1.orig/src/include/driver.h
+++ groff-1.18.1.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.1.orig/src/libs/libdriver/input.cc
+++ groff-1.18.1.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.1.orig/src/libs/libdriver/printer.cc
+++ groff-1.18.1.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.1.orig/src/libs/libgroff/fontfile.cc
+++ groff-1.18.1.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.1.orig/src/libs/libgroff/font.cc
+++ groff-1.18.1.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.1.orig/src/libs/libgroff/searchpath.cc
+++ groff-1.18.1.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.1.orig/src/libs/libgroff/nametoindex.cc
+++ groff-1.18.1.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.1.orig/src/libs/libgroff/encoding.cc
+++ groff-1.18.1.1/src/libs/libgroff/encoding.cc
@@ -0,0 +1,441 @@
+// -*- 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 || strncmp(locale, "zh", 2) == 0 ||
+ (strncmp(locale, "ko", 2) == 0 && strcmp(charset, "UTF-8") == 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.1.orig/src/libs/libgroff/Makefile.sub
+++ groff-1.18.1.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.1.orig/src/libs/libgroff/tmpfile.cc
+++ groff-1.18.1.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.1.orig/src/utils/tfmtodit/tfmtodit.cc
+++ groff-1.18.1.1/src/utils/tfmtodit/tfmtodit.cc
@@ -650,7 +650,7 @@
gives the groff name of the character, `i' gives its index in
the encoding, which is filled in later (-1 if it does not appear). */
-struct {
+struct S {
const char *ch;
int i;
} lig_chars[] = {
@@ -670,7 +670,7 @@
// Each possible ligature appears in this table.
-struct {
+struct S2 {
unsigned char c1, c2, res;
const char *ch;
} lig_table[] = {
--- groff-1.18.1.1.orig/src/preproc/eqn/eqn.y
+++ groff-1.18.1.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.1.orig/src/preproc/eqn/lex.cc
+++ groff-1.18.1.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.1.orig/src/preproc/eqn/main.cc
+++ groff-1.18.1.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.1.orig/src/preproc/eqn/text.cc
+++ groff-1.18.1.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.1.orig/src/preproc/eqn/box.cc
+++ groff-1.18.1.1/src/preproc/eqn/box.cc
@@ -80,7 +80,7 @@
int nroff = 0; // should we grok ndefine or tdefine?
-struct {
+struct S {
const char *name;
int *ptr;
} param_table[] = {
--- groff-1.18.1.1.orig/src/preproc/html/pre-html.cc
+++ groff-1.18.1.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.1.orig/src/preproc/grn/hdb.cc
+++ groff-1.18.1.1/src/preproc/grn/hdb.cc
@@ -115,7 +115,6 @@
type = DBGetType(string); /* interpret element type */
if (type < 0) { /* no more data */
done = TRUE;
- (void) fclose(file);
} else {
#ifdef UW_FASTSCAN
(void) xscanf(file, &x, &y); /* always one point */
--- groff-1.18.1.1.orig/src/preproc/refer/command.cc
+++ groff-1.18.1.1/src/preproc/refer/command.cc
@@ -632,7 +632,7 @@
? means that the previous argument is optional, * means that the
previous argument can occur any number of times. */
-struct {
+struct S {
const char *name;
command_t func;
const char *arg_types;
--- groff-1.18.1.1.orig/src/devices/grotty/grotty.man
+++ groff-1.18.1.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.1.orig/src/devices/grotty/tty.cc
+++ groff-1.18.1.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.1.orig/src/devices/grops/ps.cc
+++ groff-1.18.1.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.1.orig/src/devices/grops/ps.h
+++ groff-1.18.1.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.1.orig/src/devices/grohtml/html.h
+++ groff-1.18.1.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.1.orig/src/devices/grohtml/post-html.cc
+++ groff-1.18.1.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.1.orig/src/devices/grodvi/dvi.cc
+++ groff-1.18.1.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.1.orig/src/xditview/encoding.h
+++ groff-1.18.1.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.1.orig/src/xditview/lex.c
+++ groff-1.18.1.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.1.orig/src/xditview/Dvi.c
+++ groff-1.18.1.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.1.orig/src/xditview/parse.c
+++ groff-1.18.1.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.1.orig/src/xditview/DviChar.c
+++ groff-1.18.1.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.1.orig/src/xditview/config.h
+++ groff-1.18.1.1/src/xditview/config.h
@@ -0,0 +1,4 @@
+#ifndef _config_h
+#include "../include/config.h"
+#define _config_h
+#endif
--- groff-1.18.1.1.orig/src/xditview/XFontName.c
+++ groff-1.18.1.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.1.orig/src/xditview/GXditview.ad
+++ groff-1.18.1.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.1.orig/src/xditview/GXditview-ad.h
+++ groff-1.18.1.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.1.orig/src/xditview/DviP.h
+++ groff-1.18.1.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.1.orig/src/xditview/device.c
+++ groff-1.18.1.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.1.orig/src/xditview/page.c
+++ groff-1.18.1.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.1.orig/src/xditview/FontMap.jisx0208
+++ groff-1.18.1.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.1.orig/src/xditview/xditview.c
+++ groff-1.18.1.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.1.orig/src/xditview/xtotroff.c
+++ groff-1.18.1.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.1.orig/src/xditview/DviChar.h
+++ groff-1.18.1.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.1.orig/src/xditview/draw.c
+++ groff-1.18.1.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;
@@ -368,7 +418,11 @@
dw->dvi.state->font_size, c, &wid))
return;
if (dw->dvi.native) {
+#ifdef ENABLE_MULTIBYTE
+ DoCharacter (dw, c, wid, NULL);
+#else
DoCharacter (dw, c, wid);
+#endif
return;
}
map = QueryFontMap (dw, dw->dvi.state->font_number);
@@ -379,7 +433,11 @@
name = device_name_for_code ((DeviceFont *)0, c)) {
int code = DviCharIndex (map, name);
if (code >= 0) {
+#ifdef ENABLE_MULTIBYTE
+ DoCharacter (dw, code, wid, map->char2XChar2b);
+#else
DoCharacter (dw, code, wid);
+#endif
break;
}
if (FakeCharacter (dw, name, wid))
@@ -387,13 +445,14 @@
}
}
+void
ClearPage (dw)
DviWidget dw;
{
XClearWindow (XtDisplay (dw), XtWindow (dw));
}
-static
+static void
setGC (dw)
DviWidget dw;
{
@@ -417,7 +476,7 @@
}
}
-static
+static void
setFillGC (dw)
DviWidget dw;
{
@@ -444,6 +503,7 @@
}
}
+void
DrawLine (dw, x, y)
DviWidget dw;
int x, y;
@@ -459,6 +519,7 @@
xp + DeviceToX (dw, x), yp + DeviceToX (dw, y));
}
+void
DrawCircle (dw, diam)
DviWidget dw;
int diam;
@@ -473,6 +534,7 @@
d, d, 0, 64*360);
}
+void
DrawFilledCircle (dw, diam)
DviWidget dw;
int diam;
@@ -490,6 +552,7 @@
d, d, 0, 64*360);
}
+void
DrawEllipse (dw, a, b)
DviWidget dw;
int a, b;
@@ -501,6 +564,7 @@
DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
}
+void
DrawFilledEllipse (dw, a, b)
DviWidget dw;
int a, b;
@@ -515,6 +579,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 +606,7 @@
rad*2, rad*2, angle1, angle2);
}
+void
DrawPolygon (dw, v, n)
DviWidget dw;
int *v;
@@ -572,7 +638,7 @@
XtFree((char *)p);
}
-
+void
DrawFilledPolygon (dw, v, n)
DviWidget dw;
int *v;
@@ -608,7 +674,7 @@
#define POINTS_MAX 10000
-static
+static void
appendPoint(points, pointi, x, y)
XPoint *points;
int *pointi;
@@ -623,7 +689,7 @@
#define FLATNESS 1
-static
+static void
flattenCurve(points, pointi, x2, y2, x3, y3, x4, y4)
XPoint *points;
int *pointi;
@@ -659,7 +725,7 @@
}
}
-
+void
DrawSpline (dw, v, n)
DviWidget dw;
int *v;
--- groff-1.18.1.1.orig/src/xditview/font.c
+++ groff-1.18.1.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.1.orig/src/roff/troff/charinfo.h
+++ groff-1.18.1.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.1.orig/src/roff/troff/troff.h
+++ groff-1.18.1.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.1.orig/src/roff/troff/env.cc
+++ groff-1.18.1.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.1.orig/src/roff/troff/node.h
+++ groff-1.18.1.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.1.orig/src/roff/troff/env.h
+++ groff-1.18.1.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.1.orig/src/roff/troff/input.cc
+++ groff-1.18.1.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 = &macro_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.1.orig/src/roff/troff/token.h
+++ groff-1.18.1.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.1.orig/src/roff/troff/troff.man
+++ groff-1.18.1.1/src/roff/troff/troff.man
@@ -22,6 +22,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff-base/copyright.
+..
.
.
.\" --------------------------------------------------------------------
--- groff-1.18.1.1.orig/src/roff/troff/node.cc
+++ groff-1.18.1.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.1.orig/src/roff/nroff/nroff.sh
+++ groff-1.18.1.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.1.orig/src/roff/nroff/nroff.man
+++ groff-1.18.1.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.1.orig/src/roff/groff/groff.cc
+++ groff-1.18.1.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.1.orig/src/roff/groff/groff.man
+++ groff-1.18.1.1/src/roff/groff/groff.man
@@ -15,6 +15,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff-base/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
@@ -118,7 +122,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 +134,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 +318,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 +614,7 @@
.
.
.\" --------------------------------------------------------------------
-.SS Tranparent Options
+.SS Transparent Options
.\" --------------------------------------------------------------------
.
The following options are transparently handed over to the formatter
@@ -695,7 +699,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 +952,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 +964,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 +1045,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.1.orig/font/devX75/DESC
+++ groff-1.18.1.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.1.orig/font/devX75/M.proto
+++ groff-1.18.1.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.1.orig/font/devX75/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devlbp/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devascii/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devascii8/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devascii8/R.proto
+++ groff-1.18.1.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.1.orig/font/devascii8/DESC.proto
+++ groff-1.18.1.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.1.orig/font/devX100/DESC
+++ groff-1.18.1.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.1.orig/font/devX100/M.proto
+++ groff-1.18.1.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.1.orig/font/devX100/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devX100-12/DESC
+++ groff-1.18.1.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.1.orig/font/devX100-12/M.proto
+++ groff-1.18.1.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.1.orig/font/devX100-12/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devlj4/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devnippon/M.proto
+++ groff-1.18.1.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.1.orig/font/devnippon/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devnippon/R.proto
+++ groff-1.18.1.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.1.orig/font/devnippon/DESC.proto
+++ groff-1.18.1.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.1.orig/font/devps/M.proto
+++ groff-1.18.1.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.1.orig/font/devps/DESC.in
+++ groff-1.18.1.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.1.orig/font/devps/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devutf8/M.proto
+++ groff-1.18.1.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.1.orig/font/devutf8/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devutf8/DESC.proto
+++ groff-1.18.1.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.1.orig/font/devhtml/M.proto
+++ groff-1.18.1.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.1.orig/font/devhtml/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devhtml/DESC.proto
+++ groff-1.18.1.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.1.orig/font/devX75-12/DESC
+++ groff-1.18.1.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.1.orig/font/devX75-12/M.proto
+++ groff-1.18.1.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.1.orig/font/devX75-12/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devdvi/M.proto-NTT
+++ groff-1.18.1.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
+ F 48:1
+ F 49:1
+ F 50:1
+ F 51:1
+ F 52:1
+ F 53:1
+ F 54:1
+ F 55:1
+ F 56:1
+ F 57:1
+ F 65:1
+ F 66:1
+ F 67:1
+ F 68:1
+ F 69:1
+ F 70:1
+ F 71:1
+ F 72:1
+ F 73:1
+ F 74:1
+ F 75:1
+ F 76:1
+ F 77:1
+ F 78:1
+ F 79:1
+ F 80:1
+ F 81:1
+ F 82:1
+ F 83:1
+ F 84:1
+ F 85:1
+ F 86:1
+ F 87:1
+ F 88:1
+ F 89:1
+ F 90:1
+ F 97:1
+ F 98:1
+ F 99:1
+ F 100:1
+ F 101:1
+ F 102:1
+ F 103:1
+ F 104:1
+ F 105:1
+ F 106:1
+ F 107:1
+ F 108:1
+ F 109:1
+ F 110:1
+ F 111:1
+ F 112:1
+ F 113:1
+ F 114:1
+ F 115:1
+ F 116:1
+ F 117:1
+ F 118:1
+ F 119:1
+ F 120:1
+ F 121:1
+ 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.1.orig/font/devdvi/DESC.in
+++ groff-1.18.1.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.1.orig/font/devdvi/Makefile.sub
+++ groff-1.18.1.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.1.orig/font/devdvi/M.proto-ASCII
+++ groff-1.18.1.1/font/devdvi/M.proto-ASCII
@@ -0,0 +1,4 @@
+name M
+internalname min10
+checksum -375402250
+designsize 10485760
--- groff-1.18.1.1.orig/font/devdvi/FixMetric.sed
+++ groff-1.18.1.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.1.orig/ChangeLog.jp
+++ groff-1.18.1.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.1.orig/tmac/troffrc
+++ groff-1.18.1.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,13 @@
.\" Load hyphenation patterns from `hyphen.us' (in the tmac directory).
.do hpf hyphen.us
.
+.\" For CJK hack. The hardcoded list of locales is especially nasty, but
+.\" getting the locale charmap requires a troff extension.
+.ie "\V[LANG]"ja_JP.eucJP" .do mso euc-jp.tmac
+.el .ie "\V[LANG]"zh_CN" .do mso gb.tmac
+.el .ie "\V[LANG]"zh_CN.GBK" .do mso gb.tmac
+.el .ie "\V[LANG]"zh_SG" .do mso gb.tmac
+.el .ie "\V[LANG]"zh_SG.GBK" .do mso gb.tmac
+.el .if "\V[LANG]"zh_TW" .do mso big5.tmac
+.
.\" Don't let blank lines creep in here.
--- groff-1.18.1.1.orig/tmac/docj-nroff
+++ groff-1.18.1.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.1.orig/tmac/groff_trace.man
+++ groff-1.18.1.1/tmac/groff_trace.man
@@ -31,6 +31,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
--- groff-1.18.1.1.orig/tmac/docj-ditroff
+++ groff-1.18.1.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.1.orig/tmac/tty.tmac
+++ groff-1.18.1.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.1.orig/tmac/gb.tmac
+++ groff-1.18.1.1/tmac/gb.tmac
@@ -0,0 +1,15 @@
+.\" Kinsoku table for the GB2312 encoding of Chinese, recoded from
+.\" kinsoku.el in Emacs 22.0.50.
+.\" Checked by Simon Law, who reckons this is "mostly right". That will
+.\" probably do for now ...
+.\"
+.cflags 256 、。<E38081><E38082>゛゜´¨ ̄<C2A8>ヽゝ〃々
+.cflags 256 <><EFBC8F><EFBFBD><EFBFBD>≦≧<E289A6><E289A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
+.cflags 512 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
+.\" Simon Law supplied these.
+.cflags 512 <20>_ヾゞ仝〆ー
+.\"
+.\" http://tcl.apache.org/sources/tcl/tools/encoding/gb2312.txt lists U+FF0D
+.\" as FULLWIDTH HYPHEN-MINUS. Is this correct?
+.\"
+.hc <20>
--- groff-1.18.1.1.orig/tmac/docj.tmac
+++ groff-1.18.1.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.1.orig/tmac/Makefile.sub
+++ groff-1.18.1.1/tmac/Makefile.sub
@@ -25,15 +25,19 @@
html.tmac www.tmac \
eqnrc \
troffrc troffrc-end \
- hyphen.us
+ hyphen.us \
+ andocj.tmac \
+ euc-jp.tmac \
+ gb.tmac big5.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.1.orig/tmac/euc-jp.tmac
+++ groff-1.18.1.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.1.orig/tmac/big5.tmac
+++ groff-1.18.1.1/tmac/big5.tmac
@@ -0,0 +1,15 @@
+.\" Kinsoku table for the BIG5 encoding of Chinese, recoded from
+.\" kinsoku.el in Emacs 22.0.50.
+.\" Needs review by native zh_TW speaker.
+.\"
+.cflags 256 <20>B<EFBFBD>C<EFBFBD>A<EFBFBD>D<EFBFBD>G<EFBFBD>F<EFBFBD>H<EFBFBD>I
+.cflags 256 _<>i<EFBFBD>X◇<58>U<EFBFBD>L・<E383BB>^
+.cflags 256 <20>f<EFBFBD>b<EFBFBD>r<EFBFBD>n<EFBFBD>v<EFBFBD>z<EFBFBD>j」》『】¢<E38091>X
+.cflags 256 ―ゝゞ<EFBC8F>E
+.cflags 512 「』¥<EFBFA5>X<EFBFBD>C
+.cflags 512 柆<>y<EFBFBD>V<EFBFBD>Dゞ☆<E3829E>H<EFBFBD>}
+.\"
+.\" http://tcl.apache.org/sources/tcl/tools/encoding/big5.txt lists U+FF0D
+.\" as FULLWIDTH HYPHEN-MINUS. Is this correct?
+.\"
+.hc
--- groff-1.18.1.1.orig/tmac/andocj.tmac
+++ groff-1.18.1.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.1.orig/aclocal.m4
+++ groff-1.18.1.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.1.orig/configure.ac
+++ groff-1.18.1.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.1.orig/stamp-h
+++ groff-1.18.1.1/stamp-h
@@ -0,0 +1 @@
+timestamp
--- groff-1.18.1.1.orig/contrib/pic2graph/pic2graph.sh
+++ groff-1.18.1.1/contrib/pic2graph/pic2graph.sh
@@ -32,7 +32,7 @@
# We don't have complete option coverage on eqn because this is primarily
# intended as a pic translator; we can live with eqn defaults.
#
-# $Id: pic2graph.sh,v 1.2 2002/07/17 04:55:46 wlemb Exp $
+# $Id: pic2graph.sh,v 1.5 2003/10/31 19:32:36 wlemb Exp $
#
groffpic_opts=""
gs_opts=""
@@ -44,7 +44,7 @@
do
case $1 in
-unsafe)
- groffpic_opts="-U"
+ groffpic_opts="-U";;
-format)
format=$2
shift;;
@@ -68,16 +68,34 @@
eqndelim="delim $eqndelim"
fi
+# create temporary directory
+tmp=
+for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
+ test -z "$d" && continue
+
+ tmp=`(umask 077 && mktemp -d -q "$d/pic2graph-XXXXXX") 2> /dev/null` \
+ && test -n "$tmp" && test -d "$tmp" \
+ && break
+
+ tmp=$d/pic2graph$$-$RANDOM
+ (umask 077 && mkdir $tmp) 2> /dev/null \
+ && break
+done;
+if test -z "$tmp"; then
+ echo "$0: cannot create temporary directory" >&2
+ { (exit 1); exit 1; }
+fi
+
+trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
+
# Here goes:
# 1. Wrap the input in dummy .PS/PE macros (and add possibly null .EQ/.EN)
# 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-$$
-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 \
- && convert -crop 0x0 $convert_opts ${tmp}.ps ${tmp}.${format} \
- && cat ${tmp}.${format}
+ groff -e -p $groffpic_opts -Tps -P-pletter > $tmp/pic2graph.ps \
+ && convert -crop 0x0 $convert_opts $tmp/pic2graph.ps $tmp/pic2graph.$format \
+ && cat $tmp/pic2graph.$format
# End
--- groff-1.18.1.1.orig/contrib/mom/groff_mom.man
+++ groff-1.18.1.1/contrib/mom/groff_mom.man
@@ -13,6 +13,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.mso www.tmac
.
--- groff-1.18.1.1.orig/contrib/groffer/groffer.sh
+++ groff-1.18.1.1/contrib/groffer/groffer.sh
@@ -3228,17 +3228,12 @@
do
if is_not_empty "$d"; then
if obj d is_dir && obj d is_writable; then
- _TMP_DIR="${d}/${_PROGRAM_NAME}${_PROCESS_ID}";
- if obj _TMP_DIR is_dir; then
- rm -f "${_TMP_DIR}"/*;
+ _TMP_DIR="$(mktemp -d "${d}/${_PROGRAM_NAME}.XXXXXX")"
+ if test $? = 0; then
break;
else
- mkdir "${_TMP_DIR}";
- if obj _TMP_DIR is_not_dir; then
- _TMP_DIR='';
- continue;
- fi;
- break;
+ _TMP_DIR='';
+ continue;
fi;
fi;
if obj _TMP_DIR is_not_writable; then
--- groff-1.18.1.1.orig/contrib/eqn2graph/eqn2graph.sh
+++ groff-1.18.1.1/contrib/eqn2graph/eqn2graph.sh
@@ -32,7 +32,7 @@
#
# Thus, we pass -U to groff(1), and everything else to convert(1).
#
-# $Id: eqn2graph.sh,v 1.2 2002/07/17 04:55:46 wlemb Exp $
+# $Id: eqn2graph.sh,v 1.3 2003/10/28 07:46:23 wlemb Exp $
#
groff_opts=""
convert_opts=""
@@ -58,17 +58,34 @@
shift
done
+# create temporary directory
+tmp=
+for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
+ test -z "$d" && continue
+
+ tmp=`(umask 077 && mktemp -d -q "$d/eqn2graph-XXXXXX") 2> /dev/null` \
+ && test -n "$tmp" && test -d "$tmp" \
+ && break
+
+ tmp=$d/eqn2graph$$-$RANDOM
+ (umask 077 && mkdir $tmp) 2> /dev/null && break
+done;
+if test -z "$tmp"; then
+ echo "$0: cannot create temporary directory" >&2
+ { (exit 1); exit 1; }
+fi
+
+trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15
+
# Here goes:
# 1. Add .EQ/.EN.
# 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-$$
-trap "rm ${tmp}.*" 0 2 15
read equation
-(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"${equation}"'$') | \
- groff -e $groff_opts -Tps >${tmp}.ps \
- && convert -crop 0x0 $convert_opts ${tmp}.ps ${tmp}.${format} \
- && cat ${tmp}.${format}
+(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"$equation"'$') | \
+ groff -e $groff_opts -Tps -P-pletter > $tmp/eqn2graph.ps \
+ && convert -crop 0x0 $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \
+ && cat $tmp/eqn2graph.$format
# End
--- groff-1.18.1.1.orig/configure
+++ groff-1.18.1.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.1.orig/Makefile.in
+++ groff-1.18.1.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.1.orig/TODO.jp
+++ groff-1.18.1.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]
--- groff-1.18.1.1.orig/mdate.sh
+++ groff-1.18.1.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.1.orig/man/groff_out.man
+++ groff-1.18.1.1/man/groff_out.man
@@ -19,6 +19,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
--- groff-1.18.1.1.orig/man/groff_char.man
+++ groff-1.18.1.1/man/groff_char.man
@@ -32,6 +32,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup Part 1
--- groff-1.18.1.1.orig/man/groff_tmac.man
+++ groff-1.18.1.1/man/groff_tmac.man
@@ -32,6 +32,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
--- groff-1.18.1.1.orig/man/roff.man
+++ groff-1.18.1.1/man/roff.man
@@ -18,6 +18,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
--- groff-1.18.1.1.orig/man/ditroff.man
+++ groff-1.18.1.1/man/ditroff.man
@@ -18,6 +18,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
--- groff-1.18.1.1.orig/man/groff_diff.man
+++ groff-1.18.1.1/man/groff_diff.man
@@ -23,6 +23,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup
--- groff-1.18.1.1.orig/man/groff.man
+++ groff-1.18.1.1/man/groff.man
@@ -19,6 +19,10 @@
A copy of the Free Documentation License is included as a file called
FDL in the main directory of the groff source package.
..
+.ig
+A copy of the GNU Free Documentation License is also available in this
+Debian package as /usr/share/doc/groff/copyright.
+..
.
.\" --------------------------------------------------------------------
.\" Setup